vendor/boldr/shop-bundle/src/EventSubscriber/OrderAdminEventSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace Boldr\Shop\ShopBundle\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use EasyCorp\Bundle\EasyAdminBundle\Event\{ BeforeCrudActionEventAfterEntityUpdatedEvent };
  5. use Boldr\Shop\ShopBundle\Entity\Order;
  6. use Boldr\Shop\ShopBundle\Event\OrderStateUpdatedEvent;
  7. use Psr\EventDispatcher\EventDispatcherInterface;
  8. class OrderAdminEventSubscriber implements EventSubscriberInterface
  9. {
  10.     private array $orderStates = [];
  11.     private EventDispatcherInterface $eventDispatcher;
  12.     public function __construct(EventDispatcherInterface $eventDispatcher)
  13.     {
  14.         $this->eventDispatcher $eventDispatcher;
  15.     }
  16.     public static function getSubscribedEvents()
  17.     {
  18.         return [
  19.             AfterEntityUpdatedEvent::class => [
  20.                 ['onAfterEntityUpdatedEvent'10]
  21.             ],
  22.             BeforeCrudActionEvent::class => [
  23.                 ['onBeforeCrudActionEvent'10]
  24.             ]
  25.         ];
  26.     }
  27.     public function onAfterEntityUpdatedEvent(AfterEntityUpdatedEvent $event)
  28.     {
  29.         $entity $event->getEntityInstance();
  30.         if ($entity instanceof Order)
  31.         {
  32.             if (isset($this->orderStates[$entity->getId()]))
  33.             {
  34.                 $oldOrderState $this->orderStates[$entity->getId()];
  35.                 $newOrderState $entity->getState();
  36.                 if ($oldOrderState !== $newOrderState)
  37.                 {
  38.                     $orderStateChangeEvent = new OrderStateUpdatedEvent($entity$oldOrderState$newOrderState);
  39.                     $this->eventDispatcher->dispatch($orderStateChangeEvent);
  40.                 }
  41.             }
  42.         }
  43.     }
  44.     public function onBeforeCrudActionEvent(BeforeCrudActionEvent $event)
  45.     {
  46.         if ($event->getAdminContext())
  47.         {
  48.             $entity $event->getAdminContext()->getEntity()->getInstance();
  49.             if ($entity instanceof Order)
  50.             {
  51.                 $this->orderStates[$entity->getId()] = $entity->getState();
  52.             }
  53.         }
  54.     }
  55. }