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;
+ }
+}