src/EventSubscriber/EasyAdminSubscriber.php line 51

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Controller\Admin\Crud\TransportCrudController;
  4. use App\Entity\Transport;
  5. use App\Model\UseCases\MailerUseCase;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  7. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
  9. use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. /**
  12.  * Based on https://symfony.com/bundles/EasyAdminBundle/current/events.html
  13.  */
  14. class EasyAdminSubscriber implements EventSubscriberInterface
  15. {
  16.     private array $emailsBeforeEditing = [];
  17.     public function __construct(
  18.         private readonly AdminContextProvider $adminContextProvider,
  19.         private readonly MailerUseCase $mailerUseCase,
  20.     )
  21.     {
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             BeforeCrudActionEvent::class => ['rememberDriverEmail'],
  27.             AfterEntityUpdatedEvent::class => ['notifyDriver'],
  28.         ];
  29.     }
  30.     public function rememberDriverEmail(BeforeCrudActionEvent $event): void
  31.     {
  32.         $crud $event->getAdminContext()->getCrud();
  33.         if ($crud->getControllerFqcn() !== TransportCrudController::class || $crud->getCurrentPage() !== Crud::PAGE_EDIT) {
  34.             return;
  35.         }
  36.         $entity $this->adminContextProvider->getContext()->getEntity()?->getInstance();
  37.         if (!$entity instanceof Transport) {
  38.             return;
  39.         }
  40.         $this->emailsBeforeEditing[$entity->getId()] = $entity->getDriverEmail() ?? '';
  41.     }
  42.     public function notifyDriver(AfterEntityUpdatedEvent $event): void
  43.     {
  44.         $entity $event->getEntityInstance();
  45.         if (!$entity instanceof Transport) {
  46.             return;
  47.         }
  48.         $oldEmail $this->emailsBeforeEditing[$entity->getId()] ?? '';
  49.         $newEmail $entity->getDriverEmail();
  50.         if ($newEmail && $newEmail !== $oldEmail) {
  51.             $this->mailerUseCase->sendUit($entity);
  52.         }
  53.     }
  54. }