src/EventListener/FmRequestListener.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Utils\UrlShortener;
  4. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\Cookie;
  10. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  11. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Twig\Environment;
  14. class FmRequestListener
  15. {
  16.     private UrlShortener $urlShortener;
  17.     private ParameterBagInterface $parameterBag;
  18.     private Environment $twig;
  19.     public function __construct(
  20.         UrlShortener $urlShortener,
  21.         ParameterBagInterface $parameterBag,
  22.         Environment $twig
  23.     ) {
  24.         $this->urlShortener $urlShortener;
  25.         $this->parameterBag $parameterBag;
  26.         $this->twig $twig;
  27.     }
  28.     public function onKernelRequest(RequestEvent $event)
  29.     {
  30.         $request        $event->getRequest();
  31.         $requestUri     $request->getUri();
  32.         $redirectCheck  $this->urlShortener->redirectCheck(
  33.             $request->server->get('SERVER_NAME'),
  34.             $request->server->get('REQUEST_URI')
  35.         );
  36.         if ($coupon $request->query->get('coupon'))
  37.         {
  38.             if (strpos($requestUri$_ENV['EF_URL']) !== false)
  39.             {
  40.                 $request->getSession()->set('coupon'$coupon);
  41.             }
  42.         }
  43.         if (($productsInfo $request->query->get('products_info')) && $productsInfo === 'true')
  44.         {
  45.             $request->getSession()->set('products_info'$productsInfo);
  46.         }
  47.         if ($redirectCheck)
  48.             $event->setResponse($redirectCheck);
  49.         if (strpos($requestUri$_ENV['EF_URL']))
  50.         {
  51.             if (is_null($request->cookies->get('gos_portal_settings'null)))
  52.                 $request->cookies->set('gos_portal_settings'$_ENV['EF_PORTAL_SETTINGS']);
  53.             $request->getSession()->set('portalSettingsHash'$_ENV['EF_PORTAL_SETTINGS']);
  54.         }
  55.         if (strpos($requestUri$_ENV['US_URL']))
  56.         {
  57.             if (is_null($request->cookies->get('gos_portal_settings'null)))
  58.                 $request->cookies->set('gos_portal_settings'$_ENV['US_PORTAL_SETTINGS']);
  59.             $request->getSession()->set('portalSettingsHash'$_ENV['US_PORTAL_SETTINGS']);
  60.         }
  61.         if (strpos($requestUri'/api/chatbot/start')) {
  62.             $request->getSession()->remove('chatbot');
  63.             $request->getSession()->save();
  64.         }
  65.     }
  66.     public function onKernelResponse(ResponseEvent $event)
  67.     {
  68.         $request    $event->getRequest();
  69.         $response   $event->getResponse();
  70.         $time       time() + (3600 24 30);
  71.         $this->setRequestCookie($request$response'a'$time);
  72.         $this->setRequestCookie($request$response'f'$time);
  73.         $this->joinRequestAllCookie($request$response'all_a'$time);
  74.         $this->joinRequestAllCookie($request$response'all_f'$time);
  75.         $this->setRequestCookie($request$response'c'$time);
  76.         $this->setRequestCookie($request$response'chc'$time);
  77.         $this->setRequestCookie($request$response'infoline'$time);
  78. //        $this->setMarketingCookie($request, $response, $time);
  79.         $this->setButtonParameterCookie($request$response$time);
  80.         if ($request->query->get('isTele'false) === 'yes')
  81.         {
  82.             $response->headers->setCookie(new Cookie('tele''yes'));
  83.         }
  84.     }
  85.     public function onKernelException(ExceptionEvent $event): void
  86.     {
  87.         $requestUri $event->getRequest()->getUri();
  88.         if (!$event->getThrowable() instanceof NotFoundHttpException)
  89.             return;
  90.         $statusCode $event->getThrowable()->getStatusCode();
  91.         if (strpos($requestUri$_ENV['EF_URL']))
  92.         {
  93.             $response = new Response(
  94.                 $this->twig->render('frontend-eforum/404.html.twig'),
  95.                 404
  96.             );
  97.             $event->setResponse($response);
  98.         }
  99.         elseif (strpos($requestUri$_ENV['US_URL']))
  100.         {
  101.             $userLocale     $event->getRequest()->getSession()->get('userLocale''pl');
  102.             $template       'uniqskills/exception/error' $statusCode '.' $userLocale '.html.twig';
  103.             $pathToTemplate $this->parameterBag->get('kernel.project_dir') . '/templates/' $template;
  104.             if (file_exists($pathToTemplate))
  105.             {
  106.                 $response $this->createErrorResponse($template$userLocale$statusCode);
  107.             }
  108.             else
  109.             {
  110.                 $response $this->createErrorResponse('uniqskills/exception/error.html.twig'$userLocale500);
  111.             }
  112.             $event->setResponse($response);
  113.         }
  114.         else
  115.         {
  116.             // Default error page: templates/bundles/TwigBundle/Exception/error.html.twig
  117.         }
  118.         return;
  119.     }
  120.     private function createErrorResponse($template$userLocale$statusCode): Response
  121.     {
  122.         return new Response(
  123.             $this->twig->render(
  124.                 $template,
  125.                 [
  126.                     'locale'     => $userLocale,
  127.                     'statusCode' => $statusCode
  128.                 ]
  129.             ),
  130.             $statusCode
  131.         );
  132.     }
  133.     private function setRequestCookie(Request $requestResponse $responsestring $cookie$time): void
  134.     {
  135.         if ($request->get($cookie))
  136.         {
  137.             $value $request->get($cookie);
  138.             if (is_array($value))
  139.             {
  140.                 $value json_encode($value);
  141.             }
  142.             $response->headers->setCookie(new Cookie($cookie$value$time));
  143.         }
  144.     }
  145.     private function joinRequestAllCookie(Request $requestResponse $responsestring $cookie$time): void
  146.     {
  147.         $newValue $request->get(str_replace('all_'''$cookie), '');
  148.         if (!empty($newValue)) {
  149.             $existingCookie $request->cookies->get($cookie'');
  150.             $newValue explode(';'$newValue);
  151.             $existingCookie explode(';'$existingCookie);
  152.             $newValue array_merge($existingCookie$newValue);
  153.             $newValue implode(';'$newValue);
  154.             $response->headers->setCookie(new Cookie($cookietrim($newValue';'), $time));
  155.         }
  156.     }
  157.     private function setMarketingCookie(Request $requestResponse $response$time): void
  158.     {
  159.         if ($request->isMethod('GET') && ($request->query->get('a') || $request->query->get('f')))
  160.         {
  161.             $marketingRow = [
  162.                 (new \DateTime())->format('d-m-Y H:i:s'),
  163.                 $request->query->get('a'$request->cookies->get('a''')),
  164.                 $request->query->get('f'$request->cookies->get('f'''))
  165.             ];
  166.             $marketingCookie $request->cookies->get('marketing'json_encode([]));
  167.             $marketingCookie json_decode($marketingCookietrue);
  168.             if (count($marketingCookie) > 9)
  169.             {
  170.                 array_shift($marketingCookie);
  171.             }
  172.             $marketingCookie[] = $marketingRow;
  173.             $response->headers->setCookie(new Cookie('marketing'json_encode($marketingCookie), $time));
  174.         }
  175.     }
  176.     private function setButtonParameterCookie(Request $requestResponse $response$time): void
  177.     {
  178.         if ($request->query->get('bp'))
  179.         {
  180.             $bp $request->cookies->get('bp', array());
  181.             if (!empty($bp))
  182.             {
  183.                 $bp json_decode($bpfalse);
  184.             }
  185.             $bp[] = $request->query->get('bp');
  186.             $response->headers->setCookie(new Cookie('bp'json_encode(array_unique($bp)), $time));
  187.         }
  188.     }
  189. }