vendor/nucleos/user-bundle/src/EventListener/FlashListener.php line 56

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the NucleosUserBundle package.
  5.  *
  6.  * (c) Christian Gripp <mail@core23.de>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Nucleos\UserBundle\EventListener;
  12. use InvalidArgumentException;
  13. use Nucleos\UserBundle\NucleosUserEvents;
  14. use RuntimeException;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  18. use Symfony\Component\HttpFoundation\Session\Session;
  19. use Symfony\Contracts\EventDispatcher\Event;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. final class FlashListener implements EventSubscriberInterface
  22. {
  23.     /**
  24.      * @var string[]
  25.      */
  26.     private static array $successMessages = [
  27.         NucleosUserEvents::CHANGE_PASSWORD_COMPLETED => 'change_password.flash.success',
  28.         NucleosUserEvents::RESETTING_RESET_COMPLETED => 'resetting.flash.success',
  29.         NucleosUserEvents::ACCOUNT_DELETION_SUCCESS  => 'deletion.success',
  30.     ];
  31.     private RequestStack $requestStack;
  32.     private TranslatorInterface $translator;
  33.     public function __construct(RequestStack $requestStackTranslatorInterface $translator)
  34.     {
  35.         $this->requestStack   $requestStack;
  36.         $this->translator     $translator;
  37.     }
  38.     public static function getSubscribedEvents(): array
  39.     {
  40.         return [
  41.             NucleosUserEvents::CHANGE_PASSWORD_COMPLETED => 'addSuccessFlash',
  42.             NucleosUserEvents::RESETTING_RESET_COMPLETED => 'addSuccessFlash',
  43.             NucleosUserEvents::ACCOUNT_DELETION_SUCCESS  => 'addSuccessFlash',
  44.         ];
  45.     }
  46.     public function addSuccessFlash(Event $eventstring $eventName): void
  47.     {
  48.         if (!isset(self::$successMessages[$eventName])) {
  49.             throw new InvalidArgumentException('This event does not correspond to a known flash message');
  50.         }
  51.         $this->getFlashBag()->add('success'$this->trans(self::$successMessages[$eventName]));
  52.     }
  53.     private function trans(string $message, array $params = []): string
  54.     {
  55.         return $this->translator->trans($message$params'NucleosUserBundle');
  56.     }
  57.     private function getFlashBag(): FlashBagInterface
  58.     {
  59.         $session $this->requestStack->getSession();
  60.         if (!$session instanceof Session) {
  61.             throw new RuntimeException('Could not retrieve flashbag from session.');
  62.         }
  63.         return $session->getFlashBag();
  64.     }
  65. }