diff --git a/public_html/dispatch.php b/public_html/dispatch.php
index 439d71c3..fdae65c2 100644
--- a/public_html/dispatch.php
+++ b/public_html/dispatch.php
@@ -74,6 +74,7 @@ $postValidation =
\Chibi\Router::register(['PostController', 'uploadAction'], 'POST', '/posts/upload', $postValidation);
\Chibi\Router::register(['PostController', 'editView'], 'GET', '/post/{id}/edit', $postValidation);
\Chibi\Router::register(['PostController', 'editAction'], 'POST', '/post/{id}/edit', $postValidation);
+\Chibi\Router::register(['PostController', 'deleteAction'], 'POST', '/post/{id}/delete', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}', $postValidation);
\Chibi\Router::register(['PostController', 'listView'], 'GET', '/{source}/{query}', $postValidation);
@@ -105,7 +106,6 @@ foreach (['GET', 'POST'] as $method)
\Chibi\Router::register(['PostController', 'thumbAction'], $method, '/post/{name}/thumb', $postValidation);
\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', '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 35ad45a1..0e45f9de 100644
--- a/src/Controllers/PostController.php
+++ b/src/Controllers/PostController.php
@@ -187,15 +187,8 @@ class PostController
public function deleteAction($id)
{
- $post = PostModel::findByIdOrName($id);
- Access::assert(Privilege::DeletePost, Access::getIdentity($post->getUploader()));
-
- if (!InputHelper::get('submit'))
- return;
-
- PostModel::remove($post);
-
- LogHelper::log('{user} deleted {post}', ['post' => TextHelper::reprPost($id)]);
+ Api::run(new DeletePostJob(), [
+ DeletePostJob::POST_ID => $id]);
}
public function addFavoriteAction($id)
diff --git a/src/Jobs/DeletePostJob.php b/src/Jobs/DeletePostJob.php
new file mode 100644
index 00000000..fc88d55c
--- /dev/null
+++ b/src/Jobs/DeletePostJob.php
@@ -0,0 +1,33 @@
+post;
+
+ PostModel::remove($post);
+
+ LogHelper::log('{user} deleted {post}', [
+ 'user' => TextHelper::reprUser(Auth::getCurrentUser()),
+ 'post' => TextHelper::reprPost($post)]);
+ }
+
+ public function requiresPrivilege()
+ {
+ return
+ [
+ Privilege::DeletePost,
+ Access::getIdentity($this->post->getUploader())
+ ];
+ }
+
+ public function requiresAuthentication()
+ {
+ return true;
+ }
+
+ public function requiresConfirmedEmail()
+ {
+ return getConfig()->registration->needEmailForCommenting;
+ }
+}