diff --git a/public_html/dispatch.php b/public_html/dispatch.php index a207c242..d09b7b78 100644 --- a/public_html/dispatch.php +++ b/public_html/dispatch.php @@ -87,6 +87,7 @@ $postValidation = \Chibi\Router::register(['PostController', 'upvotedView'], 'GET', '/upvoted', $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(['CommentController', 'listView'], 'GET', '/comments'); \Chibi\Router::register(['CommentController', 'listView'], 'GET', '/comments/{page}', ['page' => '\d+']); @@ -105,7 +106,6 @@ foreach (['GET', 'POST'] as $method) \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', 'flagAction'], $method, '/post/{id}/flag', $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 3786268c..cef1e31f 100644 --- a/src/Controllers/PostController.php +++ b/src/Controllers/PostController.php @@ -168,21 +168,7 @@ class PostController public function flagAction($id) { - $post = PostModel::findByIdOrName($id); - Access::assert(Privilege::FlagPost, Access::getIdentity($post->getUploader())); - - if (!InputHelper::get('submit')) - return; - - $key = TextHelper::reprPost($post); - - $flagged = SessionHelper::get('flagged', []); - if (in_array($key, $flagged)) - throw new SimpleException('You already flagged this post'); - $flagged []= $key; - SessionHelper::set('flagged', $flagged); - - LogHelper::log('{user} flagged {post} for moderator attention', ['post' => TextHelper::reprPost($post)]); + Api::run(new FlagPostJob(), [FlagPostJob::POST_ID => $id]); } public function hideAction($id) diff --git a/src/Jobs/FlagPostJob.php b/src/Jobs/FlagPostJob.php new file mode 100644 index 00000000..801a4292 --- /dev/null +++ b/src/Jobs/FlagPostJob.php @@ -0,0 +1,40 @@ +post; + $key = TextHelper::reprPost($post); + + $flagged = SessionHelper::get('flagged', []); + if (in_array($key, $flagged)) + throw new SimpleException('You already flagged this post'); + $flagged []= $key; + SessionHelper::set('flagged', $flagged); + + LogHelper::log('{user} flagged {post} for moderator attention', [ + 'user' => TextHelper::reprUser(Auth::getCurrentUser()), + 'post' => TextHelper::reprPost($post)]); + + return $post; + } + + public function requiresPrivilege() + { + return + [ + Privilege::FlagPost, + Access::getIdentity($this->post->getUploader()) + ]; + } + + public function requiresAuthentication() + { + return false; + } + + public function requiresConfirmedEmail() + { + return false; + } +}