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

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