src/FMT/Domain/Listener/EasyAdminListener.php line 40

Open in your IDE?
  1. <?php
  2. namespace FMT\Domain\Listener;
  3. use Doctrine\ORM\Event\PreUpdateEventArgs;
  4. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
  5. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  6. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  7. use Exception;
  8. use FMT\Data\Entity\User;
  9. use FMT\Infrastructure\Helper\NotificationHelper;
  10. use Psr\Log\LoggerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. use Symfony\Component\Translation\TranslatableMessage;
  14. use Twig\Environment;
  15. final class EasyAdminListener implements EventSubscriberInterface
  16. {
  17.     private SessionInterface $session;
  18.     private LoggerInterface $logger;
  19.     private Environment $parser;
  20.     public function __construct(SessionInterface $sessionLoggerInterface $loggerEnvironment $parser)
  21.     {
  22.         $this->session $session;
  23.         $this->logger $logger;
  24.         $this->parser $parser;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             AfterEntityPersistedEvent::class => ['flashMessageAfterPersist'],
  30.             AfterEntityUpdatedEvent::class => ['flashMessageAfterUpdate'],
  31.             AfterEntityDeletedEvent::class => ['flashMessageAfterDelete'],
  32.         ];
  33.     }
  34.     public function flashMessageAfterPersist(AfterEntityPersistedEvent $event): void
  35.     {
  36.         $this->session->getFlashBag()->add('success', new TranslatableMessage('fmt.admin_page.flash_message.create', [
  37.             '%name%' => (string) $event->getEntityInstance(),
  38.         ]));
  39.     }
  40.     public function flashMessageAfterUpdate(AfterEntityUpdatedEvent $event): void
  41.     {
  42.         $this->session->getFlashBag()->add('success', new TranslatableMessage('fmt.admin_page.flash_message.update', [
  43.             '%name%' => (string) $event->getEntityInstance(),
  44.         ]));
  45.     }
  46.     public function flashMessageAfterDelete(AfterEntityDeletedEvent $event): void
  47.     {
  48.         $this->session->getFlashBag()->add(
  49.             'warning',
  50.             new TranslatableMessage('fmt.admin_page.user.actions.restrict_delete')
  51.         );
  52.     }
  53.     public function notifyOnUpdatedUserActivation(User $userPreUpdateEventArgs $args)
  54.     {
  55.         if ($args->hasChangedField('enabled') && $user->isEnabled()) {
  56.             try {
  57.                 $message $this->parser->render('@Public/emails/user_unblocked.email.html.twig', [
  58.                     'user' => $user
  59.                 ]);
  60.                 $recipient $user->getProfile()->getEmail();
  61.                 NotificationHelper::submitFromTemplate($message$recipient);
  62.             } catch (Exception $exception) {
  63.                 $this->logger->error($exception->getMessage());
  64.             }
  65.         }
  66.     }
  67. }