src/EventSubscriber/KernelSubscriber.php line 110

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Contact\Contact;
  4. use App\Entity\Page;
  5. use App\Repository\PageRepository;
  6. use Doctrine\Common\Annotations\AnnotationReader;
  7. use Doctrine\Common\Annotations\Reader;
  8. use Doctrine\ORM\EntityManager;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Psr\Container\ContainerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. use Twig\Environment;
  17. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  18. class KernelSubscriber implements EventSubscriberInterface
  19. {
  20.     const ANNOTATION_EXCLUDE_CMS "App\Annotation\ExcludeCms";
  21.     /**
  22.      * @var ContainerInterface
  23.      */
  24.     private $container;
  25.     /**
  26.      * @var EntityManager
  27.      */
  28.     private $entityManager;
  29.     /**
  30.      * @var Environment
  31.      */
  32.     private $twig;
  33.     /**
  34.      * @var Breadcrumbs
  35.      */
  36.     private $breadcrumbs;
  37.     /**
  38.      * @var AnnotationReader
  39.      */
  40.     private $annotationReader;
  41.     /**
  42.      * @var PageRepository
  43.      */
  44.     private $pageRepository;
  45.     public function __construct(ContainerInterface $containerEntityManagerInterface $entityManagerEnvironment $twigBreadcrumbs $breadcrumbsReader $annotationReaderPageRepository $pageRepository)
  46.     {
  47.         $this->container $container;
  48.         $this->entityManager $entityManager;
  49.         $this->twig $twig;
  50.         $this->breadcrumbs $breadcrumbs;
  51.         $this->annotationReader $annotationReader;
  52.         $this->pageRepository $pageRepository;
  53.     }
  54.     public static function getSubscribedEvents()
  55.     {
  56.         return [
  57.             KernelEvents::CONTROLLER => [
  58.                 ['initTwigGlobals'5],
  59.                 ['process'10],
  60.                 ['countNotifications'20],
  61.             ]
  62.         ];
  63.     }
  64.     public function initTwigGlobals(){
  65.         $days = [=> "Lundi"=> "Mardi"=> "Mercredi"=> "Jeudi"=> "Vendredi"=> "Samedi"=> "Dimanche"];
  66.         $this->twig->addGlobal("frenchWeekDays"$days);
  67.     }
  68.     public function process(FilterControllerEvent $event)
  69.     {
  70.         $request $event->getRequest();
  71.         /*$url = $request->getUri();
  72.         if (!empty($url) && $url[-1] === '/') {
  73.         }*/
  74.         $routeName $request->attributes->get('_route');
  75.         if (!in_array($routeName, ["frontend_page""frontend_home""frontend_page_parent""frontend_page_parent_parent""frontend_page_parent_payment_return"])) {
  76.             return;
  77.         }
  78.         $slug $request->attributes->get('slug');
  79.         $slugParent $request->attributes->get('slugParent');
  80.         $slugParentParent $request->attributes->get('slugParentParent');
  81.         $slug = ($slug == null) ? "" $slug;
  82.         if ($slugParent) {
  83.             if($slugParentParent){
  84.                 $page $this->pageRepository->findWithParentParent($slug$slugParent$slugParentParent);
  85.             }
  86.             else{
  87.                 $page $this->pageRepository->findWithParent($slug$slugParent);
  88.             }
  89.         }
  90.         else {
  91.             $page $this->pageRepository->findOneBy(['slug' => $slug'isPublished' => 1]);
  92.         }
  93.         if (!$page) {
  94.             throw new NotFoundHttpException("page was not found");
  95.         }
  96.         if ($page->getParent() && !$slugParent) {
  97.             throw new NotFoundHttpException("page was not found");
  98.         }
  99.         $this->twig->addGlobal('dbPage'$page);
  100.         $this->breadcrumbs->addRouteItem("Accueil"'frontend_home');
  101.         if ($slugParentParent != null && $slugParent != null) {
  102.             $this->breadcrumbs->addRouteItem($page->getParent()->getParent()->getTitle(), 'frontend_page', ['slug' => $slugParentParent]);
  103.             $this->breadcrumbs->addRouteItem($page->getParent()->getTitle(), 'frontend_page_parent', ['slug' => $slugParent'slugParent' => $slugParentParent]);
  104.         }
  105.         if ($slugParentParent == null && $slugParent != null) {
  106.             $this->breadcrumbs->addRouteItem($page->getParent()->getTitle(), 'frontend_page', ['slug' => $slugParent]);
  107.         }
  108.         $this->breadcrumbs->addItem($page->getTitle());
  109.         if ($page->getControllerPath() == null) {
  110.             return;
  111.         }
  112.         $controllerName $page->getControllerPath();
  113.         list($class$method) = explode('::'$controllerName2);
  114.         if (!$this->container->has($class)) {
  115.             throw new \LogicException("controller was not found");
  116.         }
  117.         $controller = [$this->container->get($class), $method];
  118.         $request->attributes->set('_controller'$controllerName);
  119.         $request->attributes->set('dbPage'$page);
  120.         $event->setController($controller);
  121.     }
  122.     public function countNotifications(FilterControllerEvent $event)
  123.     {
  124.         $request $event->getRequest();
  125.         if (strpos($request->getRequestUri(), $this->container->getParameter('app.back_office_path')) === false) {
  126.             return;
  127.         }
  128.         $countContactsUntreated $this->entityManager->getRepository(Contact::class)->countByType("untreated");
  129.         $this->twig->addGlobal('totalContactsUntreated'$countContactsUntreated);
  130.     }
  131.     public function parentBreadCrumbs(Page $page)
  132.     {
  133.         if ($parent $page->getParent()) {
  134.             $this->parentBreadCrumbs($parent);
  135.         }
  136.         $this->breadcrumbs->addRouteItem($page->getTitle(), 'frontend_page', ['slug' => $page->getSlug()]);
  137.     }
  138. }