src/EventSubscriber/SiteSubscriber.php line 21
<?php
namespace App\EventSubscriber;
use App\Repository\Cms\DomainRepository;
use App\Repository\Cms\SiteRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class SiteSubscriber implements EventSubscriberInterface
{
public function __construct(
private SiteRepository $siteRepository,
private DomainRepository $domainRepository,
private $env,
private $defaultLocale = 'fr'
)
{}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$currentUrl = str_replace(['http://', 'httpss://'] , ['https://', 'https://'], $request->getUri());
if(strpos($request->attributes->get('_controller'), 'IndexController') == true && !preg_match('/preview/', $request->getUri())) {
if(!preg_match('/.local/', $request->getSchemeAndHttpHost())) {
if ($request->get('siteCode') !== NULL) {
$siteCode = $request->get('siteCode');
$site = $this->siteRepository->findOneBySiteCode($siteCode);
$defaultDomain = $this->domainRepository->findDefaultBySite($site);
if($this->env !== 'dev') {
if($defaultDomain !== null) {
$uriSiteCodeRemoved = str_replace($siteCode.'/', '', $currentUrl);
header("Status: 301 Moved Permanently", false, 301);
header('Location: ' . $uriSiteCodeRemoved);
exit();
}
}
} else {
$currentDomain = $request->getHost();
$domain = $this->domainRepository->findByName($currentDomain);
if ($domain) {
$site = $domain->getSite();
$defaultDomain = $this->domainRepository->findDefaultBySite($site);
if(!preg_match('/admin/', $request->getRequestUri())) {
if ($defaultDomain && $domain != $defaultDomain) {
if(!isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || $_SERVER['HTTP_X_FORWARDED_PROTO'] !== "https") {
header("Status: 301 Moved Permanently", false, 301);
header('Location: ' . $currentUrl);
exit();
}
}
elseif ($defaultDomain && $domain == $defaultDomain && !isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] !== "https") {
header("Status: 301 Moved Permanently", false, 301);
header('Location: ' . $currentUrl);
exit();
}
}
} else {
$site = $this->siteRepository->findDefaultSite();
}
}
}
if(empty($site)) {
$site = $this->siteRepository->findDefaultSite();
}
if($site) {
$request->getSession()->set('site', $site->getID());
}
$language = $this->defaultLocale;
$request->getSession()->set('_locale', $language);
$request->setLocale($language);
}
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
}