<?php
namespace FMT\Domain\Listener;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Exception;
use FMT\Data\Entity\User;
use FMT\Infrastructure\Helper\NotificationHelper;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Translation\TranslatableMessage;
use Twig\Environment;
final class EasyAdminListener implements EventSubscriberInterface
{
private SessionInterface $session;
private LoggerInterface $logger;
private Environment $parser;
public function __construct(SessionInterface $session, LoggerInterface $logger, Environment $parser)
{
$this->session = $session;
$this->logger = $logger;
$this->parser = $parser;
}
public static function getSubscribedEvents(): array
{
return [
AfterEntityPersistedEvent::class => ['flashMessageAfterPersist'],
AfterEntityUpdatedEvent::class => ['flashMessageAfterUpdate'],
AfterEntityDeletedEvent::class => ['flashMessageAfterDelete'],
];
}
public function flashMessageAfterPersist(AfterEntityPersistedEvent $event): void
{
$this->session->getFlashBag()->add('success', new TranslatableMessage('fmt.admin_page.flash_message.create', [
'%name%' => (string) $event->getEntityInstance(),
]));
}
public function flashMessageAfterUpdate(AfterEntityUpdatedEvent $event): void
{
$this->session->getFlashBag()->add('success', new TranslatableMessage('fmt.admin_page.flash_message.update', [
'%name%' => (string) $event->getEntityInstance(),
]));
}
public function flashMessageAfterDelete(AfterEntityDeletedEvent $event): void
{
$this->session->getFlashBag()->add(
'warning',
new TranslatableMessage('fmt.admin_page.user.actions.restrict_delete')
);
}
public function notifyOnUpdatedUserActivation(User $user, PreUpdateEventArgs $args)
{
if ($args->hasChangedField('enabled') && $user->isEnabled()) {
try {
$message = $this->parser->render('@Public/emails/user_unblocked.email.html.twig', [
'user' => $user
]);
$recipient = $user->getProfile()->getEmail();
NotificationHelper::submitFromTemplate($message, $recipient);
} catch (Exception $exception) {
$this->logger->error($exception->getMessage());
}
}
}
}