src/EventListener/RequestListener.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Cart;
  4. use App\Entity\Language;
  5. use App\Entity\WebGroup;
  6. use App\Tools\LocaleHelper;
  7. use App\Tools\WebGroupHelper;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Exception;
  10. use RuntimeException;
  11. use Symfony\Component\DependencyInjection\ContainerInterface;
  12. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  13. use Twig\Environment as Twig;
  14. class RequestListener
  15. {
  16.     /**
  17.      * @var Twig
  18.      */
  19.     private $twig;
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     private $entityManager;
  24.     /**
  25.      * @var WebGroupHelper
  26.      */
  27.     private $webGroupHelper;
  28.     /**
  29.      * @var LocaleHelper
  30.      */
  31.     private $localeHelper;
  32.     /**
  33.      * @var string
  34.      */
  35.     private $fallbackLocale;
  36.     /**
  37.      * RequestListener constructor.
  38.      *
  39.      * @param Twig $twig
  40.      * @param EntityManagerInterface $entityManager
  41.      * @param WebGroupHelper $webGroupHelper
  42.      * @param LocaleHelper $localeHelper
  43.      * @param ContainerInterface $container
  44.      */
  45.     public function __construct(
  46.         Twig $twig,
  47.         EntityManagerInterface $entityManager,
  48.         WebGroupHelper $webGroupHelper,
  49.         LocaleHelper $localeHelper,
  50.         ContainerInterface $container
  51.     )
  52.     {
  53.         $this->twig $twig;
  54.         $this->entityManager $entityManager;
  55.         $this->webGroupHelper $webGroupHelper;
  56.         $this->localeHelper $localeHelper;
  57.         $this->fallbackLocale $container->getParameter('default_locale');
  58.     }
  59.     /**
  60.      * @param GetResponseEvent $event
  61.      * @throws Exception
  62.      */
  63.     public function onKernelRequest(GetResponseEvent $event)
  64.     {
  65.         $request $event->getRequest();
  66.         $exception $request->attributes->get('exception');
  67.         // Skip sub requests but keep error pages
  68.         if (!$event->isMasterRequest() && empty($exception)) {
  69.             return;
  70.         }
  71.         $attributes $request->attributes;
  72.         // Skip ajax requests
  73.         if (
  74.             $request->isXmlHttpRequest() &&
  75.             !in_array($attributes->get('_route'), ['app_navigation_mega_menu_ajax''app_navigation_mobile_ajax''app_search']) &&
  76.             !in_array($attributes->get('_route'), ['admin_groups_load''admin_groups_edit'])
  77.         ) {
  78.             return;
  79.         }
  80.         $locales $this->localeHelper->getLocales();
  81.         foreach ($languageMapping $this->localeHelper->getLanguageMapping() as $locale => $language) {
  82.             if (!in_array($locale$locales)) {
  83.                 unset($languageMapping[$locale]);
  84.             }
  85.         }
  86.         $this->twig->addGlobal('languages'$languageMapping);
  87.         $locale $event->getRequest()->getLocale();
  88.         $language $this->entityManager->getRepository(Language::class)->findOneByLocale($locale);
  89.         if (empty($language)) {
  90.             $language $this->entityManager->getRepository(Language::class)->findOneByLocale($this->fallbackLocale);
  91.             //throw new RuntimeException('Cannot find matching language');
  92.         }
  93.         $this->twig->addGlobal('language'$language);
  94.         $fallbackLanguage $this->entityManager->getRepository(Language::class)->findOneByLocale($this->fallbackLocale);
  95.         if (empty($fallbackLanguage)) {
  96.             throw new RuntimeException('Cannot find matching language');
  97.         }
  98.         $this->twig->addGlobal('fallbackLanguage'$fallbackLanguage);
  99. //        $translations = $this->entityManager->getRepository(WebGroupTranslation::class)->findByLanguageIndexByGroupId($language);
  100.         $webGroups $this->entityManager->getRepository(WebGroup::class)->findByParent(null);
  101. //        if ($attributes->get('_route') === 'app_article_listing') {
  102. //            $webGroups = $this->webGroupHelper->extendArticleParameters($webGroups);
  103. //        }
  104.         $this->webGroupHelper->translateGroups($webGroups$language$fallbackLanguage);
  105.         // add webGroups as global variable for the navigation
  106.         $this->twig->addGlobal('webGroups'$webGroups);
  107.         $sessionCart $event->getRequest()->getSession()->get('cart');
  108.         if (!empty($sessionCart)) {
  109.             $sessionCart $this->entityManager->getRepository(Cart::class)->findOneById($sessionCart->getId());
  110.             $event->getRequest()->getSession()->set('cart'$sessionCart);
  111.         }
  112.     }
  113. }