<?php
namespace App\EventSubscriber;
use App\Croqvacances\CookieConsentBundle\Storage\CookieConsentSessionStorage;
use App\Repository\FrontOptionRepository;
use App\Repository\ArticleRepository;
use App\Repository\SeoRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Twig\Environment;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Form\FormFactoryInterface;
use App\Form\MainFormType;
use App\Repository\AgeRepository;
use App\Repository\CountryRepository;
use App\Repository\SaisonRepository;
use App\Repository\SejourRepository;
use App\Repository\ThemeRepository;
use App\Repository\NotificationRepository;
use App\Repository\MediaRepository;
use App\Repository\MediaCategorieRepository;
use App\Entity\Notification;
use App\Repository\VilleDesservieRepository;
use App\Croqvacances\CookieConsentBundle\Repository\Cook2Repository;
use App\Repository\SejourSessionRepository;
class TwigEventSubscriber implements EventSubscriberInterface
{
private $twig;
private $frontOptionRepository;
private $articleRepository;
private $saisonRepository;
private $seoRepository;
private $sejourRepository;
private $sejourSessionRepository;
private $countryRepository;
private $container;
private $ageRepository;
private $themeRepository;
private $villeDesservieRepository;
private $formFactory;
private $cook2Repo;
private $notificationRepository;
private $mediaRepository;
private $mediaCategoryRepository;
public function __construct(
Environment $twig,
FrontOptionRepository $frontOptionRepository,
ArticleRepository $articleRepository,
AgeRepository $ageRepository,
ThemeRepository $themeRepository,
SeoRepository $seoRepository,
SejourRepository $sejourRepository,
SejourSessionRepository $sejourSessionRepository,
SaisonRepository $saisonRepository,
CountryRepository $countryRepository,
VilleDesservieRepository $villeDesservieRepository,
RequestStack $container,
Cook2Repository $cook2Repository,
NotificationRepository $notificationRepository,
MediaRepository $mediaRepository,
MediaCategorieRepository $mediaCategoryRepository
)
{
$this->twig = $twig;
$this->cook2Repo = $cook2Repository;
$this->frontOptionRepository = $frontOptionRepository;
$this->articleRepository = $articleRepository;
$this->container = $container;
$this->sejourSessionRepository = $sejourSessionRepository;
$this->saisonRepository = $saisonRepository;
$this->seoRepository = $seoRepository;
$this->sejourRepository = $sejourRepository;
$this->ageRepository = $ageRepository;
$this->villeDesservieRepository = $villeDesservieRepository;
$this->themeRepository = $themeRepository;
$this->countryRepository = $countryRepository;
$this->notificationRepository = $notificationRepository;
$this->mediaRepository = $mediaRepository;
$this->mediaCategoryRepository = $mediaCategoryRepository;
}
public function onKernelController(ControllerEvent $event)
{
$path = $this->container->getCurrentRequest()->getPathInfo();
$cookies = $this->container->getCurrentRequest()->cookies;
$cookiRulesFinal = [];
if($cookies->has(CookieConsentSessionStorage::COOKIE_KEY_NAME)){
$cookieId = $cookies->get(CookieConsentSessionStorage::COOKIE_KEY_NAME);
$cookiesRules = $this->cook2Repo->findBy(['cookieConsentKey' => $cookieId]);
foreach($cookiesRules as $cr){
$cookiRulesFinal[$cr->getCookieName()] = $cr->getCookieValue();
}
}
$selected = [];
$isSearch =strpos($path,"colonie-de-vacances");
if($isSearch!== false){
$selected = explode("/",$path);
}
array_shift($selected);
$seoDataA = $this->seoRepository->createQueryBuilder('s')
->andWhere('s.path = :path')
->setParameter('path', $path)
->orderBy('s.id','DESC')
->getQuery()
->getResult();
if(count($seoDataA)>0){
$seoData = $seoDataA[0];
}else{
$seoData = null;
}
$sejourData = $this->sejourRepository->createQueryBuilder('s')
->andWhere('s.url = :path')
->setParameter('path', $path)
->getQuery()
->getOneOrNullResult();
$articleData = $this->articleRepository->createQueryBuilder('s')
->andWhere('s.path = :path')
->setParameter('path', $path)
->getQuery()
->getOneOrNullResult();
$bannerOnline = $this->frontOptionRepository->findOneBy([
'name' => 'bannerOnline'
]);
$banner = ($bannerOnline->getContent() == "1") ? $this->frontOptionRepository->findOneBy(['name' => 'banner']): null;
$allSaisons = $this->saisonRepository->findBy(['isActive'=> true]);
$allAges = $this->ageRepository->findBy(['isActive'=> true],['age'=>'ASC']);
$allDestinations = $this->countryRepository->findBy(['isActive' => true],['position'=>'ASC','title'=>'ASC']);
$futuresCount = count($this->sejourSessionRepository->findFutures());
$allCities= $this->villeDesservieRepository->findBy(['isActive' => true],['title'=>'ASC']);
$mediaCategorie = $this->mediaCategoryRepository->findOneBy(['name'=>'imageFond']);
$mediaHeadersAll = $this->mediaRepository->findBy(['mediaCategorie' => $mediaCategorie]);
$mediaHeaders = array();
foreach($mediaHeadersAll as $media){
if($media->getFilePath() !== null)
$mediaHeaders[] = $media;
}
$allThemes = $this->themeRepository->findBy(
[
'isActivite' => false,
'isActive' => true
],['title'=>'ASC']
);
$allActivities = $this->themeRepository->findBy(
[
'isActivite' => true,
'isActive' => true
],['title'=>'ASC']
);
$saisonId = $this->frontOptionRepository->findOneBy(['name'=>'saisonActuelle']);
$saison = $this->saisonRepository->findOneBySlug($saisonId->getContent());
$animateurs = $this->frontOptionRepository->findOneBy([
'name' => 'animateurs'
])->getContent();
$destinations = $this->frontOptionRepository->findOneBy([
'name' => 'destinations'
])->getContent();
$themes = $this->frontOptionRepository->findOneBy([
'name' => 'themes'
])->getContent();
$annees = $this->frontOptionRepository->findOneBy([
'name' => 'années'
])->getContent();
$enfants = $this->frontOptionRepository->findOneBy([
'name' => 'enfants'
])->getContent();
$colonies = $this->frontOptionRepository->findOneBy([
'name' => 'colonies'
])->getContent();
$lastArticle = $this->articleRepository->findOneBy(['isUne' => true],['creationDate' => 'DESC']);
$lastNotification = $this->notificationRepository->findBy(['statut' => Notification::STATUT_OPEN],['date'=>'DESC'],10);
//$this->twig->addGlobal('footer_seo', $this->articleRepository->findOneBy(['title'=>'footer']));
$this->twig->addGlobal('last_article', $lastArticle);
$this->twig->addGlobal('seo_params', $seoData);
$this->twig->addGlobal('actualSaison',$saison);
$this->twig->addGlobal('sejour_params', $sejourData);
$this->twig->addGlobal('article_params', $articleData);
$this->twig->addGlobal('banner',$banner);
$this->twig->addGlobal('futuresCount',$futuresCount);
$this->twig->addGlobal('allSaisons', $allSaisons);
$this->twig->addGlobal('allAges', $allAges);
$this->twig->addGlobal('allThemes', $allThemes);
$this->twig->addGlobal('allCities', $allCities);
$this->twig->addGlobal('allDestinations', $allDestinations);
$this->twig->addGlobal('allActivities', $allActivities);
$this->twig->addGlobal('selected', $selected);
$this->twig->addGlobal('animateurs', $animateurs);
$this->twig->addGlobal('colonies', $colonies);
$this->twig->addGlobal('destinations', $destinations);
$this->twig->addGlobal('themes', $themes);
$this->twig->addGlobal('annees', $annees);
$this->twig->addGlobal('enfants', $enfants);
$this->twig->addGlobal('cookiesRules', $cookiRulesFinal);
$this->twig->addGlobal('notifications',$lastNotification);
$this->twig->addGlobal('mediaHeaders',$mediaHeaders);
}
public static function getSubscribedEvents()
{
return [
'kernel.controller' => 'onKernelController',
];
}
}