incorporate subdefWebhook into phraseanet

This commit is contained in:
aynsix
2019-09-26 15:04:08 +04:00
parent 62430e7c5d
commit 194b0b0f5c
4 changed files with 103 additions and 2 deletions

View File

@@ -88,6 +88,7 @@ use Alchemy\Phrasea\Media\PermalinkMediaResolver;
use Alchemy\Phrasea\Media\TechnicalDataServiceProvider;
use Alchemy\Phrasea\Model\Entities\User;
use Alchemy\QueueProvider\QueueServiceProvider;
use Alchemy\Phrasea\Core\Event\Subscriber\WebhookSubdefEventSubscriber;
use Alchemy\WorkerProvider\WorkerServiceProvider;
use Doctrine\DBAL\Event\ConnectionEventArgs;
use MediaVorus\Media\MediaInterface;
@@ -742,6 +743,7 @@ class Application extends SilexApplication
$dispatcher->addSubscriber(new LazaretSubscriber($app));
$dispatcher->addSubscriber(new ValidationSubscriber($app));
$dispatcher->addSubscriber(new WebhookUserEventSubscriber($app));
$dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app['manipulator.webhook-event']));
return $dispatcher;
})

View File

@@ -0,0 +1,78 @@
<?php
namespace Alchemy\Phrasea\Core\Event\Subscriber;
use Alchemy\Phrasea\Core\Event\Record\RecordEvents;
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreatedEvent;
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationFailedEvent;
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionsCreatedEvent;
use Alchemy\Phrasea\Model\Entities\WebhookEvent;
use Alchemy\Phrasea\Model\Manipulator\WebhookEventManipulator;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class WebhookSubdefEventSubscriber implements EventSubscriberInterface
{
/**
* @var WebhookEventManipulator
*/
private $webhookManipulator;
public function __construct(WebhookEventManipulator $manipulator)
{
$this->webhookManipulator = $manipulator;
}
public function onSubdefCreated(SubDefinitionCreatedEvent $event)
{
$eventData = [
'databox_id' => $event->getRecord()->getDataboxId(),
'record_id' => $event->getRecord()->getRecordId(),
'subdef' => $event->getSubDefinitionName()
];
$this->webhookManipulator->create(
WebhookEvent::RECORD_SUBDEF_CREATED,
WebhookEvent::RECORD_SUBDEF_TYPE,
$eventData
);
}
public function onSubdefCreationFailed(SubDefinitionCreationFailedEvent $event)
{
$eventData = [
'databox_id' => $event->getRecord()->getDataboxId(),
'record_id' => $event->getRecord()->getRecordId(),
'subdef' => $event->getSubDefinitionName()
];
$this->webhookManipulator->create(
WebhookEvent::RECORD_SUBDEF_FAILED,
WebhookEvent::RECORD_SUBDEF_TYPE,
$eventData
);
}
public function onSubdefsCreated(SubDefinitionsCreatedEvent $event)
{
$eventData = [
'databox_id' => $event->getRecord()->getDataboxId(),
'record_id' => $event->getRecord()->getRecordId(),
'subdef_count' => count($event->getMedia())
];
$this->webhookManipulator->create(
WebhookEvent::RECORD_SUBDEFS_CREATED,
WebhookEvent::RECORD_SUBDEF_TYPE,
$eventData
);
}
public static function getSubscribedEvents()
{
return [
RecordEvents::SUB_DEFINITION_CREATED => 'onSubdefCreated',
RecordEvents::SUB_DEFINITIONS_CREATED => 'onSubdefsCreated',
RecordEvents::SUB_DEFINITION_CREATION_FAILED => 'onSubdefCreationFailed'
];
}
}

View File

@@ -12,6 +12,7 @@ use Alchemy\Phrasea\Webhook\Processor\ProcessorFactory;
use Alchemy\Phrasea\Webhook\Processor\ProcessorInterface;
use Alchemy\Phrasea\Webhook\Processor\UserDeletedProcessorFactory;
use Alchemy\Phrasea\Webhook\Processor\UserRegistrationProcessorFactory;
use Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor;
class EventProcessorFactory
{
@@ -29,7 +30,10 @@ class EventProcessorFactory
$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_DELETED_TYPE, new UserDeletedProcessorFactory($app));
$this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory());
$this->registerCallableFactory(WebhookEvent::RECORD_SUBDEF_TYPE, function () {
return new SubdefEventProcessor();
});
}
/**
@@ -43,7 +47,7 @@ class EventProcessorFactory
/**
* @param string $eventType
* @param callback|callable $callable
* @param callback|callable|\Closure $callable
*/
public function registerCallableFactory($eventType, $callable)
{

View File

@@ -0,0 +1,17 @@
<?php
namespace Alchemy\Phrasea\Webhook\Processor;
use Alchemy\Phrasea\Model\Entities\WebhookEvent;
class SubdefEventProcessor implements ProcessorInterface
{
public function process(WebhookEvent $event)
{
return [
'event' => $event->getName(),
'data' => $event->getData()
];
}
}