src/EventSubscriber/LocaleSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Candidat;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  11. use Symfony\Component\Security\Http\SecurityEvents;
  12. class LocaleSubscriber implements EventSubscriberInterface
  13. {
  14.     // Langue par défaut
  15.     private $defaultLocale;
  16.     private $manager;
  17.     private $params;
  18.     /** @var SessionInterface */
  19.     private $session;
  20. //    public function __construct($defaultLocale = 'fr', ParameterBagInterface $params)
  21.     public function __construct(string $defaultLocaleSessionInterface $sessionParameterBagInterface $paramsEntityManagerInterface $manager)
  22.     {
  23.         $this->manager $manager;
  24.         $this->session $session;
  25.         $this->params $params;
  26.         $this->defaultLocale $params->get('locale');
  27.     }
  28.     public function onKernelRequest(RequestEvent $event)
  29.     {
  30.         $request $event->getRequest();
  31.         if (!$request->hasPreviousSession()) {
  32.             return;
  33.         }
  34.         // On vérifie si la langue est passée en paramètre de l'URL
  35.         if ($locale $request->query->get('_locale')) {
  36.             $request->setLocale($locale);
  37.         } else {
  38.             // Sinon on utilise celle de la session
  39.             $request->setLocale($request->getSession()->get('_locale'$this->defaultLocale));
  40.         }
  41.     }
  42.     /** {@inheritdoc} */
  43.     public function onInteractiveLogin(InteractiveLoginEvent $event)
  44.     {
  45.         $request $event->getRequest();
  46.         $user    $event->getAuthenticationToken()->getUser();
  47.         $roles $user->getRoles();
  48.         if (in_array('ROLE_ADMIN'$rolestrue) || in_array('ROLE_CONSULTANT'$rolestrue) || in_array('ROLE_MANAGER'$rolestrue)) {
  49.             return;
  50.         }
  51.         $candidat $this->manager->getRepository(Candidat::class)->find($user->getId());
  52.         $langueJeu $candidat->getProject()->getJeu()->getLangue();
  53.         if (null !== $langueJeu) {
  54.             $this->session->set('_locale'$langueJeu);
  55.             $request->setLocale($langueJeu);
  56. //        } else {
  57. //            /** @var Language $language */
  58. //            $language = $this->entityManager->getRepository(Language::class)->findOneBy(['defaultLang' => true]);
  59. //            $language = $language->getSlug();
  60. //
  61. //            $this->session->set('_locale', $language);
  62. //            $request->setLocale($language);
  63.         }
  64.     }
  65.     public static function getSubscribedEvents()
  66.     {
  67. //        return [
  68. //            'LocaleSubscriber' => 'onLocaleSubscriber',
  69. //        ];
  70.         return [
  71.             // must be registered before (i.e. with a higher priority than) the default Locale listener
  72.             SecurityEvents::INTERACTIVE_LOGIN => array(array('onInteractiveLogin'15)),
  73.             // On doit définir une priorité élevée
  74.             KernelEvents::REQUEST => [['onKernelRequest'20]],
  75.         ];
  76.     }
  77. }