Moved post controller to routes
This commit is contained in:
parent
193d1c5f7a
commit
d8a4e1ec4e
13 changed files with 374 additions and 184 deletions
|
@ -1,179 +0,0 @@
|
||||||
<?php
|
|
||||||
namespace Szurubooru\Controllers;
|
|
||||||
use Szurubooru\Config;
|
|
||||||
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
|
||||||
use Szurubooru\Controllers\ViewProxies\SnapshotViewProxy;
|
|
||||||
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
|
||||||
use Szurubooru\Entities\Post;
|
|
||||||
use Szurubooru\FormData\PostEditFormData;
|
|
||||||
use Szurubooru\FormData\UploadFormData;
|
|
||||||
use Szurubooru\Helpers\InputReader;
|
|
||||||
use Szurubooru\Privilege;
|
|
||||||
use Szurubooru\Router;
|
|
||||||
use Szurubooru\SearchServices\Parsers\PostSearchParser;
|
|
||||||
use Szurubooru\Services\AuthService;
|
|
||||||
use Szurubooru\Services\PostFeatureService;
|
|
||||||
use Szurubooru\Services\PostService;
|
|
||||||
use Szurubooru\Services\PrivilegeService;
|
|
||||||
|
|
||||||
final class PostController extends AbstractController
|
|
||||||
{
|
|
||||||
private $config;
|
|
||||||
private $authService;
|
|
||||||
private $privilegeService;
|
|
||||||
private $postService;
|
|
||||||
private $postFeatureService;
|
|
||||||
private $postSearchParser;
|
|
||||||
private $inputReader;
|
|
||||||
private $postViewProxy;
|
|
||||||
private $snapshotViewProxy;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
Config $config,
|
|
||||||
AuthService $authService,
|
|
||||||
PrivilegeService $privilegeService,
|
|
||||||
PostService $postService,
|
|
||||||
PostFeatureService $postFeatureService,
|
|
||||||
PostSearchParser $postSearchParser,
|
|
||||||
InputReader $inputReader,
|
|
||||||
UserViewProxy $userViewProxy,
|
|
||||||
PostViewProxy $postViewProxy,
|
|
||||||
SnapshotViewProxy $snapshotViewProxy)
|
|
||||||
{
|
|
||||||
$this->config = $config;
|
|
||||||
$this->authService = $authService;
|
|
||||||
$this->privilegeService = $privilegeService;
|
|
||||||
$this->postService = $postService;
|
|
||||||
$this->postFeatureService = $postFeatureService;
|
|
||||||
$this->postSearchParser = $postSearchParser;
|
|
||||||
$this->inputReader = $inputReader;
|
|
||||||
$this->userViewProxy = $userViewProxy;
|
|
||||||
$this->postViewProxy = $postViewProxy;
|
|
||||||
$this->snapshotViewProxy = $snapshotViewProxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerRoutes(Router $router)
|
|
||||||
{
|
|
||||||
$router->post('/api/posts', [$this, 'createPost']);
|
|
||||||
$router->get('/api/posts', [$this, 'getFiltered']);
|
|
||||||
$router->get('/api/posts/featured', [$this, 'getFeatured']);
|
|
||||||
$router->get('/api/posts/:postNameOrId', [$this, 'getByNameOrId']);
|
|
||||||
$router->get('/api/posts/:postNameOrId/history', [$this, 'getHistory']);
|
|
||||||
$router->put('/api/posts/:postNameOrId', [$this, 'updatePost']);
|
|
||||||
$router->delete('/api/posts/:postNameOrId', [$this, 'deletePost']);
|
|
||||||
$router->post('/api/posts/:postNameOrId/feature', [$this, 'featurePost']);
|
|
||||||
$router->put('/api/posts/:postNameOrId/feature', [$this, 'featurePost']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFeatured()
|
|
||||||
{
|
|
||||||
$post = $this->postFeatureService->getFeaturedPost();
|
|
||||||
$user = $this->postFeatureService->getFeaturedPostUser();
|
|
||||||
return [
|
|
||||||
'user' => $this->userViewProxy->fromEntity($user),
|
|
||||||
'post' => $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig()),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getByNameOrId($postNameOrId)
|
|
||||||
{
|
|
||||||
$post = $this->postService->getByNameOrId($postNameOrId);
|
|
||||||
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHistory($postNameOrId)
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::VIEW_HISTORY);
|
|
||||||
$post = $this->getByNameOrId($postNameOrId);
|
|
||||||
return ['data' => $this->snapshotViewProxy->fromArray($this->postService->getHistory($post))];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFiltered()
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::LIST_POSTS);
|
|
||||||
|
|
||||||
$filter = $this->postSearchParser->createFilterFromInputReader($this->inputReader);
|
|
||||||
$filter->setPageSize($this->config->posts->postsPerPage);
|
|
||||||
$this->postService->decorateFilterFromBrowsingSettings($filter);
|
|
||||||
|
|
||||||
$result = $this->postService->getFiltered($filter);
|
|
||||||
$entities = $this->postViewProxy->fromArray($result->getEntities(), $this->getLightFetchConfig());
|
|
||||||
return [
|
|
||||||
'data' => $entities,
|
|
||||||
'pageSize' => $result->getPageSize(),
|
|
||||||
'totalRecords' => $result->getTotalRecords()];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function createPost()
|
|
||||||
{
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS);
|
|
||||||
$formData = new UploadFormData($this->inputReader);
|
|
||||||
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS);
|
|
||||||
|
|
||||||
if ($formData->anonymous)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS_ANONYMOUSLY);
|
|
||||||
|
|
||||||
$post = $this->postService->createPost($formData);
|
|
||||||
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function updatePost($postNameOrId)
|
|
||||||
{
|
|
||||||
$post = $this->postService->getByNameOrId($postNameOrId);
|
|
||||||
$formData = new PostEditFormData($this->inputReader);
|
|
||||||
|
|
||||||
if ($formData->content !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_CONTENT);
|
|
||||||
|
|
||||||
if ($formData->thumbnail !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_THUMBNAIL);
|
|
||||||
|
|
||||||
if ($formData->safety !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_SAFETY);
|
|
||||||
|
|
||||||
if ($formData->source !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_SOURCE);
|
|
||||||
|
|
||||||
if ($formData->tags !== null)
|
|
||||||
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_TAGS);
|
|
||||||
|
|
||||||
$this->postService->updatePost($post, $formData);
|
|
||||||
$post = $this->postService->getByNameOrId($postNameOrId);
|
|
||||||
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deletePost($postNameOrId)
|
|
||||||
{
|
|
||||||
$post = $this->postService->getByNameOrId($postNameOrId);
|
|
||||||
$this->postService->deletePost($post);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function featurePost($postNameOrId)
|
|
||||||
{
|
|
||||||
$post = $this->postService->getByNameOrId($postNameOrId);
|
|
||||||
$this->postFeatureService->featurePost($post);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getFullFetchConfig()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
[
|
|
||||||
PostViewProxy::FETCH_RELATIONS => true,
|
|
||||||
PostViewProxy::FETCH_TAGS => true,
|
|
||||||
PostViewProxy::FETCH_USER => true,
|
|
||||||
PostViewProxy::FETCH_HISTORY => true,
|
|
||||||
PostViewProxy::FETCH_OWN_SCORE => true,
|
|
||||||
PostViewProxy::FETCH_FAVORITES => true,
|
|
||||||
PostViewProxy::FETCH_NOTES => true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getLightFetchConfig()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
[
|
|
||||||
PostViewProxy::FETCH_TAGS => true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
BIN
src/Routes/Posts/.UpdatePost.php.swp
Normal file
BIN
src/Routes/Posts/.UpdatePost.php.swp
Normal file
Binary file not shown.
29
src/Routes/Posts/AbstractPostRoute.php
Normal file
29
src/Routes/Posts/AbstractPostRoute.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Routes\AbstractRoute;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
|
||||||
|
abstract class AbstractPostRoute extends AbstractRoute
|
||||||
|
{
|
||||||
|
private function getFullFetchConfig()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
[
|
||||||
|
PostViewProxy::FETCH_RELATIONS => true,
|
||||||
|
PostViewProxy::FETCH_TAGS => true,
|
||||||
|
PostViewProxy::FETCH_USER => true,
|
||||||
|
PostViewProxy::FETCH_HISTORY => true,
|
||||||
|
PostViewProxy::FETCH_OWN_SCORE => true,
|
||||||
|
PostViewProxy::FETCH_FAVORITES => true,
|
||||||
|
PostViewProxy::FETCH_NOTES => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLightFetchConfig()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
[
|
||||||
|
PostViewProxy::FETCH_TAGS => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
52
src/Routes/Posts/CreatePost.php
Normal file
52
src/Routes/Posts/CreatePost.php
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
use Szurubooru\FormData\UploadFormData;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class CreatePost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
private $inputReader;
|
||||||
|
private $postViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService,
|
||||||
|
InputReader $inputReader,
|
||||||
|
PostViewProxy $postViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
$this->postViewProxy = $postViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS);
|
||||||
|
$formData = new UploadFormData($this->inputReader);
|
||||||
|
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS);
|
||||||
|
|
||||||
|
if ($formData->anonymous)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::UPLOAD_POSTS_ANONYMOUSLY);
|
||||||
|
|
||||||
|
$post = $this->postService->createPost($formData);
|
||||||
|
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
||||||
|
}
|
||||||
|
}
|
37
src/Routes/Posts/DeletePost.php
Normal file
37
src/Routes/Posts/DeletePost.php
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class DeletePost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['DELETE'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts/:postNameOrId';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::DELETE_POSTS);
|
||||||
|
|
||||||
|
$post = $this->postService->getByNameOrId($this->getArgument('postNameOrId'));
|
||||||
|
$this->postService->deletePost($post);
|
||||||
|
}
|
||||||
|
}
|
41
src/Routes/Posts/FeaturePost.php
Normal file
41
src/Routes/Posts/FeaturePost.php
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PostFeatureService;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class FeaturePost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
private $postFeatureService;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService,
|
||||||
|
PostFeatureService $postFeatureService)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
$this->postFeatureService = $postFeatureService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['POST', 'PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts/:postNameOrId/feature';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::FEATURE_POSTS);
|
||||||
|
|
||||||
|
$post = $this->postService->getByNameOrId($this->getArgument('postNameOrId'));
|
||||||
|
$this->postFeatureService->featurePost($post);
|
||||||
|
}
|
||||||
|
}
|
42
src/Routes/Posts/GetFeaturedPost.php
Normal file
42
src/Routes/Posts/GetFeaturedPost.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\UserViewProxy;
|
||||||
|
use Szurubooru\Entities\Post;
|
||||||
|
use Szurubooru\Services\PostFeatureService;
|
||||||
|
|
||||||
|
class GetFeaturedPost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $postFeatureService;
|
||||||
|
private $postViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PostFeatureService $postFeatureService,
|
||||||
|
UserViewProxy $userViewProxy,
|
||||||
|
PostViewProxy $postViewProxy)
|
||||||
|
{
|
||||||
|
$this->postFeatureService = $postFeatureService;
|
||||||
|
$this->userViewProxy = $userViewProxy;
|
||||||
|
$this->postViewProxy = $postViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts/featured';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$post = $this->postFeatureService->getFeaturedPost();
|
||||||
|
$user = $this->postFeatureService->getFeaturedPostUser();
|
||||||
|
return [
|
||||||
|
'user' => $this->userViewProxy->fromEntity($user),
|
||||||
|
'post' => $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig()),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
41
src/Routes/Posts/GetPost.php
Normal file
41
src/Routes/Posts/GetPost.php
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class GetPost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
private $postViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService,
|
||||||
|
PostViewProxy $postViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
$this->postViewProxy = $postViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts/:postNameOrId';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::VIEW_POSTS);
|
||||||
|
|
||||||
|
$post = $this->postService->getByNameOrId($this->getArgument(postNameOrId));
|
||||||
|
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,11 +4,10 @@ use Szurubooru\Config;
|
||||||
use Szurubooru\Dao\PublicFileDao;
|
use Szurubooru\Dao\PublicFileDao;
|
||||||
use Szurubooru\Entities\Post;
|
use Szurubooru\Entities\Post;
|
||||||
use Szurubooru\Helpers\MimeHelper;
|
use Szurubooru\Helpers\MimeHelper;
|
||||||
use Szurubooru\Routes\AbstractRoute;
|
|
||||||
use Szurubooru\Services\NetworkingService;
|
use Szurubooru\Services\NetworkingService;
|
||||||
use Szurubooru\Services\PostService;
|
use Szurubooru\Services\PostService;
|
||||||
|
|
||||||
class GetPostContent extends AbstractRoute
|
class GetPostContent extends AbstractPostRoute
|
||||||
{
|
{
|
||||||
private $config;
|
private $config;
|
||||||
private $fileDao;
|
private $fileDao;
|
||||||
|
|
|
@ -3,12 +3,11 @@ namespace Szurubooru\Routes\Posts;
|
||||||
use Szurubooru\Config;
|
use Szurubooru\Config;
|
||||||
use Szurubooru\Dao\PublicFileDao;
|
use Szurubooru\Dao\PublicFileDao;
|
||||||
use Szurubooru\Entities\Post;
|
use Szurubooru\Entities\Post;
|
||||||
use Szurubooru\Routes\AbstractRoute;
|
|
||||||
use Szurubooru\Services\NetworkingService;
|
use Szurubooru\Services\NetworkingService;
|
||||||
use Szurubooru\Services\PostService;
|
use Szurubooru\Services\PostService;
|
||||||
use Szurubooru\Services\PostThumbnailService;
|
use Szurubooru\Services\PostThumbnailService;
|
||||||
|
|
||||||
class GetPostThumbnail extends AbstractRoute
|
class GetPostThumbnail extends AbstractPostRoute
|
||||||
{
|
{
|
||||||
private $config;
|
private $config;
|
||||||
private $fileDao;
|
private $fileDao;
|
||||||
|
|
61
src/Routes/Posts/GetPosts.php
Normal file
61
src/Routes/Posts/GetPosts.php
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Config;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\SearchServices\Parsers\PostSearchParser;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class GetPosts extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $config;
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
private $postSearchParser;
|
||||||
|
private $inputReader;
|
||||||
|
private $postViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
Config $config,
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService,
|
||||||
|
PostSearchParser $postSearchParser,
|
||||||
|
InputReader $inputReader,
|
||||||
|
PostViewProxy $postViewProxy)
|
||||||
|
{
|
||||||
|
$this->config = $config;
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
$this->postSearchParser = $postSearchParser;
|
||||||
|
$this->inputReader = $inputReader;
|
||||||
|
$this->postViewProxy = $postViewProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['GET'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::LIST_POSTS);
|
||||||
|
|
||||||
|
$filter = $this->postSearchParser->createFilterFromInputReader($this->inputReader);
|
||||||
|
$filter->setPageSize($this->config->posts->postsPerPage);
|
||||||
|
$this->postService->decorateFilterFromBrowsingSettings($filter);
|
||||||
|
|
||||||
|
$result = $this->postService->getFiltered($filter);
|
||||||
|
$entities = $this->postViewProxy->fromArray($result->getEntities(), $this->getLightFetchConfig());
|
||||||
|
return [
|
||||||
|
'data' => $entities,
|
||||||
|
'pageSize' => $result->getPageSize(),
|
||||||
|
'totalRecords' => $result->getTotalRecords()];
|
||||||
|
}
|
||||||
|
}
|
62
src/Routes/Posts/UpdatePost.php
Normal file
62
src/Routes/Posts/UpdatePost.php
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
namespace Szurubooru\Routes\Posts;
|
||||||
|
use Szurubooru\Controllers\ViewProxies\PostViewProxy;
|
||||||
|
use Szurubooru\FormData\PostEditFormData;
|
||||||
|
use Szurubooru\Helpers\InputReader;
|
||||||
|
use Szurubooru\Privilege;
|
||||||
|
use Szurubooru\Services\PostService;
|
||||||
|
use Szurubooru\Services\PrivilegeService;
|
||||||
|
|
||||||
|
class UpdatePost extends AbstractPostRoute
|
||||||
|
{
|
||||||
|
private $privilegeService;
|
||||||
|
private $postService;
|
||||||
|
private $inputReader;
|
||||||
|
private $postViewProxy;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PrivilegeService $privilegeService,
|
||||||
|
PostService $postService,
|
||||||
|
InputReader $inputReader,
|
||||||
|
PostViewProxy $postViewProxy)
|
||||||
|
{
|
||||||
|
$this->privilegeService = $privilegeService;
|
||||||
|
$this->postService = $postService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethods()
|
||||||
|
{
|
||||||
|
return ['PUT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return '/api/posts/:postNameOrId';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function work()
|
||||||
|
{
|
||||||
|
$postNameOrId = $this->getArgument('postNameOrId');
|
||||||
|
$post = $this->postService->getByNameOrId($postNameOrId);
|
||||||
|
$formData = new PostEditFormData($this->inputReader);
|
||||||
|
|
||||||
|
if ($formData->content !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_CONTENT);
|
||||||
|
|
||||||
|
if ($formData->thumbnail !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_THUMBNAIL);
|
||||||
|
|
||||||
|
if ($formData->safety !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_SAFETY);
|
||||||
|
|
||||||
|
if ($formData->source !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_SOURCE);
|
||||||
|
|
||||||
|
if ($formData->tags !== null)
|
||||||
|
$this->privilegeService->assertPrivilege(Privilege::CHANGE_POST_TAGS);
|
||||||
|
|
||||||
|
$this->postService->updatePost($post, $formData);
|
||||||
|
$post = $this->postService->getByNameOrId($postNameOrId);
|
||||||
|
return $this->postViewProxy->fromEntity($post, $this->getFullFetchConfig());
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,7 +59,6 @@ return [
|
||||||
return [
|
return [
|
||||||
$container->get(\Szurubooru\Controllers\UserController::class),
|
$container->get(\Szurubooru\Controllers\UserController::class),
|
||||||
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
$container->get(\Szurubooru\Controllers\UserAvatarController::class),
|
||||||
$container->get(\Szurubooru\Controllers\PostController::class),
|
|
||||||
$container->get(\Szurubooru\Controllers\PostNotesController::class),
|
$container->get(\Szurubooru\Controllers\PostNotesController::class),
|
||||||
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
$container->get(\Szurubooru\Controllers\ScoreController::class),
|
||||||
$container->get(\Szurubooru\Controllers\TagController::class),
|
$container->get(\Szurubooru\Controllers\TagController::class),
|
||||||
|
@ -79,8 +78,15 @@ return [
|
||||||
$container->get(\Szurubooru\Routes\Favorites\GetFavoriteUsers::class),
|
$container->get(\Szurubooru\Routes\Favorites\GetFavoriteUsers::class),
|
||||||
$container->get(\Szurubooru\Routes\Favorites\AddToFavorites::class),
|
$container->get(\Szurubooru\Routes\Favorites\AddToFavorites::class),
|
||||||
$container->get(\Szurubooru\Routes\Favorites\RemoveFromFavorites::class),
|
$container->get(\Szurubooru\Routes\Favorites\RemoveFromFavorites::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\CreatePost::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\DeletePost::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\FeaturePost::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\GetFeaturedPost::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\GetPost::class),
|
||||||
$container->get(\Szurubooru\Routes\Posts\GetPostContent::class),
|
$container->get(\Szurubooru\Routes\Posts\GetPostContent::class),
|
||||||
$container->get(\Szurubooru\Routes\Posts\GetPostThumbnail::class),
|
$container->get(\Szurubooru\Routes\Posts\GetPostThumbnail::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\GetPosts::class),
|
||||||
|
$container->get(\Szurubooru\Routes\Posts\UpdatePost::class),
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue