vendor/simpledot/cms-bundle/AWCmsBundle/Controller/FrontController.php line 324

Open in your IDE?
  1. <?php
  2. /**
  3.  * File FrontController.php.
  4.  *
  5.  * @package   AWCmsBundle\Controller
  6.  * @author    Fabien UNG
  7.  * @since     10/12/2015 16:58
  8.  * @version   1.0.0
  9.  * @copyright Copyright (c) 2015, Fabien UNG
  10.  */
  11. namespace AWCmsBundle\Controller;
  12. use AWCmsBundle\Element\ElementFactory;
  13. use AWCmsBundle\Entity\Banner;
  14. use AWCmsBundle\Entity\Element\Element;
  15. use AWCmsBundle\Entity\FlashInfo;
  16. use AWCmsBundle\Entity\FlashInfoConfiguration;
  17. use AWCmsBundle\Entity\Page;
  18. use AWCmsBundle\Entity\PageVersion;
  19. use AWCmsBundle\Entity\PopIn;
  20. use AWCmsBundle\Entity\Site;
  21. use AWCmsBundle\Entity\Slug\Slug;
  22. use AWCmsBundle\EventListener\CacheListener;
  23. use AWCmsBundle\Exception\CmsException;
  24. use AWCmsBundle\Manager\BlocManager;
  25. use AWCmsBundle\Manager\MenuTreeManager;
  26. use AWCmsBundle\Manager\PageManager;
  27. use AWCmsBundle\Manager\RedirectionManager;
  28. use AWCmsBundle\Manager\SiteManager;
  29. use AWCmsBundle\Manager\SlugManager;
  30. use AWCmsBundle\Repository\FlashInfoRepository;
  31. use AWCmsBundle\Manager\SitemapManager;
  32. use AWCmsBundle\Security\CurrentUserProvider;
  33. use AWCmsBundle\Slug\SlugRedirector;
  34. use Doctrine\ORM\EntityManagerInterface;
  35. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  36. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  37. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  38. use Symfony\Component\HttpFoundation\RedirectResponse;
  39. use Symfony\Component\HttpFoundation\Request;
  40. use Symfony\Component\HttpFoundation\Response;
  41. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  42. use Symfony\Component\Routing\Annotation\Route;
  43. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  44. /**
  45.  * Class FrontController
  46.  * @package AWCmsBundle\Controller
  47.  */
  48. class FrontController extends AbstractController
  49. {
  50.     /**
  51.      * @Route("/robots.txt", name="_robots")
  52.      * @param SiteManager $siteManager
  53.      * @return Response
  54.      */
  55.     public function robotsAction(SiteManager $siteManager)
  56.     {
  57.         $site $siteManager->getSite();
  58.         if(!$site){
  59.             throw new NotFoundHttpException();
  60.         }
  61.         
  62.         $siteMap 'Sitemap: '.$this->generateUrl('_sitemap', [], UrlGeneratorInterface::ABSOLUTE_URL);
  63.         $response = new Response($site->getRobot($siteMap));
  64.         $response->headers->set('Content-Type''text/plain');
  65.         return $response;
  66.     }
  67.     /**
  68.      * @Route("/sitemap.xml",name="_sitemap")
  69.      * @param SiteManager $siteManager
  70.      * @param SitemapManager $sitemapManager
  71.      * @return Response
  72.      */
  73.     public function sitemapAction(SiteManager $siteManagerSitemapManager $sitemapManager)
  74.     {
  75.         $site $siteManager->getSite();
  76.         $xml $sitemapManager->generateXml($site);
  77.         $response = new Response($xml);
  78.         $response->headers->set('Content-Type','text/xml');
  79.         return $response;
  80.     }
  81.     /**
  82.      * @Route("/page/{page}",name="show_page")
  83.      * @param MenuTreeManager $menuTreeManager
  84.      * @param SiteManager $siteManager
  85.      * @param BlocManager $blocManager
  86.      * @param Request $request
  87.      * @param Page $page
  88.      * @param PageManager $pageManager
  89.      * @param CurrentUserProvider $currentUserProvider
  90.      * @param null $pageVersion
  91.      * @return array|RedirectResponse|Response
  92.      * @Template
  93.      */
  94.     public function pageAction(MenuTreeManager $menuTreeManager,
  95.                                SiteManager $siteManager,
  96.                                BlocManager $blocManager,
  97.                                Request $request,
  98.                                Page $page,
  99.                                PageManager $pageManager,
  100.                                CurrentUserProvider $currentUserProvider,
  101.                                $pageVersion null
  102.     )
  103.     {
  104.         $this->get('twig')->addGlobal('current_page'$page);
  105.     
  106.         $isViewer $siteManager->isViewer();
  107.         $isPreview $siteManager->isPreview();
  108.         $site $siteManager->getSite();
  109.         $user $currentUserProvider->get();
  110.         if($user === null and $site === null){
  111.             return $this->redirectToRoute('user_security_admin_login');
  112.         } else {
  113.             if($pageVersion){
  114.                 $pageVersion $this->getDoctrine()->getRepository(PageVersion::class)->find($pageVersion);
  115.             }
  116.             elseif($isViewer or $isPreview){
  117.                 $pageVersion $page->getDraftVersion();
  118.             }
  119.             else{
  120.                 $pageVersion $page->getPublishedVersion();
  121.             }
  122.             $blocsTemplates = [];
  123.             foreach ($pageVersion->getBlocs() as $bloc) {
  124.                 $blocsTemplates[] = $blocManager->render($bloc$siteManager->isViewer(), $siteManager->isPreview());
  125.             }
  126.             $breadcrumb $menuTreeManager->getBreadcrumb($page->getMenuTree());
  127.             /** @var Banner $banner */
  128.             $banner $this->getDoctrine()->getRepository(Banner::class)->findOneBy(['site' => $site'typePage' => $page->getTypePage()]);
  129.             $images = [];
  130.             if ($banner && $banner->getTypeBanner() === 'DP') {
  131.                 $images $banner->getImages();
  132.             }
  133.             $pageManager->setPage($page);
  134.             return [
  135.                 'site'  => $site,
  136.                 'page'  => $page,
  137.                 'isViewer' => $isViewer,
  138.                 'isPreview' => $siteManager->isPreview(),
  139.                 'blocsTemplates' => $blocsTemplates,
  140.                 'breadcrumb' => $breadcrumb,
  141.                 'images' => $images,
  142.                 'banner' => $banner,
  143.                 'status_code' => ($page === $site->getRedirectPageOn404()) ? 404 200
  144.             ];
  145.         }
  146.     }
  147.     
  148.     public function flashMessageAction(){
  149.         return $this->render('@AWCms/front/flash_message.html.twig');
  150.     }
  151.     
  152.     public function flashInfoAction(EntityManagerInterface $emPageManager $pageManagerSiteManager $siteManager){
  153.         /** @var FlashInfoConfiguration $configuration */
  154.         $configuration $em->getRepository(FlashInfoConfiguration::class)->findOneBy(['site' => $siteManager->getSite()->getId()]);
  155.         $flashInfos = [];
  156.         
  157.         if($configuration){
  158.             if($configuration->isOnlyOnHomepage() and $pageManager->getPage() and $pageManager->getPage()->isHomePage()){
  159.                 $flashInfos $em->getRepository(FlashInfo::class)->findByActualDateAndEnabled();
  160.             }
  161.             elseif(!$configuration->isOnlyOnHomepage()){
  162.                 $flashInfos $em->getRepository(FlashInfo::class)->findByActualDateAndEnabled();
  163.             }
  164.         }
  165.         return $this->render('@AWCms/front/flash_info.html.twig', [
  166.             'flashInfos' => $flashInfos,
  167.             'configuration' => $configuration
  168.         ]);
  169.     }
  170.     
  171.     public function popInAction(EntityManagerInterface $emPageManager $pageManagerSiteManager $siteManager){
  172.         /** @var PopIn $configuration */
  173.         $popIn $em->getRepository(PopIn::class)->findOneBy(['site' => $siteManager->getSite()->getId()]);
  174.         $render false;
  175.         
  176.         if($popIn and $popIn->getStatus() == PopIn::STATUS_ONLINE){
  177.             if($popIn->getDisplayZone() == PopIn::DISPLAY_ZONE_HOME_PAGE and $pageManager->getPage() and $pageManager->getPage()->isHomePage()){
  178.                 $render true;
  179.             }
  180.             
  181.             if($popIn->getDisplayZone() == PopIn::DISPLAY_ZONE_ALL_PAGES){
  182.                 $render true;
  183.             }
  184.         }
  185.         return $this->render('@AWCms/front/pop_in.html.twig', [
  186.             'popIn' => $popIn,
  187.             'render' => $render
  188.         ]);
  189.     }
  190.     
  191.     /**
  192.      * @param Page $page
  193.      * @Route("/style/page{page}.css", name="awcms_page_css")
  194.      * @return Response
  195.      */
  196.     public function styleAction(Page $page)
  197.     {
  198.         $response = new Response(
  199.             $this->render('@AWCms/front/style.css.twig',
  200.                 ['page' => $page])->getContent(),
  201.             200,
  202.             array('Content-Type' => 'text/css')
  203.         );
  204.         $response->setMaxAge(300);
  205.         $response->headers->addCacheControlDirective('must-revalidate'false);
  206.         $response->headers->addCacheControlDirective('public'true);
  207.         $response->headers->set(CacheListener::NO_AUTO_CACHE_CONTROL_HEADER'true');
  208.         return $response;
  209.     }
  210.     /**
  211.      * @param Page $page
  212.      * @Route("/js/page{page}.js", name="awcms_page_js")
  213.      * @return Response
  214.      */
  215.     public function javaScriptAction(Page $page)
  216.     {
  217.         $response = new Response(
  218.             $this->render('@AWCms/front/java_script.js.twig',
  219.                 ['page' => $page])->getContent(),
  220.             200,
  221.             array('Content-Type' => 'text/javascript')
  222.         );
  223.         $response->setMaxAge(300);
  224.         $response->headers->addCacheControlDirective('must-revalidate'false);
  225.         $response->headers->addCacheControlDirective('public'true);
  226.         $response->headers->set(CacheListener::NO_AUTO_CACHE_CONTROL_HEADER'true');
  227.         return $response;
  228.     }
  229.     /**
  230.      * @Route("/render/{element}", name="awcms_front_element_render", requirements={"element"="\d+"}, options={"expose"=true})
  231.      */
  232.     public function renderAction(ElementFactory $elementFactoryElement $element)
  233.     {
  234.         $elementManager $elementFactory->getManager($element->getType());
  235.         return new Response($elementManager->render($elementfalsefalse));
  236.     }
  237.     
  238.     /**
  239.      * Removing / at the end of url ex: /fr/contact/ -> /fr/contact
  240.      * @Route("/{url}", name="remove_trailing_slash",
  241.      *     requirements={"url" = "^((?!admin).)*\/$"}, methods={"GET"})
  242.      */
  243.     public function removeTrailingSlashAction(Request $request)
  244.     {
  245.         $pathInfo $request->getPathInfo();
  246.         $requestUri $request->getRequestUri();
  247.         
  248.         $url str_replace($pathInfortrim($pathInfo' /'), $requestUri);
  249.         
  250.         return $this->redirect($url301);
  251.     }
  252.     
  253.     /**
  254.      * @Route("/", name="show_home_page")
  255.      * @Route(
  256.      *     "/{slug}",
  257.      *     name="awcms_front_slug",
  258.      *     requirements={"slug"="^(?!(admin|api))([a-zA-Z0-9-/]*)"},
  259.      *     options={"expose"=true}
  260.      * )
  261.      * @Route(
  262.      *     "/{uri}",
  263.      *     name="awcms_front_no_locale",
  264.      *     requirements={"uri"="^(?!(([a-z]{2}\/admin)|api|_)).+"},
  265.      *     options={"i18n"=false}
  266.      * )
  267.      * @ParamConverter("slug", options={"mapping":{"slug":"slug"}})
  268.      * @param SiteManager $siteManager
  269.      * @param SlugManager $slugManager
  270.      * @param Request $request
  271.      * @param         $slug
  272.      * @return Response
  273.      */
  274.     public function slugAction(
  275.         SiteManager $siteManager,
  276.         SlugManager $slugManager,
  277.         PageManager $pageManager,
  278.         Request $request,
  279.         $slug null$uri null)
  280.     {
  281.         if(!$siteManager->getSite()){
  282.             return $this->redirectToRoute('user_security_admin_login');
  283.         }
  284.     
  285.         // show homepage
  286.         if($slug === null and $uri === null){
  287.             $page $pageManager->getHomePage($siteManager->getSite());
  288.             $slugEntity $page->getSlugEntity();
  289.             return $slugManager->forwardSlug($slugEntity$request);
  290.         }
  291.     
  292.         if($slug === null and $uri !== null){
  293.             throw new NotFoundHttpException();
  294.         }
  295.         
  296.         /** @var Slug|null $slugEntity */
  297.         $slugEntity $slugManager
  298.             ->findOneBySlugSiteAndLocale($slug$siteManager->getSite(), $request->getLocale());
  299.         if(null === $slugEntity){
  300.             throw new NotFoundHttpException();
  301.         }
  302.         
  303.         return $slugManager->forwardSlug($slugEntity$request);
  304.     }
  305. }