src/Service/Locale/EventListener/SetLocaleListener.php line 81

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\Locale\EventListener;
  3. use Harmonizely\Core\Security\Contract\ISecurityHelper;
  4. use Harmonizely\Model\EventTypeInterface;
  5. use Harmonizely\Model\Organization;
  6. use Harmonizely\Model\UserInterface;
  7. use Harmonizely\Service\Locale\Event\SetLocaleEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\RequestStack;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Symfony\Contracts\Translation\LocaleAwareInterface;
  13. class SetLocaleListener implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var RequestStack
  17.      */
  18.     private RequestStack $requestStack;
  19.     /**
  20.      * @var LocaleAwareInterface
  21.      */
  22.     private LocaleAwareInterface $localeAware;
  23.     /**
  24.      * @var ISecurityHelper
  25.      */
  26.     private ISecurityHelper $securityHelper;
  27.     /**
  28.      * @var string[]
  29.      */
  30.     private $enabledLocales;
  31.     /**
  32.      * SetLocaleListener constructor.
  33.      *
  34.      * @param RequestStack $requestStack
  35.      * @param LocaleAwareInterface $localeAware
  36.      * @param ISecurityHelper $securityHelper
  37.      * @param string $enabledLocales
  38.      */
  39.     public function __construct(
  40.         RequestStack $requestStack,
  41.         LocaleAwareInterface $localeAware,
  42.         ISecurityHelper $securityHelper,
  43.         string $enabledLocales
  44.     )
  45.     {
  46.         $this->requestStack $requestStack;
  47.         $this->localeAware $localeAware;
  48.         $this->securityHelper $securityHelper;
  49.         $this->enabledLocales explode('|'$enabledLocales '|zh');
  50.     }
  51.     public static function getSubscribedEvents(): array
  52.     {
  53.         return [
  54.             SetLocaleEvent::NAME => ['onSetLocale'],
  55.             KernelEvents::REQUEST => ['onRequestSetLocale'],
  56.         ];
  57.     }
  58.     /**
  59.      * @param RequestEvent $event
  60.      * @return void
  61.      */
  62.     public function onRequestSetLocale(RequestEvent $event): void
  63.     {
  64.         $this->onSetLocale(new SetLocaleEvent(null$this->securityHelper->getUser()));
  65.     }
  66.     /**
  67.      * @param SetLocaleEvent $event
  68.      */
  69.     public function onSetLocale(SetLocaleEvent $event): void
  70.     {
  71.         $request $this->requestStack->getCurrentRequest();
  72.         $locale $request->getLocale();
  73.         $eventType $event->getEventType();
  74.         $user $event->getUser();
  75.         $organization $event->getOrganization();
  76.         if ($eventType instanceof EventTypeInterface && !$eventType->isAutoLocale()) {
  77.             $locale $eventType->getLocale();
  78.         } elseif ($user instanceof UserInterface && !$user->isAutoLocale()) {
  79.             $locale $user->getLocale();
  80.         } elseif ($organization instanceof Organization && !$organization->isAutoLocale()) {
  81.             $locale $organization->getLocale();
  82.         }
  83.         if ($locale) {
  84.             $locale substr($locale02);
  85.             if (!in_array($locale$this->enabledLocales)) {
  86.                 $locale 'en';
  87.             }
  88.             $request->setLocale($locale);
  89.             $this->localeAware->setLocale($locale);
  90.         }
  91.     }
  92. }