src/EventSubscriber/EasyAdminSubscriber.php line 35

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  6. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use App\Services\Mails\Mails;
  9. use Psr\Log\LoggerInterface;
  10. class EasyAdminSubscriber implements EventSubscriberInterface
  11. {
  12.     private ?bool $isActive null;
  13.     private EntityManagerInterface $em;
  14.     private LoggerInterface $logger;
  15.     public function __construct(EntityManagerInterface $emMails $mailsLoggerInterface $logger)
  16.     {
  17.         $this->em $em;
  18.         $this->mails $mails;
  19.         $this->logger $logger;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             BeforeEntityUpdatedEvent::class => 'onBeforeEntityUpdated',
  25.             AfterEntityUpdatedEvent::class => 'onAfterEntityUpdated',
  26.         ];
  27.     }
  28.     public function onBeforeEntityUpdated(BeforeEntityUpdatedEvent $event)
  29.     {
  30.         $entity $event->getEntityInstance();
  31.         if ($entity instanceof User) {
  32.             $uow $this->em->getUnitOfWork();
  33.             $originalData $uow->getOriginalEntityData($entity);
  34.             if (array_key_exists('isActive'$originalData)) {
  35.                 $this->isActive $originalData['isActive'];
  36.             }
  37.         }
  38.     }
  39.     public function onAfterEntityUpdated(AfterEntityUpdatedEvent $event)
  40.     {
  41.         $entity $event->getEntityInstance();
  42.         if ($entity instanceof User) {
  43.             $newIsActive $entity->isIsActive();
  44.             if($newIsActive != $this->isActive)
  45.             {
  46.                 if($newIsActive == true)
  47.                 {
  48.                     $this->sendActivationEmail($entity);
  49.                 }
  50.                 else{
  51.                     $this->sendDesactivationEmail($entity);
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     private function sendActivationEmail(User $agent): void
  57.     {
  58.         try {
  59.             $this->logger->info('Sending activation email to ' $agent->getEmail());
  60.             $email $this->mails->createEmail('mails/agent/activate_agent.html.twig', [
  61.                 'agent' => [
  62.                     'firstName' => $agent->getFirstname(),
  63.                     'lastName' => $agent->getLastname()
  64.                 ]
  65.             ])->to($agent->getEmail())
  66.               ->subject('Votre compte agent est activé');
  67.             $this->mails->send($email);
  68.             $this->logger->info('Activation email sent to ' $agent->getEmail());
  69.         } catch (\Exception $e) {
  70.             $this->logger->error('Failed to send activation email: ' $e->getMessage());
  71.         }
  72.     }
  73.     private function sendDesactivationEmail(User $agent): void
  74.     {
  75.         try {
  76.             $email $this->mails->createEmail('mails/agent/desactivate_agent.html.twig', [
  77.                 'agent' => [
  78.                     'firstName' => $agent->getFirstname(),
  79.                     'lastName' => $agent->getLastname()
  80.                 ]
  81.             ])->to($agent->getEmail())
  82.               ->subject('Votre compte agent a été désactivé');
  83.             $this->mails->send($email);
  84.             $this->logger->info('Deactivation email sent to ' $agent->getEmail());
  85.         } catch (\Exception $e) {
  86.             $this->logger->error('Failed to send deactivation email: ' $e->getMessage());
  87.         }
  88.     }
  89. }