Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Sync\Notification\Handler; | |
| use Mautic\IntegrationsBundle\Sync\Exception\HandlerNotSupportedException; | |
| class HandlerContainer | |
| { | |
| private array $handlers = []; | |
| public function registerHandler(HandlerInterface $handler): void | |
| { | |
| if (!isset($this->handlers[$handler->getIntegration()])) { | |
| $this->handlers[$handler->getIntegration()] = []; | |
| } | |
| $this->handlers[$handler->getIntegration()][$handler->getSupportedObject()] = $handler; | |
| } | |
| /** | |
| * @return HandlerInterface | |
| * | |
| * @throws HandlerNotSupportedException | |
| */ | |
| public function getHandler(string $integration, string $object) | |
| { | |
| if (!isset($this->handlers[$integration])) { | |
| throw new HandlerNotSupportedException("$integration does not have any registered handlers"); | |
| } | |
| if (!isset($this->handlers[$integration][$object])) { | |
| throw new HandlerNotSupportedException("$integration does not have any registered handlers for the object $object"); | |
| } | |
| return $this->handlers[$integration][$object]; | |
| } | |
| /** | |
| * @return HandlerInterface[] | |
| */ | |
| public function getHandlers(): array | |
| { | |
| return array_reduce($this->handlers, fn ($accumulator, $integrationHandlers): array => array_merge($accumulator, $integrationHandlers), []); | |
| } | |
| } | |