vendor/kunstmaan/admin-bundle/EventListener/AdminLocaleListener.php line 65

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\AdminBundle\EventListener;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Translation\TranslatorInterface;
  10. use Kunstmaan\AdminBundle\Helper\AdminRouteHelper;
  11. /**
  12.  * AdminLocaleListener to override default locale if user-specific locale is set in database
  13.  */
  14. class AdminLocaleListener implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var TokenStorageInterface
  18.      */
  19.     private $tokenStorage;
  20.     /**
  21.      * @var TranslatorInterface
  22.      */
  23.     private $translator;
  24.     /**
  25.      * @var string
  26.      */
  27.     private $defaultAdminLocale;
  28.     /**
  29.      * @var string
  30.      */
  31.     private $providerKey;
  32.     /**
  33.      * @var AdminRouteHelper
  34.      */
  35.     private $adminRouteHelper;
  36.     /**
  37.      * @param TokenStorageInterface $tokenStorage
  38.      * @param TranslatorInterface   $translator
  39.      * @param string                $defaultAdminLocale
  40.      * @param AdminRouteHelper      $adminRouteHelper
  41.      * @param string                $providerKey        Firewall name to check against
  42.      */
  43.     public function __construct(TokenStorageInterface $tokenStorageTranslatorInterface $translatorAdminRouteHelper $adminRouteHelper$defaultAdminLocale$providerKey 'main')
  44.     {
  45.         $this->translator $translator;
  46.         $this->tokenStorage $tokenStorage;
  47.         $this->defaultAdminLocale $defaultAdminLocale;
  48.         $this->providerKey $providerKey;
  49.         $this->adminRouteHelper $adminRouteHelper;
  50.     }
  51.     /**
  52.      * onKernelRequest
  53.      *
  54.      * @param GetResponseEvent|ResponseEvent $event
  55.      */
  56.     public function onKernelRequest($event)
  57.     {
  58.         if (!$event instanceof GetResponseEvent && !$event instanceof ResponseEvent) {
  59.             throw new \InvalidArgumentException(\sprintf('Expected instance of type %s, %s given', \class_exists(ResponseEvent::class) ? ResponseEvent::class : GetResponseEvent::class, \is_object($event) ? \get_class($event) : \gettype($event)));
  60.         }
  61.         $url $event->getRequest()->getRequestUri();
  62.         if (!$this->adminRouteHelper->isAdminRoute($url)) {
  63.             return;
  64.         }
  65.         $token $this->tokenStorage->getToken();
  66.         if ($token && $this->isAdminToken($this->providerKey$token)) {
  67.             $locale $token->getUser()->getAdminLocale();
  68.             if (!$locale) {
  69.                 $locale $this->defaultAdminLocale;
  70.             }
  71.             $this->translator->setLocale($locale);
  72.         }
  73.     }
  74.     /**
  75.      * @param TokenInterface $token
  76.      * @param                $providerKey
  77.      *
  78.      * @return bool
  79.      */
  80.     private function isAdminToken($providerKeyTokenInterface $token null)
  81.     {
  82.         return \is_callable([$token'getProviderKey']) && $token->getProviderKey() === $providerKey;
  83.     }
  84.     /**
  85.      * getSubscribedEvents
  86.      */
  87.     public static function getSubscribedEvents()
  88.     {
  89.         return array(
  90.             // Must be registered before the default Locale listener
  91.             KernelEvents::REQUEST => array(array('onKernelRequest'17)),
  92.         );
  93.     }
  94. }