X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/90797001701017bb7ecce11ae39bff1411fbdc35..refs/pull/3391/head:/app/Actions/ActivityLogger.php diff --git a/app/Actions/ActivityLogger.php b/app/Actions/ActivityLogger.php index 3a329387f..0d1391b43 100644 --- a/app/Actions/ActivityLogger.php +++ b/app/Actions/ActivityLogger.php @@ -5,6 +5,7 @@ namespace BookStack\Actions; use BookStack\Auth\Permissions\PermissionService; use BookStack\Entities\Models\Entity; use BookStack\Interfaces\Loggable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Log; class ActivityLogger @@ -35,6 +36,7 @@ class ActivityLogger $activity->save(); $this->setNotification($type); + $this->dispatchWebhooks($type, $detail); } /** @@ -68,7 +70,7 @@ class ActivityLogger /** * Flashes a notification message to the session if an appropriate message is available. */ - protected function setNotification(string $type) + protected function setNotification(string $type): void { $notificationTextKey = 'activities.' . $type . '_notification'; if (trans()->has($notificationTextKey)) { @@ -77,6 +79,24 @@ class ActivityLogger } } + /** + * @param string|Loggable $detail + */ + protected function dispatchWebhooks(string $type, $detail): void + { + $webhooks = Webhook::query() + ->whereHas('trackedEvents', function (Builder $query) use ($type) { + $query->where('event', '=', $type) + ->orWhere('event', '=', 'all'); + }) + ->where('active', '=', true) + ->get(); + + foreach ($webhooks as $webhook) { + dispatch(new DispatchWebhookJob($webhook, $type, $detail)); + } + } + /** * Log out a failed login attempt, Providing the given username * as part of the message if the '%u' string is used.