50 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			50 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;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NotificationManager
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @var class-string<NotificationHandler>[]
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    protected array $handlers = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function handle(string $activityType, string|Loggable $detail): void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $handlersToRun = $this->handlers[$activityType] ?? [];
							 | 
						||
| 
								 | 
							
								        foreach ($handlersToRun as $handlerClass) {
							 | 
						||
| 
								 | 
							
								            /** @var NotificationHandler $handler */
							 | 
						||
| 
								 | 
							
								            $handler = app()->make($handlerClass);
							 | 
						||
| 
								 | 
							
								            $handler->handle($activityType, $detail);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @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);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |