src/EventListener/LanguageListener.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Api\ProthelisApi;
  4. use App\Entity\User;
  5. use Doctrine\ORM\EntityManager;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\HttpKernelInterface;
  9. use Symfony\Component\Intl\Locale;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. class LanguageListener
  13. {
  14.     private $session;
  15.     private $storage;
  16.     private $security;
  17.     private $entityManager;
  18.     public function __construct(TokenStorageInterface $storage\Doctrine\ORM\EntityManagerInterface $entityManagerSecurity $security) {
  19.         $this->storage $storage;
  20.         $this->entityManager $entityManager;
  21.         $this->security $security;
  22.     }
  23.     public function setSession(Session $session)
  24.     {
  25.         $this->session $session;
  26.     }
  27.     public function setLocale(RequestEvent $event)
  28.     {
  29.         try {
  30.             if ($this->security->isGranted('ROLE_PREVIOUS_ADMIN')) {
  31.                 return;
  32.             }
  33.         } catch (\Exception $exception) {}
  34.         if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  35.             return;
  36.         }
  37.         if ($this->storage->getToken() === null) {
  38.             return;
  39.         }
  40.         $request $event->getRequest();
  41.         if (substr($request->headers->get('referer'),-5) === 'login') {
  42.             return;
  43.         }
  44.         /** @var User $user */
  45.         $user $this->storage->getToken()->getUser();
  46.         if ($user instanceof User && $user->getId()) {
  47.             //only check when user is logged on
  48.             $locale $user->getLocale();
  49.             if ($locale !== $request->attributes->get('_locale') && $request->attributes->get('_locale') !== null) {
  50.                 $user->setLocale($request->attributes->get('_locale'));
  51.                 $this->entityManager->persist($user);
  52.                 $this->entityManager->flush();
  53.                 ProthelisApi::updateApiUser($user);
  54.             }
  55.             Locale::setDefault($locale);
  56.         }
  57.     }
  58. }