src/EventSubscriber/RequestSubscriber.php line 118

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\WSCMS;
  4. use Symfony\Component\HttpFoundation\RedirectResponse;
  5. use Twig\Environment;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface as Session;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\Routing\RouterInterface;
  11. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  12. use Symfony\Component\Security\Core\Security;
  13. class RequestSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(AuthorizationCheckerInterface $authorizationCheckerRouterInterface $routerSecurity $securitySession $sessionWSCMS $WSCMSEnvironment $twig)
  16.     {
  17.         $this->authorizationChecker $authorizationChecker;
  18.         $this->router $router;
  19.         $this->twig $twig;
  20.         $this->security $security;
  21.         $this->session $session;
  22.         $this->WSCMS $WSCMS;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             RequestEvent::class => 'onKernelRequest',
  28.         ];
  29.     }
  30.     public function onKernelRequest(RequestEvent $event)
  31.     {
  32.         $user $this->security->getUser();
  33.         $request $event->getRequest();
  34.         $_route $request->get('_route');
  35.         $_route_params $request->get('_route_params');
  36.         if (!$this->session->has('DOMAINE_BACK')) {
  37.             $this->session->set('DOMAINE_BACK''DOMAINE_BACK');
  38.             if ($_SERVER['CHECK_GEO_IP'] == 'true') {
  39.                 $ch curl_init();
  40.                 curl_setopt($chCURLOPT_URL"https://os-travel.com/_script?geoip={$request->getClientIp()}");
  41.                 curl_setopt($chCURLOPT_TIMEOUT5);
  42.                 curl_setopt($chCURLOPT_RETURNTRANSFER1);
  43.                 curl_setopt($chCURLOPT_HTTPHEADER, ["ClientHost:{$request->getSchemeAndHttpHost()}"]);
  44.                 $output curl_exec($ch);
  45.                 curl_close($ch);
  46.                 $ipdat json_decode($outputtrue);
  47.                 if (!key_exists('geoplugin_countryCode'$ipdat))
  48.                     throw new \Exception('Attempted to get "geoip_country_code_by_name"');
  49.                 $countryCode $ipdat['geoplugin_countryCode'];
  50.                 if (isset($_SERVER["DOMAINE_BACK_$countryCode"]))
  51.                     $this->session->set('DOMAINE_BACK'"DOMAINE_BACK_$countryCode");
  52.             }
  53.         }
  54.         if (isset($_route_params['checkin']) and $_route_params['checkin'] !== 'today' and !$this->isValidDateYMD($_route_params['checkin'])) {
  55.             $_route_params['checkin'] = 'today';
  56.             $event->setResponse(new RedirectResponse($this->router->generate($_route$_route_params)));
  57.         }
  58.         if (isset($_route_params['nuitees']) and !is_numeric($_route_params['nuitees'])) {
  59.             $_route_params['nuitees'] = 1;
  60.             $event->setResponse(new RedirectResponse($this->router->generate($_route$_route_params)));
  61.         }
  62.         if (isset($_GET['seo'])) {
  63.             $token base64_encode(json_encode([
  64.                 'route' => $_route,
  65.                 'params' => $_route_params,
  66.                 'path' => $this->router->generate($_route$_route_params0)
  67.             ]));
  68.             $event->setResponse(new RedirectResponse($_SERVER[$this->session->get('DOMAINE_BACK''DOMAINE_BACK')] . "/_script?seo=$token"));
  69.         }
  70.         if ($this->session->has('langue-translat'))
  71.             $request->setLocale($this->session->get('langue-translat'));
  72.         if ($user and $user->getLangue())
  73.             $request->setLocale($user->getLangue());
  74.         if (
  75.             !in_array($request->getPathInfo(), ["/front/maintenance-site""/front/check-cache-webservices"]) and
  76.             strpos($request->getPathInfo(), "config-traduction") === false and
  77.             strpos($request->getPathInfo(), "reset-cache-webservices") === false and
  78.             file_exists('../var/site-en-maintenance.php')
  79.         ) {
  80.             $result = include '../var/site-en-maintenance.php';
  81.             if ($result['maintenance']) {
  82.                 $ips $result['ips'];
  83.                 $dateF $result['dateFin'];
  84.                 $datetime = new \DateTime();
  85.                 $timezone = new \DateTimeZone('Africa/Tunis');
  86.                 $datetime->setTimezone($timezone);
  87.                 if (!$request->isXmlHttpRequest() and
  88.                     !in_array($request->getClientIp(), $ips) and
  89.                     (is_null($dateF) or new \DateTime($dateF->format('Y-m-d H:i')) > new \DateTime($datetime->format('Y-m-d H:i'))))
  90.                     $event->setResponse(new Response($this->twig->render("maintenance.html.twig", ['dateFin' => $dateF])));
  91.             }
  92.         }
  93.         if ($_SERVER['CHECK_CLIENT_BY_HOST'] == "true" and
  94.             !$this->session->has('amicale') and
  95.             !empty($amicale $this->WSCMS->Amicale()))
  96.             $this->session->set('amicale'$amicale);
  97.         if (!$this->session->has('devise')) {
  98.             $devises array_column($this->WSCMS->Devise()['Devises'], null'code');
  99.             $client $this->session->get('client');
  100.             if ($user and $user->getDevise() and isset($client['amicale']))
  101.                 $client['amicale']['code-devise'] = $user->getDevise();
  102.             if (isset($client['amicale']['code-devise']))
  103.                 $devise array_filter($devises, function ($devise) use ($client) {
  104.                     return $devise['code'] == $client['amicale']['code-devise'];
  105.                 });
  106.             else
  107.                 $devise array_filter($devises, function ($devise) {
  108.                     return $devise['default'];
  109.                 });
  110.             if (!empty($devise))
  111.                 $this->session->set('devise'current($devise));
  112.             else
  113.                 $this->session->set('devise', [
  114.                     "code" => "TND",
  115.                     "montant" => 1,
  116.                     "scale" => 3,
  117.                     "symbole" => "DT",
  118.                     "tndToDevise" => true,
  119.                     "periodes" => []
  120.                 ]);
  121.             $agence $this->WSCMS->Agence()['Agence'];
  122.             $this->session->set('devise-agence'$devises[isset($agence['devise']) ? $agence['devise'] : 'TND']);
  123.         }
  124.         $this->session->set('last_route_params.' $_route$_route_params);
  125.         $this->session->set('messing_messages'null);
  126.     }
  127.     function isValidDateYMD($date)
  128.     {
  129.         // Crée un objet DateTime à partir du format Y-m-d
  130.         $d = \DateTime::createFromFormat('Y-m-d'$date);
  131.         // Vérifie si l'objet a bien été créé et si la date est valide
  132.         return $d && $d->format('Y-m-d') === $date;
  133.     }
  134. }