src/EventSubscriber/EasyAdminSubscriber.php line 49
<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Services\Mails\Mails;
use Psr\Log\LoggerInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
private ?bool $isActive = null;
private EntityManagerInterface $em;
private LoggerInterface $logger;
public function __construct(EntityManagerInterface $em, Mails $mails, LoggerInterface $logger)
{
$this->em = $em;
$this->mails = $mails;
$this->logger = $logger;
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityUpdatedEvent::class => 'onBeforeEntityUpdated',
AfterEntityUpdatedEvent::class => 'onAfterEntityUpdated',
];
}
public function onBeforeEntityUpdated(BeforeEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof User) {
$uow = $this->em->getUnitOfWork();
$originalData = $uow->getOriginalEntityData($entity);
if (array_key_exists('isActive', $originalData)) {
$this->isActive = $originalData['isActive'];
}
}
}
public function onAfterEntityUpdated(AfterEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof User) {
$newIsActive = $entity->isIsActive();
if($newIsActive != $this->isActive)
{
if($newIsActive == true)
{
$this->sendActivationEmail($entity);
}
else{
$this->sendDesactivationEmail($entity);
}
}
}
}
private function sendActivationEmail(User $agent): void
{
try {
$this->logger->info('Sending activation email to ' . $agent->getEmail());
$email = $this->mails->createEmail('mails/agent/activate_agent.html.twig', [
'agent' => [
'firstName' => $agent->getFirstname(),
'lastName' => $agent->getLastname()
]
])->to($agent->getEmail())
->subject('Votre compte agent est activé');
$this->mails->send($email);
$this->logger->info('Activation email sent to ' . $agent->getEmail());
} catch (\Exception $e) {
$this->logger->error('Failed to send activation email: ' . $e->getMessage());
}
}
private function sendDesactivationEmail(User $agent): void
{
try {
$email = $this->mails->createEmail('mails/agent/desactivate_agent.html.twig', [
'agent' => [
'firstName' => $agent->getFirstname(),
'lastName' => $agent->getLastname()
]
])->to($agent->getEmail())
->subject('Votre compte agent a été désactivé');
$this->mails->send($email);
$this->logger->info('Deactivation email sent to ' . $agent->getEmail());
} catch (\Exception $e) {
$this->logger->error('Failed to send deactivation email: ' . $e->getMessage());
}
}
}