src/Controller/IndexController.php line 510

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use App\Entity\BusStop;
  5. use App\Entity\Inspiration;
  6. use App\Entity\Page;
  7. use App\Entity\PageSection;
  8. use App\Repository\BusStopRepository;
  9. use App\Repository\InspirationRepository;
  10. use App\Repository\OpinionRepository;
  11. use App\Repository\OutdoorSafetyRepository;
  12. use App\Repository\PageRepository;
  13. use App\Repository\RouteRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Exception;
  16. use JMS\Serializer\SerializerInterface;
  17. use Knp\Component\Pager\PaginatorInterface;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\RedirectResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\RequestStack;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\HttpFoundation\Session\Session;
  25. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  28. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  29. use Symfony\Component\Validator\Validator\ValidatorInterface;
  30. use Symfony\Contracts\Translation\TranslatorInterface;
  31. class IndexController extends BaseController
  32. {
  33.     private PageRepository $pageRepository;
  34.     public function __construct(EntityManagerInterface $emSerializerInterface $serializerTokenStorageInterface $tokenStorageRequestStack $requestStackPaginatorInterface $paginatorValidatorInterface $validatorUserPasswordEncoderInterface $passwordEncoderPageRepository $pageRepository)
  35.     {
  36.         parent::__construct($em$serializer$tokenStorage$requestStack$paginator$validator$passwordEncoder);
  37.         $this->pageRepository $pageRepository;
  38.     }
  39.     /**
  40.      * @Route("/", name="app_homepage", methods={"GET"})
  41.      */
  42.     public function index(RouteRepository $routeRepositoryOpinionRepository $opinionRepositoryOutdoorSafetyRepository $outdoorSafetyRepository): Response
  43.     {
  44.         list($domain$locale) = $this->getRequestParameter();
  45.         /** @var Page $pageObject */
  46.         $pageObject $this->pageRepository->getPageByParameterByUrl('homepage'$domain$locale);
  47.         if (!$pageObject) {
  48.             throw $this->createNotFoundException();
  49.         }
  50.         $seoPage = [];
  51.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  52.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  53.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  54.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  55.         return $this->render('main/index.html.twig', [
  56.             'locale' => $locale,
  57.             'seo' => $seoPage,
  58.             'page' => $pageObject,
  59.             'travelMenu' => $this->pageRepository->getPageByListed($domain$locale4, ['p.id''DESC']),
  60.             'routes' => $routeRepository->findActive(),
  61.             'opinions' => $opinionRepository->findAllSortedBySortPosition(),
  62.             'outdoorSafety' => $outdoorSafetyRepository->findByPageTypeAndLang($domain$localetrue),
  63.         ]);
  64.     }
  65.     /**
  66.      * @Route("/sitemap.xml", name="main_sitemap", defaults={"_format"="xml"})
  67.      * @Template()
  68.      */
  69.     public function sitemapAction(Request $requestInspirationRepository $inspirationRepository): Response
  70.     {
  71.         list($domain$locale) = $this->getRequestParameter();
  72.         $em $this->getDoctrine()->getManager();
  73.         $urls = [];
  74.         $scheme $request->getScheme();
  75.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/'];
  76.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/bus-stops'];
  77.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/term-and-conditions'];
  78.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/privacy-policy'];
  79.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/faq'];
  80.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/about-us'];
  81.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/contact'];
  82.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/signin'];
  83.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/registration'];
  84.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/en/inspirations'];
  85.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/bus-stops'];
  86.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/term-and-conditions'];
  87.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/privacy-policy'];
  88.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/faq'];
  89.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/about-us'];
  90.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/contact'];
  91.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/signin'];
  92.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/registration'];
  93.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/de/inspirations'];
  94.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/bus-stops'];
  95.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/term-and-conditions'];
  96.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/privacy-policy'];
  97.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/faq'];
  98.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/about-us'];
  99.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/contact'];
  100.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/signin'];
  101.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/registration'];
  102.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/pt/inspirations'];
  103.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/bus-stops'];
  104.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/term-and-conditions'];
  105.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/privacy-policy'];
  106.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/faq'];
  107.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/about-us'];
  108.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/contact'];
  109.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/signin'];
  110.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/registration'];
  111.         $urls[] = ['loc' => $scheme '://' $domain->getName() . '/fr/inspirations'];
  112.         $inspirations $inspirationRepository->findActive();
  113.         /** @var Inspiration $inspiration */
  114.         foreach ($inspirations as $inspiration) {
  115.             $locale $inspiration->getDomainLang()->getSlug();
  116.             $urls[] = ['loc' => $scheme '://' $domain->getName() . '/' $locale '/inspiration/' $inspiration->getSlug()];
  117.         }
  118.         $pages $this->pageRepository->findAll();
  119.         /** @var Page $page */
  120.         foreach ($pages as $page) {
  121.             if ($page->getId() > 23) {
  122.                 $locale $page->getDomainLang()->getSlug();
  123.                 $urls[] = ['loc' => $scheme '://' $domain->getName() . '/' $locale '/' $page->getSlug()];
  124.             }
  125.         }
  126.         $response = new Response($this->renderView('main/sitemap.html.twig', ['urls' => $urls]), 200);
  127.         $response->headers->set('Content-Type''text/xml');
  128.         return $response;
  129.     }
  130.     /**
  131.      * @Route("/bus-stops", name="app_bus_stop", methods={"GET"})
  132.      */
  133.     public function busStops(): Response
  134.     {
  135.         list($domain$locale) = $this->getRequestParameter();
  136.         /** @var Page $pageObject */
  137.         $pageObject $this->pageRepository->getPageByParameterByUrl('bus-stops'$domain$locale);
  138.         if (!$pageObject) {
  139.             throw $this->createNotFoundException();
  140.         }
  141.         $seoPage = [];
  142.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  143.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  144.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  145.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  146.         return $this->render('main/bus-stops.html.twig', [
  147.             'locale' => $locale,
  148.             'seo' => $seoPage,
  149.             'page' => $pageObject
  150.         ]);
  151.     }
  152.     
  153.     //    /**
  154.     //     * @Route("/contact", name="app_contact", methods={"GET"})
  155.     //     */
  156.     //    public function contact(): Response
  157.     //    {
  158.     //        list($domain, $locale) = $this->getRequestParameter();
  159.     //
  160.     //        /** @var Page $pageObject */
  161.     //        $pageObject = $this->pageRepository->getPageByParameterByUrl('contact', $domain, $locale);
  162.     //        if (!$pageObject) {
  163.     //            throw $this->createNotFoundException();
  164.     //        }
  165.     //
  166.     //        var_dump($pageObject->getId());
  167.     //        die("ELLO");
  168.     //
  169.     //        $seoPage = [];
  170.     //        $seoPage['meta-title'] = $pageObject->getMetaTitle();
  171.     //        $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  172.     //        $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  173.     //        $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  174.     //
  175.     //        return $this->render('main/contact.html.twig', [
  176.     //            'locale' => $locale,
  177.     //            'seo' => $seoPage,
  178.     //            'page' => $pageObject
  179.     //        ]);
  180.     //    }
  181.     /**
  182.      * @Route("/term-and-conditions", name="app_term_conditions", methods={"GET"})
  183.      */
  184.     public function termConditions(): Response
  185.     {
  186.         list($domain$locale) = $this->getRequestParameter();
  187.         /** @var Page $pageObject */
  188.         $pageObject $this->pageRepository->getPageByParameterByUrl('terms-and-conditions'$domain$locale);
  189.         if (!$pageObject) {
  190.             throw $this->createNotFoundException();
  191.         }
  192.         $seoPage = [];
  193.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  194.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  195.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  196.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  197.         return $this->render('main/termConditions.html.twig', [
  198.             'locale' => $locale,
  199.             'seo' => $seoPage,
  200.             'page' => $pageObject
  201.         ]);
  202.     }
  203.     /**
  204.      * @Route("/privacy-policy", name="app_privacy_policy", methods={"GET"})
  205.      */
  206.     public function privacyPolicy(): Response
  207.     {
  208.         list($domain$locale) = $this->getRequestParameter();
  209.         /** @var Page $pageObject */
  210.         $pageObject $this->pageRepository->getPageByParameterByUrl('privacy-policy'$domain$locale);
  211.         if (!$pageObject) {
  212.             throw $this->createNotFoundException();
  213.         }
  214.         $seoPage = [];
  215.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  216.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  217.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  218.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  219.         return $this->render('main/privacyPolicy.html.twig', [
  220.             'locale' => $locale,
  221.             'seo' => $seoPage,
  222.             'page' => $pageObject
  223.         ]);
  224.     }
  225.     /**
  226.      * @Route("/inspirations", name="app_inspirations", methods={"GET"})
  227.      */
  228.     public function inspirationsList(InspirationRepository $inspirationRepository): Response
  229.     {
  230.         list($domain$locale) = $this->getRequestParameter();
  231.         /** @var Page $pageObject */
  232.         $pageObject $this->pageRepository->getPageByParameterByUrl('inspirations'$domain$locale);
  233.         if (!$pageObject) {
  234.             throw $this->createNotFoundException();
  235.         }
  236.         $inspirations $inspirationRepository->getItemsByParameters($domain$locale);
  237.         $seoPage = [];
  238.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  239.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  240.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  241.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  242.         return $this->render('main/inspirationsList.html.twig', [
  243.             'locale' => $locale,
  244.             'seo' => $seoPage,
  245.             'page' => $pageObject,
  246.             'inspirations' => $inspirations
  247.         ]);
  248.     }
  249.     /**
  250.      * @Route("/travel-info", name="app_travel_info", methods={"GET"})
  251.      */
  252.     public function articleList(Request $request): Response
  253.     {
  254.         $page $request->query->getInt('page'1);
  255.         $limit $request->query->getInt('limit'10);
  256.         list($domain$locale) = $this->getRequestParameter();
  257.         /** @var Page $pageObject */
  258.         $pageObject $this->pageRepository->getPageByParameterByUrl('inspirations'$domain$locale);
  259.         if (!$pageObject) {
  260.             throw $this->createNotFoundException();
  261.         }
  262.         $seoPage = [];
  263.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  264.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  265.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  266.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  267.         $pages $this->pageRepository->getPageByListed($domain$locale);
  268.         $pagination $this->paginator->paginate(
  269.             $pages,
  270.             $page,
  271.             $limit
  272.         );
  273.         return $this->render('main/articleList.html.twig', [
  274.             'locale' => $locale,
  275.             'seo' => $seoPage,
  276.             'page' => $pageObject,
  277.             'pages' => $pagination
  278.         ]);
  279.     }
  280.     /**
  281.      * @Route("/hike-trails", name="app_hike_trails", methods={"GET"})`
  282.      */
  283.     public function hikeTrails(Request $request): Response
  284.     {
  285.         $page $request->query->getInt('page'1);
  286.         $limit $request->query->getInt('limit'10);
  287.         list($domain$locale) = $this->getRequestParameter();
  288.         /** @var Page $pageObject */
  289.         $pageObject $this->pageRepository->getPageByParameterByUrl('hike-trails'$domain$locale);
  290.         if (!$pageObject) {
  291.             throw $this->createNotFoundException();
  292.         }
  293.         $seoPage = [];
  294.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  295.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  296.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  297.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  298.         $pages $this->pageRepository->getPageIsHikeTrails($domain$locale);
  299.         $pagination $this->paginator->paginate(
  300.             $pages,
  301.             $page,
  302.             $limit
  303.         );
  304.         return $this->render('main/hikeTrails.html.twig', [
  305.             'locale' => $locale,
  306.             'seo' => $seoPage,
  307.             'page' => $pageObject,
  308.             'pages' => $pagination
  309.         ]);
  310.     }
  311.     /**
  312.      * @Route("/inspiration/{slug}", name="app_inspiration_item", methods={"GET"})
  313.      */
  314.     public function inspirationsItem(Inspiration $inspiration): Response
  315.     {
  316.         list($domain$locale) = $this->getRequestParameter();
  317.         $seoPage = [];
  318.         $seoPage['meta-title'] = $inspiration->getMetaTitle();
  319.         $seoPage['meta-desc'] = $inspiration->getMetaDescription();
  320.         ;
  321.         $seoPage['meta-keywords'] = $inspiration->getMetaKeywords();
  322.         $seoPage['nofollow'] = $inspiration->getInformationNoFollow();
  323.         return $this->render('main/inspirationsItem.html.twig', [
  324.             'locale' => $locale,
  325.             'seo' => $seoPage,
  326.             'inspiration' => $inspiration
  327.         ]);
  328.     }
  329.     /**
  330.      * @Route("/faq", name="app_faq", methods={"GET"})
  331.      */
  332.     public function faq(): Response
  333.     {
  334.         list($domain$locale) = $this->getRequestParameter();
  335.         /** @var Page $pageObject */
  336.         $pageObject $this->pageRepository->getPageByParameterByUrl('faq'$domain$locale);
  337.         if (!$pageObject) {
  338.             throw $this->createNotFoundException();
  339.         }
  340.         $seoPage = [];
  341.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  342.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  343.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  344.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  345.         return $this->render('main/faq.html.twig', [
  346.             'locale' => $locale,
  347.             'seo' => $seoPage,
  348.             'page' => $pageObject
  349.         ]);
  350.     }
  351.     /**
  352.      * @Route("/about-us", name="app_about_us", methods={"GET"})
  353.      */
  354.     public function aboutUs(): Response
  355.     {
  356.         list($domain$locale) = $this->getRequestParameter();
  357.         /** @var Page $pageObject */
  358.         $pageObject $this->pageRepository->getPageByParameterByUrl('about-us'$domain$locale);
  359.         if (!$pageObject) {
  360.             throw $this->createNotFoundException();
  361.         }
  362.         $seoPage = [];
  363.         $seoPage['meta-title'] = $pageObject->getMetaTitle();
  364.         $seoPage['meta-desc'] = $pageObject->getMetaDescription();
  365.         $seoPage['meta-keywords'] = $pageObject->getMetaKeywords();
  366.         $seoPage['nofollow'] = $pageObject->getInformationNoFollow();
  367.         return $this->render('main/about-us.html.twig', [
  368.             'locale' => $locale,
  369.             'seo' => $seoPage,
  370.             'page' => $pageObject
  371.         ]);
  372.     }
  373.     /**
  374.      * @Route("/transfer/{slug}", name="app_transfer", methods={"GET"})
  375.      */
  376.     public function transfer(string $slugRouteRepository $routeRepositoryRequest $request): Response
  377.     {
  378.         $route $routeRepository->findOneBySlug($slug);
  379.         list($domain$locale) = $this->getRequestParameter();
  380.         
  381.         if (!$route) {
  382.             throw $this->createNotFoundException('The route does not exist');
  383.         }
  384.         return $this->render('transfer/show.html.twig', [
  385.             'transfer' => $route,
  386.             'seo' => $route->getSeoArray(),
  387.             'og' => $route->getOgArray(),
  388.             'locale' => $locale,
  389.         ]);
  390.     }
  391.     /**
  392.      * @Route("/outdoor-safety", name="app_outdoor_safety", methods={"GET"})
  393.      */
  394.     public function outdoorSafety(OutdoorSafetyRepository $outdoorSafetyRepository): Response
  395.     {
  396.         list($domain$locale) = $this->getRequestParameter();
  397.         /** @var Page $pageObject */
  398.         $pageObject $this->pageRepository->getPageByParameterByUrl('outdoor-safety'$domain$locale);
  399.         if (!$pageObject) {
  400.             throw $this->createNotFoundException();
  401.         }
  402.         return $this->render('outdoorSafety/index.html.twig', [
  403.            'page' => $pageObject,
  404.            'seo' => $pageObject->getSeoArray(),
  405.            'og' => $pageObject->getOgArray(),
  406.            'locale' => $locale,
  407.            'outdoorSafetyList' => $outdoorSafetyRepository->findByPageTypeAndLang($domain$localefalse),
  408.         ]);
  409.     }
  410.    
  411.     /**
  412.      * @Route("/webapi/routes", name="api_routes_list", methods={"GET"})
  413.      */
  414.     public function apiRoutes(BusStopRepository $busStopRepository): JsonResponse
  415.     {
  416.         $results = [
  417.             'startStops' => $busStopRepository->getBusStopsNamesByTypes([BusStop::TYPE_FIRST_STOPBusStop::TYPE_OTHER]),
  418.             'endStops' => $busStopRepository->getBusStopsNamesByTypes([BusStop::TYPE_TRIP_START]),
  419.         ];
  420.         return new JsonResponse($resultsResponse::HTTP_OK, []);
  421.     }
  422.     /**
  423.      * @Route("/{slug}", name="app_page_item", methods={"GET"}, requirements={"slug"="[A-Za-z0-9\-]+"}, priority=-255)
  424.      */
  425.     public function pageItem(Page $page): Response
  426.     {
  427.         if (!$page->isVisible()) {
  428.             throw $this->createNotFoundException('Page not found');
  429.         }
  430.         list($domain$locale) = $this->getRequestParameter();
  431.         $seoPage = [];
  432.         $seoPage['meta-title'] = $page->getMetaTitle();
  433.         $seoPage['meta-desc'] = $page->getMetaDescription();
  434.         $seoPage['meta-keywords'] = $page->getMetaKeywords();
  435.         $seoPage['nofollow'] = $page->getInformationNoFollow();
  436.         return $this->render('main/pageItem.html.twig', [
  437.             'locale' => $locale,
  438.             'seo' => $seoPage,
  439.             'page' => $page,
  440.             'travelMenu' => $this->pageRepository->getPageByListed($domain$locale10, ['p.id''DESC']),
  441.         ]);
  442.     }
  443.     /**
  444.      * @Route("/{slug}", name="language_redirect", priority=-256)
  445.      */
  446.     public function redirectIfNoLanguagePrefix(
  447.         Request $request,
  448.         string $slug
  449.     ): Response {
  450.         $slug $request->getRequestUri();
  451.         $uriParts explode('/'$slug);
  452.         $firstPart $uriParts[0] ?? '';
  453.         
  454.         if (!strlen($firstPart) !== && count($uriParts) > 1) {
  455.             return new RedirectResponse('/en' $slug301);
  456.         }
  457.         throw new NotFoundHttpException('Page not found');
  458.     }
  459. }