src/EventSubscriber/Redirect.php line 80

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Env;
  4. use App\Func;
  5. use App\DTO\AppDTO;
  6. use App\DTO\PageDTO;
  7. use App\Entity\Cart;
  8. use App\Entity\Sett;
  9. use App\Entity\User;
  10. use App\Entity\Block;
  11. use App\Entity\Order;
  12. use App\Entity\Timer;
  13. use Twig\Environment;
  14. use App\Entity\Banner;
  15. use App\Entity\Labels;
  16. use App\Model\Wishlist;
  17. use App\Entity\Template;
  18. use App\GlobalVars\Blocks;
  19. use App\Service\Auth\Auth;
  20. use App\Entity\Transaction;
  21. use App\GlobalVars\Templates;
  22. use App\Entity\Page as EntityPage;
  23. use App\Repository\PageRepository;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use App\GlobalVars\Sett as GlobalVarsSett;
  26. use Symfony\Contracts\Cache\ItemInterface;
  27. use App\Entity\Translation\PageTranslation;
  28. use App\Entity\Translation\SettTranslation;
  29. use Symfony\Contracts\Cache\CacheInterface;
  30. use App\Entity\Translation\TimerTranslation;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\Security\Core\Security;
  33. use App\GlobalVars\Labels as GlobalVarsLabels;
  34. use Symfony\Component\HttpFoundation\Response;
  35. use App\Entity\Translation\TemplateTranslation;
  36. use App\Repository\RedirectRepository;
  37. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  38. use Symfony\Component\HttpKernel\Event\RequestEvent;
  39. use Symfony\Component\HttpFoundation\RedirectResponse;
  40. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  41. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  42. class Redirect implements EventSubscriberInterface
  43. {
  44.     private $no_cache false;
  45.     
  46.     private Environment $twig;
  47.     private EntityManagerInterface $em;
  48.     private CacheInterface $Cache;
  49.     private Auth $Auth;
  50.     private Env $Env;
  51.     private Func $Func;
  52.     private Wishlist $Wishlist;
  53.     private ?AppDTO $app;
  54.     // Temp
  55.     private $_pagename;
  56.     private RedirectRepository $redirectRepository;
  57.     public function __construct(AppDTO $appEnvironment $twigEntityManagerInterface $emTagAwareCacheInterface $appCacheAuth $AuthEnv $EnvFunc $FuncWishlist $WishlistSecurity $securityRedirectRepository $redirectRepository)
  58.     {
  59.         $this->twig $twig;
  60.         $this->em $em;
  61.         $this->app $app;
  62.         $this->Cache $appCache;
  63.         $this->Auth $Auth;
  64.         $this->Auth->setUser($security->getUser());
  65.         $this->Env $Env;
  66.         $this->Func $Func;
  67.         $this->Wishlist $Wishlist;
  68.         $this->redirectRepository $redirectRepository;
  69.     }
  70.     public function onRequest(RequestEvent $event): void
  71.     {
  72.         if (Env::is_test() || Env::is_local()) {
  73.             return;
  74.         }
  75.         
  76.         if (Env::site() == Env::MIR) {
  77.             $request $event->getRequest();
  78.             if (preg_match("/\/uk\//"$request->getUri())) {                
  79.                 $redirect preg_replace("#/uk/#"'/'$request->getUri());
  80.                 $event->setResponse(new RedirectResponse($redirect301));
  81.             }
  82.         }
  83.         $redirects $this->redirectRepository->getallRedirects();
  84.         //TODO. Убрать после переноса
  85.         if (Env::site() == Env::OPT_MIX && $event->getRequest()->getHost() == 'opt.mixform.pl') {
  86.             $event->setResponse(new RedirectResponse("https://mixformwhole.pl".$event->getRequest()->getRequestUri(), 301));
  87.         }
  88.         if (Env::site() == Env::DOM && !Env::is_test()) {
  89.             $request $event->getRequest();
  90.             $host $request->getHost();
  91.             if (!str_starts_with($host'www.')) {
  92.                 $uri $request->getSchemeAndHttpHost();
  93.                 $uri preg_replace('/^https?:\/\/' preg_quote($host'/') . '/i'$request->getScheme() . '://www.' $host$request->getUri());
  94.                 $event->setResponse(new RedirectResponse($uri301));
  95.             }
  96.         }
  97.         $request $event->getRequest();
  98.         
  99.         if (in_array($request->getRequestUri(), array_keys($redirects))) {
  100.             $event->setResponse(new RedirectResponse($redirects[$request->getRequestUri()], 301));
  101.             return;
  102.         }
  103.         // 1. Не выполнять редирект в окружении разработки ('dev'), чтобы не мешать локальной работе
  104.         // if ($this->environment === 'dev') {
  105.         //     return;
  106.         // }
  107.         // 2. Не выполнять редирект, если это не основной запрос (например, внутренний ESI или sub-request)
  108.         if (!$event->isMainRequest()) {
  109.             return;
  110.         }
  111.         if (Env::site() == Env::MIX || Env::site() == Env::OPT_MIX) {
  112.             if (strstr($request->getHttpHost(), 'www')) {
  113.                 $url Env::host() . $request->getRequestUri();
  114.                 $response = new RedirectResponse($url301);
  115.                 $event->setResponse($response);
  116.                 return;
  117.             }
  118.         }
  119.         // 3. Не выполнять редирект, если запрос УЖЕ защищен (уже HTTPS)
  120.         // Метод isSecure() умный и учитывает заголовки от прокси-серверов (см. ниже)
  121.         if ($request->getScheme() == 'https') {
  122.             return;
  123.         }
  124.         
  125.         // --- Логика редиректа ---
  126.         $url 'https://' $request->getHttpHost() . $request->getRequestUri();
  127.         $response = new RedirectResponse($url301);
  128.         $event->setResponse($response);
  129.     }
  130.     private function redirectMixFormOpt(Request $request)
  131.     {        
  132.         if (!$request->getLocale()) {
  133.             $request->setLocale($request->getDefaultLocale());
  134.         }
  135.     }
  136.     public static function getSubscribedEvents(): array
  137.     {
  138.         return [
  139.             'kernel.request' => 'onRequest',
  140.         ];
  141.     }
  142. }