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

83 lines
2.7 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-04 19:57:06 +02:00
private $authService;
2014-08-31 17:42:48 +02:00
private $userService;
2014-09-04 19:57:06 +02:00
private $inputReader;
2014-08-31 13:34:31 +02:00
2014-08-31 14:07:46 +02:00
public function __construct(
2014-09-04 19:57:06 +02:00
\Szurubooru\Services\AuthService $authService,
2014-08-31 14:07:46 +02:00
\Szurubooru\Services\UserService $userService,
\Szurubooru\Helpers\InputReader $inputReader)
2014-08-31 13:34:31 +02:00
{
2014-09-04 19:57:06 +02:00
$this->authService = $authService;
2014-08-31 13:34:31 +02:00
$this->userService = $userService;
2014-09-04 19:57:06 +02:00
$this->inputReader = $inputReader;
2014-08-31 13:34:31 +02:00
}
public function registerRoutes(\Szurubooru\Router $router)
{
2014-08-31 17:42:48 +02:00
$router->post('/api/users', [$this, 'register']);
$router->get('/api/users', [$this, 'getFiltered']);
2014-09-04 19:07:57 +02:00
$router->get('/api/users/:name', [$this, 'getByName']);
$router->put('/api/users/:name', [$this, 'update']);
$router->delete('/api/users/:name', [$this, 'delete']);
2014-08-31 13:34:31 +02:00
}
2014-09-05 13:50:51 +02:00
public function getByName($name)
{
$this->authService->assertPrivilege(\Szurubooru\Privilege::PRIVILEGE_VIEW_USER);
$user = $this->userService->getByName($name);
if (!$user)
throw new \DomainException('User with name "' . $name . '" was not found.');
return new \Szurubooru\ViewProxies\User($user);
}
public function getFiltered()
{
2014-09-04 19:57:06 +02:00
$this->authService->assertPrivilege(\Szurubooru\Privilege::PRIVILEGE_LIST_USERS);
//todo: move this to form data constructor
$searchFormData = new \Szurubooru\FormData\SearchFormData;
$searchFormData->query = $this->inputReader->query;
$searchFormData->order = $this->inputReader->order;
$searchFormData->pageNumber = $this->inputReader->page;
$searchResult = $this->userService->getFiltered($searchFormData);
$entities = array_map(function($user) { return new \Szurubooru\ViewProxies\User($user); }, $searchResult->entities);
return [
'data' => $entities,
'pageSize' => $searchResult->filter->pageSize,
'totalRecords' => $searchResult->totalRecords];
}
2014-08-31 17:42:48 +02:00
public function register()
2014-08-31 13:34:31 +02:00
{
2014-09-04 19:57:06 +02:00
$this->authService->assertPrivilege(\Szurubooru\Privilege::PRIVILEGE_REGISTER);
2014-08-31 17:42:48 +02:00
$input = new \Szurubooru\FormData\RegistrationFormData;
//todo: move this to form data constructor
2014-08-31 17:42:48 +02:00
$input->name = $this->inputReader->userName;
$input->password = $this->inputReader->password;
$input->email = $this->inputReader->email;
$user = $this->userService->register($input);
return new \Szurubooru\ViewProxies\User($user);
2014-08-31 13:34:31 +02:00
}
2014-09-04 19:07:57 +02:00
public function update($name)
2014-08-31 13:34:31 +02:00
{
throw new \BadMethodCallException('Not implemented');
}
2014-09-04 19:07:57 +02:00
public function delete($name)
2014-08-31 13:34:31 +02:00
{
2014-09-05 13:50:51 +02:00
if ($name == $this->authService->getLoggedInUser()->name)
$this->authService->assertPrivilege(\Szurubooru\Privilege::PRIVILEGE_DELETE_OWN_ACCOUNT);
else
$this->authService->assertPrivilege(\Szurubooru\Privilege::PRIVILEGE_DELETE_ACCOUNTS);
return $this->userService->deleteByName($name);
2014-08-31 13:34:31 +02:00
}
}