diff --git a/extensions/approval/extend.php b/extensions/approval/extend.php index 0f1417539..5140b6756 100644 --- a/extensions/approval/extend.php +++ b/extensions/approval/extend.php @@ -7,6 +7,8 @@ * LICENSE file that was distributed with this source code. */ +use Flarum\Api\Serializer\BasicDiscussionSerializer; +use Flarum\Api\Serializer\PostSerializer; use Flarum\Approval\Access; use Flarum\Approval\Listener; use Flarum\Discussion\Discussion; @@ -30,10 +32,21 @@ return [ (new Extend\Model(Post::class)) ->default('is_approved', true), + (new Extend\ApiSerializer(BasicDiscussionSerializer::class)) + ->attribute('isApproved', function ($serializer, Discussion $discussion) { + return (bool) $discussion->is_approved; + }), + + (new Extend\ApiSerializer(PostSerializer::class)) + ->attribute('isApproved', function ($serializer, Post $post) { + return (bool) $post->is_approved; + })->attribute('canApprove', function (PostSerializer $serializer, Post $post) { + return (bool) $serializer->getActor()->can('approvePosts', $post->discussion); + }), + new Extend\Locales(__DIR__.'/locale'), function (Dispatcher $events) { - $events->subscribe(Listener\AddPostApprovalAttributes::class); $events->subscribe(Listener\ApproveContent::class); $events->subscribe(Listener\UnapproveNewContent::class); diff --git a/extensions/approval/src/Listener/AddPostApprovalAttributes.php b/extensions/approval/src/Listener/AddPostApprovalAttributes.php deleted file mode 100644 index d2fe96e6a..000000000 --- a/extensions/approval/src/Listener/AddPostApprovalAttributes.php +++ /dev/null @@ -1,41 +0,0 @@ -listen(Serializing::class, [$this, 'addApiAttributes']); - } - - /** - * @param Serializing $event - */ - public function addApiAttributes(Serializing $event) - { - if ($event->isSerializer(BasicDiscussionSerializer::class) - || $event->isSerializer(PostSerializer::class)) { - $event->attributes['isApproved'] = (bool) $event->model->is_approved; - } - - if ($event->isSerializer(PostSerializer::class)) { - $event->attributes['canApprove'] = (bool) $event->actor->can('approvePosts', $event->model->discussion); - } - } -}