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\{ BeforeCrudActionEvent, AfterEntityUpdatedEvent };
  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. }