src/Controller/PageController.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\AbstractController;
  4. use App\Entity\Page;
  5. use App\Misc\EntityUrlGenerator;
  6. use App\Misc\StringUtils;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Twig\Environment;
  13. class PageController extends AbstractController
  14. {
  15. public function __construct(
  16. private Environment $twig,
  17. protected MailerInterface $mailer,
  18. private EntityUrlGenerator $entityUrlGenerator,
  19. private RouterInterface $router,
  20. private RequestStack $requestStack,
  21. private EntityManagerInterface $entityManager,
  22. ) {
  23. parent::__construct($mailer, $entityUrlGenerator, $router, $requestStack, $entityManager);
  24. }
  25. public function localPage($ville, $cp)
  26. {
  27. // Debug url routing for city with "-"
  28. while (str_contains($cp, '-')):
  29. $ville .= '-' . $error = strtok($cp, '-');
  30. $cp = str_replace($error . '-', '', $cp);
  31. endwhile;
  32. $page = $this->getPageRepository()->getByMeta('cp', $cp);
  33. if (!$page) {
  34. return $this->throw404();
  35. }
  36. $sanitized = StringUtils::sanitizeString($page->getTitle());
  37. if ($ville != $sanitized) {
  38. return $this->redirectToRoute('public_local_page', array(
  39. 'ville' => $sanitized,
  40. 'cp' => $page->getMeta('cp')
  41. ));
  42. }
  43. $deptRepo = $this->getDepartementRepository();
  44. $departement = $deptRepo->getByCode($page->getMeta('departement'));
  45. $departements = $deptRepo->findBy(['region' => $departement->getRegion()]);
  46. $prestataires = [];
  47. foreach ($departements as $dept) {
  48. $presta = (array) $this->getPrestataireRepository()->getByCodePostal(
  49. $dept->getCode(),
  50. $this->getParameter('group_diagnostics')
  51. );
  52. $prestataires = array_merge($prestataires, $presta);
  53. }
  54. return $this->render('Public/local_page.html.twig', array(
  55. 'page' => $page,
  56. 'departement' => $departement,
  57. 'prestataires' => $prestataires
  58. ));
  59. }
  60. public function localPages()
  61. {
  62. $repo = $this->getPageRepository();
  63. $page = $repo->getByType(Page::TYPE_LOCAL_INDEX);
  64. $pages = $repo->getLocalPagesList();
  65. // Get Prestataires by page
  66. foreach ($pages as $key => $item) {
  67. $prestataires = $this->getPrestataireRepository()->getBySecteur(
  68. $item['code'],
  69. $this->getParameter('group_diagnostics')
  70. );
  71. $pages[$key]['prestataires'] = count($prestataires);
  72. }
  73. return $this->render('Public/local_pages.html.twig', array(
  74. 'page' => $page,
  75. 'pages' => $pages
  76. ));
  77. }
  78. public function localPageDepartement($departement, $cp)
  79. {
  80. $deptRepo = $this->getDepartementRepository();
  81. $departement = $deptRepo->getByCode($cp);
  82. $repo = $this->getPrestataireRepository();
  83. $prestataires = $repo->getBySecteur(
  84. $departement->getCode(),
  85. $this->getParameter('group_diagnostics')
  86. );
  87. $categories = $repo->getCategoriesForAll($prestataires);
  88. return $this->render('Public/local_page_departement.html.twig', array(
  89. 'departement' => $departement,
  90. 'prestataires' => $prestataires,
  91. 'categories' => $categories
  92. ));
  93. }
  94. public function page($url)
  95. {
  96. /** @var Url $url */
  97. $url = $this->getUrlRepository()->findOneBy(array('url' => $url));
  98. if ($url && $url->getRedirectOn()) {
  99. return $this->redirectToRoute('public_page', array(
  100. 'url' => $url->getRedirectOn()->getUrl()
  101. ), Response::HTTP_MOVED_PERMANENTLY);
  102. }
  103. $page = $url ? $url->getPage() : null;
  104. if (!$page) {
  105. return $this->throw404();
  106. }
  107. $categorieTree = $this->getPageRepository()->getCategorieTree();
  108. $groups = array_flip([
  109. 'diagnostics' => 72,
  110. 'expertises' => 73,
  111. 'etudes' => 74,
  112. 'solutions' => 75,
  113. 'energies' => 76
  114. ]);
  115. // echo '<pre>';
  116. // print_r($groups);
  117. // print_r($categorieTree);
  118. // echo '</pre>';
  119. $data = array(
  120. 'page' => $page,
  121. // 'groups' => array_flip($this->container->getParameter('category_groups')),
  122. 'cid' => $this->getCategorieRepository()->getByPageId($page->getId())
  123. );
  124. $template = 'Public/page_'. $page->getType() .'.html.twig';
  125. if ($this->twig->getLoader()->exists($template)) {
  126. return $this->render($template, $data);
  127. } else {
  128. // echo '<pre>';
  129. // print_r($page->getRobots());
  130. // echo '</pre>';
  131. return $this->render('Public/page.html.twig', $data);
  132. }
  133. }
  134. }