src/EventListener/SupplierTriggerReportSubscriber.php line 30

  1. <?php
  2. namespace App\EventListener;
  3. use App\Event\GlobalEventTypes;
  4. use App\Event\SupplierEventMapperInterface;
  5. use App\Event\SupplierTriggerReportEvent;
  6. use Psr\EventDispatcher\EventDispatcherInterface;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. class SupplierTriggerReportSubscriber extends SupplierEventSubscriber
  9. {
  10. public function __construct(
  11. readonly protected ParameterBagInterface $parameterBag,
  12. protected EventDispatcherInterface $dispatcher
  13. ) {
  14. parent::__construct($dispatcher);
  15. }
  16. public static function getSubscribedEvents(): array
  17. {
  18. return [
  19. GlobalEventTypes::TRIGGER_REPORT => 'onTriggerReport',
  20. ];
  21. }
  22. /**
  23. * @throws \ReflectionException
  24. */
  25. public function onTriggerReport(SupplierTriggerReportEvent $event): void
  26. {
  27. $providerCode = $event->getProviderCode();
  28. /** @var SupplierEventMapperInterface $supplierEventMapper */
  29. $supplierEventMapper = $this->parameterBag->get(sprintf('app.%s.event.mapper', $providerCode));
  30. $supplierEventMap = $supplierEventMapper::$MAP;
  31. $response = [
  32. $providerCode => [],
  33. ];
  34. foreach ($supplierEventMap as $hookName => $supplierTrigger) {
  35. $eventInspector = new \ReflectionClass($supplierTrigger[2]);
  36. $response[$providerCode][] = [
  37. 'name' => $hookName,
  38. 'event' => $supplierTrigger[0],
  39. 'requires' => array_map(fn ($p): string => $p->name, $eventInspector->getConstructor()->getParameters()),
  40. 'description' => $supplierTrigger[3],
  41. ];
  42. }
  43. $this->sendInterruptResponse($response);
  44. }
  45. }