mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-07 18:14:35 +00:00
96 lines
3.2 KiB
PHP
96 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Alchemy\Phrasea\Webhook;
|
|
|
|
use Alchemy\Phrasea\Exception\InvalidArgumentException;
|
|
use Alchemy\Phrasea\Model\Entities\WebhookEvent;
|
|
use Alchemy\Phrasea\Application;
|
|
use Alchemy\Phrasea\Webhook\Processor\CallableProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\FeedEntryProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\OrderNotificationProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\ProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\ProcessorInterface;
|
|
use Alchemy\Phrasea\Webhook\Processor\RecordEventProcessor;
|
|
use Alchemy\Phrasea\Webhook\Processor\UserDeletedProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\UserProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\UserRegistrationProcessorFactory;
|
|
use Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor;
|
|
|
|
class EventProcessorFactory
|
|
{
|
|
|
|
/**
|
|
* @var ProcessorFactory[]
|
|
*/
|
|
private $processorFactories = [];
|
|
|
|
/**
|
|
* @param Application $app
|
|
*/
|
|
public function __construct(Application $app)
|
|
{
|
|
$this->registerFactory(WebhookEvent::FEED_ENTRY_TYPE, new FeedEntryProcessorFactory($app));
|
|
$this->registerFactory(WebhookEvent::USER_REGISTRATION_TYPE, new UserRegistrationProcessorFactory($app));
|
|
$this->registerFactory(WebhookEvent::ORDER_TYPE, new OrderNotificationProcessorFactory($app));
|
|
|
|
$this->registerFactory(WebhookEvent::USER_TYPE, new UserProcessorFactory());
|
|
$this->registerCallableFactory(WebhookEvent::RECORD_SUBDEF_TYPE, function () use ($app) {
|
|
return (new SubdefEventProcessor())
|
|
->setApplicationBox($app['phraseanet.appbox']);
|
|
});
|
|
$this->registerCallableFactory(WebhookEvent::RECORD_TYPE, function () {
|
|
return new RecordEventProcessor();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @param string $eventType
|
|
* @param ProcessorFactory $processorFactory
|
|
*/
|
|
public function registerFactory($eventType, ProcessorFactory $processorFactory)
|
|
{
|
|
$this->processorFactories[$eventType] = $processorFactory;
|
|
}
|
|
|
|
/**
|
|
* @param string $eventType
|
|
* @param callback|callable|\Closure $callable
|
|
*/
|
|
public function registerCallableFactory($eventType, $callable)
|
|
{
|
|
if (! is_callable($callable)) {
|
|
throw new InvalidArgumentException(sprintf(
|
|
'Expected a callable, got "%s" instead',
|
|
is_object($callable) ? get_class($callable) : gettype($callable)
|
|
));
|
|
}
|
|
|
|
$this->processorFactories[$eventType] = new CallableProcessorFactory($callable);
|
|
}
|
|
|
|
/**
|
|
* @param WebhookEvent $event
|
|
* @return Processor\ProcessorInterface
|
|
* @deprecated Use getProcessor() instead
|
|
*/
|
|
public function get(WebhookEvent $event)
|
|
{
|
|
return $this->getProcessor($event);
|
|
}
|
|
|
|
/**
|
|
* @param WebhookEvent $event
|
|
* @return ProcessorInterface
|
|
*/
|
|
public function getProcessor(WebhookEvent $event)
|
|
{
|
|
if (!isset($this->processorFactories[$event->getType()])) {
|
|
throw new \RuntimeException(sprintf('No processor found for %s', $event->getType()));
|
|
}
|
|
|
|
$factory = $this->processorFactories[$event->getType()];
|
|
|
|
return $factory->createProcessor();
|
|
}
|
|
}
|