mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
9779c1a357
Put together an initial notification. Started logic to query and identify watchers.
51 lines
1.7 KiB
PHP
51 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Activity\Notifications;
|
|
|
|
use BookStack\Activity\ActivityType;
|
|
use BookStack\Activity\Models\Loggable;
|
|
use BookStack\Activity\Notifications\Handlers\CommentCreationNotificationHandler;
|
|
use BookStack\Activity\Notifications\Handlers\NotificationHandler;
|
|
use BookStack\Activity\Notifications\Handlers\PageCreationNotificationHandler;
|
|
use BookStack\Activity\Notifications\Handlers\PageUpdateNotificationHandler;
|
|
use BookStack\Users\Models\User;
|
|
|
|
class NotificationManager
|
|
{
|
|
/**
|
|
* @var class-string<NotificationHandler>[]
|
|
*/
|
|
protected array $handlers = [];
|
|
|
|
public function handle(string $activityType, string|Loggable $detail, User $user): void
|
|
{
|
|
$handlersToRun = $this->handlers[$activityType] ?? [];
|
|
foreach ($handlersToRun as $handlerClass) {
|
|
/** @var NotificationHandler $handler */
|
|
$handler = app()->make($handlerClass);
|
|
$handler->handle($activityType, $detail, $user);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param class-string<NotificationHandler> $handlerClass
|
|
*/
|
|
public function registerHandler(string $activityType, string $handlerClass): void
|
|
{
|
|
if (!isset($this->handlers[$activityType])) {
|
|
$this->handlers[$activityType] = [];
|
|
}
|
|
|
|
if (!in_array($handlerClass, $this->handlers[$activityType])) {
|
|
$this->handlers[$activityType][] = $handlerClass;
|
|
}
|
|
}
|
|
|
|
public function loadDefaultHandlers(): void
|
|
{
|
|
$this->registerHandler(ActivityType::PAGE_CREATE, PageCreationNotificationHandler::class);
|
|
$this->registerHandler(ActivityType::PAGE_UPDATE, PageUpdateNotificationHandler::class);
|
|
$this->registerHandler(ActivityType::COMMENT_CREATE, CommentCreationNotificationHandler::class);
|
|
}
|
|
}
|