Skip to content

Commit

Permalink
fix(1.x,approval): correct PostWasApproved event trigger condition (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaucau authored Nov 17, 2023
1 parent f07336e commit 1c421fc
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions extensions/approval/src/Listener/ApproveContent.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

use Flarum\Approval\Event\PostWasApproved;
use Flarum\Post\Event\Saving;
use Flarum\User\Exception\PermissionDeniedException;
use Illuminate\Contracts\Events\Dispatcher;

class ApproveContent
Expand All @@ -23,23 +24,42 @@ public function subscribe(Dispatcher $events)
$events->listen(Saving::class, [$this, 'approvePost']);
}

/**
* @throws PermissionDeniedException
*/
public function approvePost(Saving $event)
{
$attributes = $event->data['attributes'];
$post = $event->post;

// Nothing to do if it is already approved.
if ($post->is_approved) {
return;
}

/*
* We approve a post in one of two cases:
* - The post was unapproved and the allowed action is approving it. We trigger an event.
* - The post was unapproved and the allowed actor is hiding or un-hiding it.
* We approve it silently if the action is unhiding.
*/
$approvingSilently = false;

if (isset($attributes['isApproved'])) {
$event->actor->assertCan('approve', $post);

$isApproved = (bool) $attributes['isApproved'];
} elseif (! empty($attributes['isHidden']) && $event->actor->can('approve', $post)) {
} elseif (isset($attributes['isHidden']) && $event->actor->can('approve', $post)) {
$isApproved = true;
$approvingSilently = $attributes['isHidden'];
}

if (! empty($isApproved)) {
$post->is_approved = true;

$post->raise(new PostWasApproved($post, $event->actor));
if (! $approvingSilently) {
$post->raise(new PostWasApproved($post, $event->actor));
}
}
}
}

0 comments on commit 1c421fc

Please sign in to comment.