--- /dev/null
+<?php
+
+namespace BookStack\Activity\Notifications\Handlers;
+
+use BookStack\Activity\Models\Loggable;
+
+class CommentCreationNotificationHandler implements NotificationHandler
+{
+ public function handle(string $activityType, Loggable|string $detail): void
+ {
+ // TODO
+ }
+}
--- /dev/null
+<?php
+
+namespace BookStack\Activity\Notifications\Handlers;
+
+use BookStack\Activity\Models\Loggable;
+
+interface NotificationHandler
+{
+ /**
+ * Run this handler.
+ */
+ public function handle(string $activityType, string|Loggable $detail): void;
+}
--- /dev/null
+<?php
+
+namespace BookStack\Activity\Notifications\Handlers;
+
+use BookStack\Activity\Models\Loggable;
+
+class PageCreationNotificationHandler implements NotificationHandler
+{
+ public function handle(string $activityType, Loggable|string $detail): void
+ {
+ // TODO
+ }
+}
--- /dev/null
+<?php
+
+namespace BookStack\Activity\Notifications\Handlers;
+
+use BookStack\Activity\Models\Loggable;
+
+class PageUpdateNotificationHandler implements NotificationHandler
+{
+ public function handle(string $activityType, Loggable|string $detail): void
+ {
+ // TODO
+ }
+}
use BookStack\Activity\Models\Activity;
use BookStack\Activity\Models\Loggable;
use BookStack\Activity\Models\Webhook;
-use BookStack\App\Model;
+use BookStack\Activity\Notifications\NotificationManager;
use BookStack\Entities\Models\Entity;
use BookStack\Facades\Theme;
use BookStack\Theming\ThemeEvents;
class ActivityLogger
{
+ public function __construct(
+ protected NotificationManager $notifications
+ ) {
+ $this->notifications->loadDefaultHandlers();
+ }
+
/**
* Add a generic activity event to the database.
*/
- public function add(string $type, $detail = '')
+ public function add(string $type, string|Loggable $detail = ''): void
{
$detailToStore = ($detail instanceof Loggable) ? $detail->logDescriptor() : $detail;
$this->setNotification($type);
$this->dispatchWebhooks($type, $detail);
+ $this->notifications->handle($type, $detail);
Theme::dispatch(ThemeEvents::ACTIVITY_LOGGED, $type, $detail);
}