<?php
/**
* Created by PhpStorm.
* User: sidux
* Date: 27/12/2015
* Time: 22:17
*/
namespace AWCmsBundle\EventListener;
use AWCmsBundle\Event\GlobalTwigVariableEvent;
use AWCmsBundle\Manager\MenuTreeManager;
use AWCmsBundle\Manager\SiteManager;
use AWCmsBundle\Entity\Site;
use AWCmsBundle\Manager\SlugManager;
use AWCmsBundle\Security\CurrentUserProvider;
use AWCmsBundle\Service\Asset;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
/**
* Class LayoutVarSender
*
* @package AppBundle\Event
*/
class TwigVariablesListener implements EventSubscriberInterface
{
/**
* @var SiteManager
*/
protected $siteManager;
/**
* @var MenuTreeManager
*/
protected $menuTreeManager;
/**
* @var ContainerInterface
*/
protected $container;
const ASSET_VERSION = 12;
/**
* @var SlugManager
*/
private $slugManager;
/**
* @var Asset
*/
private $asset;
/**
* @var RequestStack
*/
private $requestStack;
/**
* @var CurrentUserProvider
*/
private CurrentUserProvider $currentUserProvider;
/**
* LayoutVarSender constructor.
*
* @param ContainerInterface $container
* @param SiteManager $siteManager
* @param MenuTreeManager $menuTreeManager
* @param SlugManager $slugManager
* @param Asset $asset
* @param RequestStack $requestStack
*/
public function __construct(
ContainerInterface $container,
SiteManager $siteManager,
MenuTreeManager $menuTreeManager,
SlugManager $slugManager,
Asset $asset,
RequestStack $requestStack,
CurrentUserProvider $currentUserProvider
)
{
$this->container = $container;
$this->siteManager = $siteManager;
$this->menuTreeManager = $menuTreeManager;
$this->slugManager = $slugManager;
$this->asset = $asset;
$this->requestStack = $requestStack;
$this->currentUserProvider = $currentUserProvider;
}
public static function getSubscribedEvents()
{
return [
GlobalTwigVariableEvent::TO_POPULATE_EVENT => 'addData'
];
}
public function addData(GlobalTwigVariableEvent $event)
{
// If no master request, we are in console
if(!$this->requestStack->getMasterRequest()){
return;
}
$data['asset_version'] = $this->asset->getAssetVersion();
if (!array_key_exists('site', $data) || !$data['site'] instanceof Site) {
$data['site'] = $this->siteManager->getSite();
}
if($data['site'] instanceof Site){
if (!array_key_exists('menuHeader', $data)) {
$data['menuHeader'] = $this->menuTreeManager->getBySiteAndName($data['site'], 'Header');
}
if (!array_key_exists('menuFooter', $data)) {
$data['menuFooter'] = $this->menuTreeManager->getBySiteAndName($data['site'], 'Footer');
}
if (!array_key_exists('menuTopHeader', $data)) {
$data['menuTopHeader'] = $this->menuTreeManager->getBySiteAndName($data['site'], 'Top Header');
}
}
if (!array_key_exists('isViewer', $data)) {
$data['isViewer'] = false;
}
if (!array_key_exists('isPreview', $data)) {
$data['isPreview'] = false;
}
if(!array_key_exists('logo_site', $data)){
$data['logo_site'] = $this->container->getParameter('aw_cms.design.logo');
}
if($this->slugManager->getCurrentSlug()){
$data['slug'] = $this->slugManager->getCurrentSlug();
}
$data['current_user'] = $this->currentUserProvider->get();
$data['current_page'] = null;
$event->addData($data);
}
}