53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace BookStack\Activity\Notifications;
 | 
						|
 | 
						|
use BookStack\Activity\ActivityType;
 | 
						|
use BookStack\Activity\Models\Activity;
 | 
						|
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(Activity $activity, string|Loggable $detail, User $user): void
 | 
						|
    {
 | 
						|
        $activityType = $activity->type;
 | 
						|
        $handlersToRun = $this->handlers[$activityType] ?? [];
 | 
						|
        foreach ($handlersToRun as $handlerClass) {
 | 
						|
            /** @var NotificationHandler $handler */
 | 
						|
            $handler = new $handlerClass();
 | 
						|
            $handler->handle($activity, $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);
 | 
						|
    }
 | 
						|
}
 |