This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/src/Controllers/UserController.php

116 lines
3.6 KiB
PHP
Raw Normal View History

2014-08-31 13:34:31 +02:00
<?php
namespace Szurubooru\Controllers;
final class UserController extends AbstractController
{
2014-09-06 10:00:26 +02:00
private $privilegeService;
2014-08-31 17:42:48 +02:00
private $userService;
2014-09-04 19:57:06 +02:00
private $inputReader;
2014-09-05 19:18:49 +02:00
private $userViewProxy;
2014-08-31 13:34:31 +02:00
2014-08-31 14:07:46 +02:00
public function __construct(
2014-09-06 10:00:26 +02:00
\Szurubooru\Services\PrivilegeService $privilegeService,
2014-08-31 14:07:46 +02:00
\Szurubooru\Services\UserService $userService,
2014-09-05 19:18:49 +02:00
\Szurubooru\Helpers\InputReader $inputReader,
\Szurubooru\Controllers\ViewProxies\UserViewProxy $userViewProxy)
2014-08-31 13:34:31 +02:00
{
2014-09-06 10:00:26 +02:00
$this->privilegeService = $privilegeService;
2014-08-31 13:34:31 +02:00
$this->userService = $userService;
2014-09-04 19:57:06 +02:00
$this->inputReader = $inputReader;
2014-09-05 19:18:49 +02:00
$this->userViewProxy = $userViewProxy;
2014-08-31 13:34:31 +02:00
}
public function registerRoutes(\Szurubooru\Router $router)
{
$router->post('/api/users', [$this, 'createUser']);
$router->get('/api/users', [$this, 'getFiltered']);
$router->get('/api/users/:userName', [$this, 'getByName']);
$router->put('/api/users/:userName', [$this, 'updateUser']);
$router->delete('/api/users/:userName', [$this, 'deleteUser']);
2014-08-31 13:34:31 +02:00
}
public function getByName($userName)
2014-09-05 13:50:51 +02:00
{
$user = $this->userService->getByName($userName);
2014-09-05 13:50:51 +02:00
if (!$user)
throw new \InvalidArgumentException('User with name "' . $userName . '" was not found.');
2014-09-05 19:18:49 +02:00
return $this->userViewProxy->fromEntity($user);
2014-09-05 13:50:51 +02:00
}
public function getFiltered()
{
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::LIST_USERS);
2014-09-04 19:57:06 +02:00
$formData = new \Szurubooru\FormData\SearchFormData($this->inputReader);
$searchResult = $this->userService->getFiltered($formData);
2014-09-05 19:18:49 +02:00
$entities = $this->userViewProxy->fromArray($searchResult->entities);
return [
'data' => $entities,
'pageSize' => $searchResult->filter->pageSize,
'totalRecords' => $searchResult->totalRecords];
}
public function createUser()
2014-08-31 13:34:31 +02:00
{
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::REGISTER);
$formData = new \Szurubooru\FormData\RegistrationFormData($this->inputReader);
$user = $this->userService->createUser($formData);
2014-09-05 19:18:49 +02:00
return $this->userViewProxy->fromEntity($user);
2014-08-31 13:34:31 +02:00
}
public function updateUser($userName)
2014-08-31 13:34:31 +02:00
{
$formData = new \Szurubooru\FormData\UserEditFormData($this->inputReader);
if ($formData->avatarStyle !== null)
{
$this->privilegeService->assertPrivilege(
$this->privilegeService->isLoggedIn($userName)
? \Szurubooru\Privilege::CHANGE_OWN_AVATAR_STYLE
: \Szurubooru\Privilege::CHANGE_ALL_AVATAR_STYLES);
}
if ($formData->userName !== null)
{
$this->privilegeService->assertPrivilege(
$this->privilegeService->isLoggedIn($userName)
? \Szurubooru\Privilege::CHANGE_OWN_NAME
: \Szurubooru\Privilege::CHANGE_ALL_NAMES);
}
if ($formData->password !== null)
{
$this->privilegeService->assertPrivilege(
$this->privilegeService->isLoggedIn($userName)
? \Szurubooru\Privilege::CHANGE_OWN_PASSWORD
: \Szurubooru\Privilege::CHANGE_ALL_PASSWORDS);
}
if ($formData->email !== null)
{
$this->privilegeService->assertPrivilege(
$this->privilegeService->isLoggedIn($userName)
? \Szurubooru\Privilege::CHANGE_OWN_EMAIL_ADDRESS
: \Szurubooru\Privilege::CHANGE_ALL_EMAIL_ADDRESSES);
}
if ($formData->accessRank)
{
$this->privilegeService->assertPrivilege(\Szurubooru\Privilege::CHANGE_ACCESS_RANK);
}
$user = $this->userService->updateUser($userName, $formData);
return $this->userViewProxy->fromEntity($user);
2014-08-31 13:34:31 +02:00
}
public function deleteUser($userName)
2014-08-31 13:34:31 +02:00
{
2014-09-06 10:00:26 +02:00
$this->privilegeService->assertPrivilege(
$this->privilegeService->isLoggedIn($userName)
? \Szurubooru\Privilege::DELETE_OWN_ACCOUNT
: \Szurubooru\Privilege::DELETE_ACCOUNTS);
2014-09-06 10:00:26 +02:00
return $this->userService->deleteUserByName($userName);
2014-08-31 13:34:31 +02:00
}
}