<?php
/**
* Created by PhpStorm.
* User: albert
* Date: 21/11/18
* Time: 18:23
*/
namespace AWCmsBundle\EventListener;
use AWCmsBundle\Manager\SiteManager;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Security;
class MaintenanceRequestListener
{
/**
* @var SiteManager
*/
private $siteManager;
private $engine;
private $security;
public function __construct(SiteManager $siteManager, EngineInterface $engine, Security $security)
{
$this->siteManager = $siteManager;
$this->engine = $engine;
$this->security = $security;
}
public function onKernelRequest(GetResponseEvent $event){
$site = $this->siteManager->getSite();
if(!$site or !$site->isMaintenance()){
return;
}
if(preg_match('@^/[a-z]{2}/(admin|js|login)@', $event->getRequest()->getRequestUri())) {
return;
}
if(!preg_match('|^/[a-z]{2}/|', $event->getRequest()->getRequestUri())) {
return;
}
if($this->security->isGranted('ROLE_USER')){
return;
}
$twigContent = $this->engine->render('@AWCms/maintenance.html.twig');
$response = new Response($twigContent, $site->getMaintenanceCode());
$event->setResponse($response);
$event->stopPropagation();
}
}