diff --git a/extensions/akismet/extend.php b/extensions/akismet/extend.php index d233931b42..4503f266f7 100644 --- a/extensions/akismet/extend.php +++ b/extensions/akismet/extend.php @@ -10,8 +10,8 @@ use Flarum\Akismet\Listener; use Flarum\Akismet\Provider\AkismetProvider; use Flarum\Approval\Event\PostWasApproved; +use Flarum\Approval\Event\PostWasUnapproved; use Flarum\Extend; -use Flarum\Post\Event\Hidden; use Flarum\Post\Event\Saving; use Flarum\Post\Post; @@ -25,7 +25,7 @@ new Extend\Locales(__DIR__.'/locale'), (new Extend\Event()) - ->listen(Hidden::class, Listener\SubmitSpam::class) + ->listen(PostWasUnapproved::class, Listener\SubmitSpam::class) ->listen(PostWasApproved::class, Listener\SubmitHam::class) ->listen(Saving::class, Listener\ValidatePost::class), diff --git a/extensions/akismet/src/Listener/SubmitSpam.php b/extensions/akismet/src/Listener/SubmitSpam.php index 732a17f70b..213736c4e9 100644 --- a/extensions/akismet/src/Listener/SubmitSpam.php +++ b/extensions/akismet/src/Listener/SubmitSpam.php @@ -10,7 +10,7 @@ namespace Flarum\Akismet\Listener; use Flarum\Akismet\Akismet; -use Flarum\Post\Event\Hidden; +use Flarum\Approval\Event\PostWasUnapproved; class SubmitSpam { @@ -24,7 +24,7 @@ public function __construct(Akismet $akismet) $this->akismet = $akismet; } - public function handle(Hidden $event) + public function handle(PostWasUnapproved $event) { if (! $this->akismet->isConfigured()) { return; diff --git a/extensions/approval/extend.php b/extensions/approval/extend.php index c18e612a82..e72892573e 100644 --- a/extensions/approval/extend.php +++ b/extensions/approval/extend.php @@ -11,6 +11,7 @@ use Flarum\Api\Serializer\PostSerializer; use Flarum\Approval\Access; use Flarum\Approval\Event\PostWasApproved; +use Flarum\Approval\Event\PostWasUnapproved; use Flarum\Approval\Listener; use Flarum\Discussion\Discussion; use Flarum\Extend; @@ -52,6 +53,7 @@ (new Extend\Event()) ->listen(PostWasApproved::class, Listener\UpdateDiscussionAfterPostApproval::class) + ->listen(PostWasUnapproved::class, Listener\UpdateDiscussionAfterPostUnapproval::class) ->subscribe(Listener\ApproveContent::class) ->subscribe(Listener\UnapproveNewContent::class), diff --git a/extensions/approval/src/Event/PostWasUnapproved.php b/extensions/approval/src/Event/PostWasUnapproved.php new file mode 100644 index 0000000000..2f69867640 --- /dev/null +++ b/extensions/approval/src/Event/PostWasUnapproved.php @@ -0,0 +1,38 @@ +post = $post; + $this->actor = $actor; + } +} diff --git a/extensions/approval/src/Listener/ApproveContent.php b/extensions/approval/src/Listener/ApproveContent.php index 72e3760c8d..d72fe0609e 100755 --- a/extensions/approval/src/Listener/ApproveContent.php +++ b/extensions/approval/src/Listener/ApproveContent.php @@ -10,6 +10,7 @@ namespace Flarum\Approval\Listener; use Flarum\Approval\Event\PostWasApproved; +use Flarum\Approval\Event\PostWasUnapproved; use Flarum\Post\Event\Saving; use Illuminate\Contracts\Events\Dispatcher; @@ -37,10 +38,13 @@ public function approvePost(Saving $event) } if (! empty($isApproved)) { + // Set the post's approval status to true to clear any pending approval status, even if the post is hidden. $post->is_approved = true; if(! $post->hidden_at) { $post->raise(new PostWasApproved($post, $event->actor)); + } else { + $post->raise(new PostWasUnapproved($post, $event->actor)); } } } diff --git a/extensions/approval/src/Listener/UpdateDiscussionAfterPostApproval.php b/extensions/approval/src/Listener/UpdateDiscussionAfterPostApproval.php index 0db738ae5f..8ba7244274 100644 --- a/extensions/approval/src/Listener/UpdateDiscussionAfterPostApproval.php +++ b/extensions/approval/src/Listener/UpdateDiscussionAfterPostApproval.php @@ -10,36 +10,22 @@ namespace Flarum\Approval\Listener; use Flarum\Approval\Event\PostWasApproved; +use Flarum\Approval\RefreshesDiscussionTrait; class UpdateDiscussionAfterPostApproval { + use RefreshesDiscussionTrait; + public function handle(PostWasApproved $event) { - $post = $event->post; - $discussion = $post->discussion; - $user = $discussion->user; - - $discussion->refreshCommentCount(); - $discussion->refreshLastPost(); - - if ($post->number === 1) { - $discussion->is_approved = true; - - $discussion->afterSave(function () use ($user) { - $user->refreshDiscussionCount(); - }); - } - - $discussion->save(); - - if ($discussion->user) { - $user->refreshCommentCount(); - $user->save(); - } - - if ($post->user) { - $post->user->refreshCommentCount(); - $post->user->save(); - } + $this->refreshAndSaveDiscussion($event->post, function ($post, $discussion, $user) { + if ($post->number === 1) { + $discussion->is_approved = true; + + $discussion->afterSave(function () use ($user) { + $user->refreshDiscussionCount(); + }); + } + }); } } diff --git a/extensions/approval/src/Listener/UpdateDiscussionAfterPostUnapproval.php b/extensions/approval/src/Listener/UpdateDiscussionAfterPostUnapproval.php new file mode 100644 index 0000000000..dea16f1bdc --- /dev/null +++ b/extensions/approval/src/Listener/UpdateDiscussionAfterPostUnapproval.php @@ -0,0 +1,32 @@ +refreshAndSaveDiscussion($event->post,function ($post, $discussion, $user) { + if ($post->number === 1) { + $discussion->is_approved = true; + $discussion->hide(); + + $discussion->afterSave(function () use ($user) { + $user->refreshDiscussionCount(); + }); + } + }); + } +} diff --git a/extensions/approval/src/RefreshesDiscussionTrait.php b/extensions/approval/src/RefreshesDiscussionTrait.php new file mode 100644 index 0000000000..877d81671a --- /dev/null +++ b/extensions/approval/src/RefreshesDiscussionTrait.php @@ -0,0 +1,41 @@ +discussion; + $user = $discussion->user; + + $discussion->refreshCommentCount(); + $discussion->refreshLastPost(); + + if ($beforeDiscussionSaveCallback) { + $beforeDiscussionSaveCallback($post, $discussion, $user); + } + + $discussion->save(); + + if ($discussion->user) { + $user->refreshCommentCount(); + $user->save(); + } + + if ($post->user) { + $post->user->refreshCommentCount(); + $post->user->save(); + } + } +}