vendor/dachcom-digital/dynamic-search/src/DynamicSearchBundle/EventSubscriber/DataProcessingEventSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace DynamicSearchBundle\EventSubscriber;
  3. use DynamicSearchBundle\Builder\ContextDefinitionBuilderInterface;
  4. use DynamicSearchBundle\DynamicSearchEvents;
  5. use DynamicSearchBundle\Event\NewDataEvent;
  6. use DynamicSearchBundle\Logger\LoggerInterface;
  7. use DynamicSearchBundle\Processor\ResourceModificationProcessorInterface;
  8. use DynamicSearchBundle\Provider\DataProviderInterface;
  9. use DynamicSearchBundle\Validator\ResourceValidatorInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. class DataProcessingEventSubscriber implements EventSubscriberInterface
  12. {
  13.     protected LoggerInterface $logger;
  14.     protected ContextDefinitionBuilderInterface $contextDefinitionBuilder;
  15.     protected ResourceModificationProcessorInterface $resourceModificationProcessor;
  16.     protected ResourceValidatorInterface $resourceValidator;
  17.     public function __construct(
  18.         LoggerInterface $logger,
  19.         ContextDefinitionBuilderInterface $contextDefinitionBuilder,
  20.         ResourceModificationProcessorInterface $resourceModificationProcessor,
  21.         ResourceValidatorInterface $resourceValidator
  22.     ) {
  23.         $this->logger $logger;
  24.         $this->contextDefinitionBuilder $contextDefinitionBuilder;
  25.         $this->resourceModificationProcessor $resourceModificationProcessor;
  26.         $this->resourceValidator $resourceValidator;
  27.     }
  28.     public static function getSubscribedEvents(): array
  29.     {
  30.         return [
  31.             DynamicSearchEvents::NEW_DATA_AVAILABLE => ['dispatchResourceModification'],
  32.         ];
  33.     }
  34.     public function dispatchResourceModification(NewDataEvent $event): void
  35.     {
  36.         $contextDefinition $this->contextDefinitionBuilder->buildContextDefinition($event->getContextName(), $event->getContextDispatchType());
  37.         try {
  38.             // validate and allow rewriting resource based on current data behaviour
  39.             $isImmutableResource $event->getProviderBehaviour() === DataProviderInterface::PROVIDER_BEHAVIOUR_SINGLE_DISPATCH;
  40.             $resourceCandidate $this->resourceValidator->validateResource($event->getContextName(), $event->getContextDispatchType(), false$isImmutableResource$event->getData());
  41.         } catch (\Throwable $e) {
  42.             $this->logger->error(
  43.                 sprintf(
  44.                     'Error while validate resource candidate: %s',
  45.                     $e->getMessage()), $contextDefinition->getDataProviderName(), $event->getContextName()
  46.             );
  47.             return;
  48.         }
  49.         if ($resourceCandidate->getResource() === null) {
  50.             $this->logger->debug(
  51.                 sprintf(
  52.                     'Resource has been removed due to validation. Skipping...'),
  53.                 $contextDefinition->getDataProviderName(), $contextDefinition->getName()
  54.             );
  55.             return;
  56.         }
  57.         if ($event->getProviderBehaviour() === DataProviderInterface::PROVIDER_BEHAVIOUR_FULL_DISPATCH) {
  58.             $this->resourceModificationProcessor->process($contextDefinition$resourceCandidate->getResource());
  59.         } elseif ($event->getProviderBehaviour() === DataProviderInterface::PROVIDER_BEHAVIOUR_SINGLE_DISPATCH) {
  60.             $this->resourceModificationProcessor->processByResourceMeta($contextDefinition$event->getResourceMeta(), $event->getData());
  61.         } else {
  62.             $this->logger->error(
  63.                 sprintf('Invalid provider behaviour "%s". Cannot dispatch resource processor'$event->getProviderBehaviour()),
  64.                 $contextDefinition->getDataProviderName(), $event->getContextName()
  65.             );
  66.         }
  67.     }
  68. }