src/MentalSchool/AppBundle/EventListener/LanguageListener.php line 26

Open in your IDE?
  1. <?php
  2. namespace MentalSchool\AppBundle\EventListener;
  3. use MentalSchool\AppBundle\Entity\IPClient;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  6. use Symfony\Component\HttpKernel\HttpKernelInterface;
  7. class LanguageListener
  8. {
  9.     private $token_storage;
  10.     private $securityContext;
  11.     private $container;
  12.     public function __construct(ContainerInterface $containerInterface)
  13.     {
  14.         $this->container $containerInterface;
  15.         $this->securityContext $this->container->get('security.authorization_checker');
  16.         $this->token_storage $this->container->get('security.token_storage');;
  17.     }
  18.     public function setLocale(GetResponseEvent $event)
  19.     {
  20.         if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  21.             return;
  22.         }
  23.         $securityToken $this->token_storage->getToken();
  24.         if ($securityToken && $securityToken->getUser() === 'anon.') {
  25.             $requestLocale $event->getRequest()->get('locale');
  26.             $referer $_SERVER['HTTP_REFERER'] ?? "";
  27.             if ($requestLocale == 'ru' &&
  28.                 (
  29.                     strpos($referer"google") !== false ||
  30.                     strpos($referer"yahoo") !== false ||
  31.                     strpos($referer"yandex") !== false
  32.                 )) {
  33.                 header("Location: https://school.abacusarithmetic.com/admin/login?locale=uk");
  34.                 exit;
  35.             }
  36.             if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  37.                 $ip_address $_SERVER['HTTP_CLIENT_IP'];
  38.             } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  39.                 $ip_address $_SERVER['HTTP_X_FORWARDED_FOR'];
  40.             } else {
  41.                 $ip_address $_SERVER['REMOTE_ADDR'];
  42.             }
  43.             $em $this->container->get('doctrine.orm.entity_manager');
  44.             $objectLang $em->getRepository('AppBundle:IPClient')->findBy(['ip' => $ip_address]);
  45.             if (!empty($objectLang[0])) {
  46.                 $objectLang $objectLang[0];
  47.                 if ($requestLocale) {
  48.                     $objectLang->setLanguage($requestLocale);
  49.                     $em->flush();
  50.                 }
  51.                 $locale $objectLang->getLanguage();
  52.             } else {
  53.                 if ($requestLocale) {
  54.                     $newIPClient = new IPClient();
  55.                     $newIPClient->setIp($ip_address);
  56.                     $newIPClient->setLanguage($requestLocale);
  57.                     $em->persist($newIPClient);
  58.                     $em->flush();
  59.                     $locale $requestLocale;
  60.                 } else {
  61.                     $locale $event->getRequest()->getSession()->get('_locale') ?? "uk";
  62.                 }
  63.             }
  64.         } else {
  65.             if(!$securityToken){
  66.                 $locale $event->getRequest()->getSession()->get('_locale');
  67.             }else {
  68.                 $locale $securityToken->getUser()->getLanguage() ?? $event->getRequest()->getSession()->get('_locale');
  69.             }
  70.         }
  71.         if ($locale) {
  72.             $request $event->getRequest();
  73.             $request->setLocale($locale);
  74.             $translator $this->container->get('translator');
  75.             $translator->setLocale($locale);
  76.         }
  77.     }
  78. }