src/EventSubscriber/SiteSubscriber.php line 21

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\Cms\DomainRepository;
  4. use App\Repository\Cms\SiteRepository;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. class SiteSubscriber implements EventSubscriberInterface
  9. {
  10.     public function __construct(
  11.         private SiteRepository $siteRepository,
  12.         private DomainRepository $domainRepository,
  13.         private $env,
  14.         private $defaultLocale 'fr'
  15.     )
  16.     {}
  17.     public function onKernelRequest(RequestEvent $event): void
  18.     {
  19.         $request $event->getRequest();
  20.         $currentUrl str_replace(['http://''httpss://'] , ['https://''https://'], $request->getUri());
  21.         if(strpos($request->attributes->get('_controller'), 'IndexController') == true && !preg_match('/preview/'$request->getUri())) {
  22.             if(!preg_match('/.local/'$request->getSchemeAndHttpHost())) {
  23.                 if ($request->get('siteCode') !== NULL) {
  24.                     $siteCode $request->get('siteCode');
  25.                     $site $this->siteRepository->findOneBySiteCode($siteCode);
  26.                     $defaultDomain $this->domainRepository->findDefaultBySite($site);
  27.                     if($this->env !== 'dev') {
  28.                         if($defaultDomain !== null) {
  29.                             $uriSiteCodeRemoved str_replace($siteCode.'/'''$currentUrl);
  30.                             header("Status: 301 Moved Permanently"false301);
  31.                             header('Location: ' $uriSiteCodeRemoved);
  32.                             exit();
  33.                         }
  34.                     }
  35.                 } else {
  36.                     $currentDomain $request->getHost();
  37.                     $domain $this->domainRepository->findByName($currentDomain);
  38.                     if ($domain) {
  39.                         $site $domain->getSite();
  40.                         $defaultDomain $this->domainRepository->findDefaultBySite($site);
  41.                         if(!preg_match('/admin/'$request->getRequestUri())) {
  42.                             if ($defaultDomain && $domain != $defaultDomain) {
  43.                                 if(!isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || $_SERVER['HTTP_X_FORWARDED_PROTO'] !== "https") {
  44.                                     header("Status: 301 Moved Permanently"false301);
  45.                                     header('Location: ' $currentUrl);
  46.                                     exit();
  47.                                 }
  48.                             }
  49.                             elseif ($defaultDomain && $domain == $defaultDomain && !isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] !== "https") {
  50.                                 header("Status: 301 Moved Permanently"false301);
  51.                                 header('Location: ' $currentUrl);
  52.                                 exit();
  53.                             }
  54.                         }
  55.                     } else {
  56.                         $site $this->siteRepository->findDefaultSite();
  57.                     }
  58.                 }
  59.             }
  60.             if(empty($site)) {
  61.                 $site $this->siteRepository->findDefaultSite();
  62.             }
  63.             if($site) {
  64.                 $request->getSession()->set('site'$site->getID());
  65.             }
  66.             $language $this->defaultLocale;
  67.             $request->getSession()->set('_locale'$language);
  68.             $request->setLocale($language);
  69.         }
  70.     }
  71.     public static function getSubscribedEvents(): array
  72.     {
  73.         return [
  74.             KernelEvents::REQUEST => 'onKernelRequest',
  75.         ];
  76.     }
  77. }