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

Open in your IDE?
  1. <?php
  2. namespace Kunstmaan\AdminBundle\EventListener;
  3. use Kunstmaan\AdminBundle\Helper\AdminRouteHelper;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  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\Contracts\Translation\TranslatorInterface;
  10. /**
  11.  * AdminLocaleListener to override default locale if user-specific locale is set in database
  12.  */
  13. class AdminLocaleListener implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var TokenStorageInterface
  17.      */
  18.     private $tokenStorage;
  19.     /**
  20.      * @var TranslatorInterface
  21.      */
  22.     private $translator;
  23.     /**
  24.      * @var string
  25.      */
  26.     private $defaultAdminLocale;
  27.     /**
  28.      * @var string
  29.      */
  30.     private $providerKey;
  31.     /**
  32.      * @var AdminRouteHelper
  33.      */
  34.     private $adminRouteHelper;
  35.     /**
  36.      * @param string $defaultAdminLocale
  37.      * @param string $providerKey        Firewall name to check against
  38.      */
  39.     public function __construct(TokenStorageInterface $tokenStorageTranslatorInterface $translatorAdminRouteHelper $adminRouteHelper$defaultAdminLocale$providerKey 'main')
  40.     {
  41.         $this->translator $translator;
  42.         $this->tokenStorage $tokenStorage;
  43.         $this->defaultAdminLocale $defaultAdminLocale;
  44.         $this->providerKey $providerKey;
  45.         $this->adminRouteHelper $adminRouteHelper;
  46.     }
  47.     public function onKernelRequest(RequestEvent $event)
  48.     {
  49.         $url $event->getRequest()->getRequestUri();
  50.         if (!$this->adminRouteHelper->isAdminRoute($url)) {
  51.             return;
  52.         }
  53.         $token $this->tokenStorage->getToken();
  54.         if ($token && $this->isAdminToken($this->providerKey$token)) {
  55.             $locale $token->getUser()->getAdminLocale();
  56.             if (!$locale) {
  57.                 $locale $this->defaultAdminLocale;
  58.             }
  59.             $this->translator->setLocale($locale);
  60.         }
  61.     }
  62.     private function isAdminToken($providerKey, ?TokenInterface $token null): bool
  63.     {
  64.         if (null === $token) {
  65.             return false;
  66.         }
  67.         if (\is_callable([$token'getFirewallName'])) {
  68.             return $token->getFirewallName() === $providerKey;
  69.         }
  70.         return false;
  71.     }
  72.     /**
  73.      * @return array
  74.      */
  75.     public static function getSubscribedEvents()
  76.     {
  77.         return [
  78.             // The event subscriber must be registered after the Symfony FirewallListener so the user token is populated.
  79.             KernelEvents::REQUEST => [['onKernelRequest'5]],
  80.         ];
  81.     }
  82. }