diff --git a/public_html/dispatch.php b/public_html/dispatch.php index d09b7b78..439d71c3 100644 --- a/public_html/dispatch.php +++ b/public_html/dispatch.php @@ -88,6 +88,8 @@ $postValidation = \Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted/{page}', $postValidation); \Chibi\Router::register(['PostController', 'toggleTagAction'], 'POST', '/post/{id}/toggle-tag/{tag}/{enable}', $postValidation); \Chibi\Router::register(['PostController', 'flagAction'], 'POST', '/post/{id}/flag', $postValidation); +\Chibi\Router::register(['PostController', 'hideAction'], 'POST', '/post/{id}/hide', $postValidation); +\Chibi\Router::register(['PostController', 'unhideAction'], 'POST', '/post/{id}/unhide', $postValidation); \Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments'); \Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments/{page}', ['page' => '\d+']); @@ -104,8 +106,6 @@ foreach (['GET', 'POST'] as $method) \Chibi\Router::register(['PostController', 'removeFavoriteAction'], $method, '/post/{id}/rem-fav', $postValidation); \Chibi\Router::register(['PostController', 'addFavoriteAction'], $method, '/post/{id}/add-fav', $postValidation); \Chibi\Router::register(['PostController', 'deleteAction'], $method, '/post/{id}/delete', $postValidation); - \Chibi\Router::register(['PostController', 'hideAction'], $method, '/post/{id}/hide', $postValidation); - \Chibi\Router::register(['PostController', 'unhideAction'], $method, '/post/{id}/unhide', $postValidation); \Chibi\Router::register(['PostController', 'featureAction'], $method, '/post/{id}/feature', $postValidation); \Chibi\Router::register(['PostController', 'scoreAction'], $method, '/post/{id}/score/{score}', $postValidation); diff --git a/src/Controllers/PostController.php b/src/Controllers/PostController.php index cef1e31f..35ad45a1 100644 --- a/src/Controllers/PostController.php +++ b/src/Controllers/PostController.php @@ -173,30 +173,16 @@ class PostController public function hideAction($id) { - $post = PostModel::findByIdOrName($id); - Access::assert(Privilege::HidePost, Access::getIdentity($post->getUploader())); - - if (!InputHelper::get('submit')) - return; - - $post->setHidden(true); - PostModel::save($post); - - LogHelper::log('{user} hidden {post}', ['post' => TextHelper::reprPost($post)]); + Api::run(new TogglePostVisibilityJob(), [ + TogglePostVisibilityJob::POST_ID => $id, + TogglePostVisibilityJob::STATE => false]); } public function unhideAction($id) { - $post = PostModel::findByIdOrName($id); - Access::assert(Privilege::HidePost, Access::getIdentity($post->getUploader())); - - if (!InputHelper::get('submit')) - return; - - $post->setHidden(false); - PostModel::save($post); - - LogHelper::log('{user} unhidden {post}', ['post' => TextHelper::reprPost($post)]); + Api::run(new TogglePostVisibilityJob(), [ + TogglePostVisibilityJob::POST_ID => $id, + TogglePostVisibilityJob::STATE => true]); } public function deleteAction($id) diff --git a/src/Jobs/TogglePostVisibilityJob.php b/src/Jobs/TogglePostVisibilityJob.php new file mode 100644 index 00000000..3ada9958 --- /dev/null +++ b/src/Jobs/TogglePostVisibilityJob.php @@ -0,0 +1,40 @@ +post; + $visible = boolval($this->getArgument(self::STATE)); + + $post->setHidden(!$visible); + PostModel::save($post); + + LogHelper::log( + $visible + ? '{user} unhidden {post}' + : '{user} hidden {post}', [ + 'user' => TextHelper::reprUser(Auth::getCurrentUser()), + 'post' => TextHelper::reprPost($post)]); + + return $post; + } + + public function requiresPrivilege() + { + return + [ + Privilege::HidePost, + Access::getIdentity($this->post->getUploader()) + ]; + } + + public function requiresAuthentication() + { + return true; + } + + public function requiresConfirmedEmail() + { + return false; + } +}