src/Controller/Frontend/RubrikController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Application\Artikel\ArtikelFrontendData;
  4. use App\Application\Artikel\ArtikelService;
  5. use App\Application\Artikel\ArtikelServiceQuery;
  6. use App\Entity\Artikel\ArtikelTyp;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. #[Cache(expires: '+10 minutes')]
  13. class RubrikController extends AbstractController
  14. {
  15. #[Route(path: '/uri', name: 'fe.rubrik_uri')]
  16. public function uri(Request $request, ArtikelService $artikelService): Response
  17. {
  18. return $this->createRubrikResponse($request, $artikelService, 'URI', 'Uri');
  19. }
  20. #[Route(path: '/gemeinden', name: 'fe.rubrik_gemeinden')]
  21. public function gemeinden(Request $request, ArtikelService $artikelService): Response
  22. {
  23. return $this->createRubrikResponse($request, $artikelService, 'GEMEINDEN', 'Gemeinden');
  24. }
  25. #[Route(path: '/kultur', name: 'fe.rubrik_kultur')]
  26. public function kultur(Request $request, ArtikelService $artikelService): Response
  27. {
  28. return $this->createRubrikResponse($request, $artikelService, 'KULTUR', 'Kultur');
  29. }
  30. #[Route(path: '/sport', name: 'fe.rubrik_sport')]
  31. public function sport(Request $request, ArtikelService $artikelService): Response
  32. {
  33. return $this->createRubrikResponse($request, $artikelService, 'SPORT', 'Sport');
  34. }
  35. #[Route(path: '/vereine', name: 'fe.rubrik_vereine')]
  36. public function vereine(Request $request, ArtikelService $artikelService): Response
  37. {
  38. return $this->createRubrikResponse($request, $artikelService, 'VEREINE', 'Vereine');
  39. }
  40. #[Route(path: '/spezielles', name: 'fe.rubrik_spezielles')]
  41. public function spezielles(Request $request, ArtikelService $artikelService): Response
  42. {
  43. return $this->createRubrikResponse($request, $artikelService, 'SPEZIELLES', 'Spezielles');
  44. }
  45. #[Route(path: '/uw-plus', name: 'fe.rubrik_uwplus')]
  46. public function uwplus(Request $request, ArtikelService $artikelService): Response
  47. {
  48. // --- Artikel ---
  49. $pageSize = 12;
  50. $pageNumber = $request->query->getInt('pg', 1);
  51. $query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
  52. $query->addFilterOneOfStatusOnly(['publiziert']);
  53. $query->addFilterOneOfTypOnly([ArtikelTyp::ID_AT_3]);
  54. $query->addSort('publish_at', 'desc');
  55. $artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
  56. // --- End Artikel ---
  57. $paging = [
  58. 'page_size' => $query->getPageSize(),
  59. 'page_curr' => $query->getPageNr(),
  60. 'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
  61. 'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
  62. ];
  63. return $this->render('frontend/rubrik/rubrik.html.twig', [
  64. 'h1_titel' => 'UW+',
  65. 'artikels' => $artikels,
  66. 'paging' => $paging,
  67. ]);
  68. }
  69. #[Route(path: '/blaulicht', name: 'fe.rubrik_blaulicht')]
  70. public function blaulicht(Request $request, ArtikelService $artikelService): Response
  71. {
  72. // --- Artikel ---
  73. $pageSize = 12;
  74. $pageNumber = $request->query->getInt('pg', 1);
  75. $query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
  76. $query->addFilterOneOfStatusOnly(['publiziert']);
  77. $query->addFilterOneOfTypOnly([ArtikelTyp::ID_AT_2]);
  78. $query->addSort('publish_at', 'desc');
  79. $artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
  80. // --- End Artikel ---
  81. $paging = [
  82. 'page_size' => $query->getPageSize(),
  83. 'page_curr' => $query->getPageNr(),
  84. 'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
  85. 'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
  86. ];
  87. return $this->render('frontend/rubrik/rubrik.html.twig', [
  88. 'h1_titel' => 'Blaulicht',
  89. 'artikels' => $artikels,
  90. 'paging' => $paging,
  91. ]);
  92. }
  93. private function createRubrikResponse(Request $request, ArtikelService $artikelService, $rubrikId, $h1Titel): Response
  94. {
  95. // Validierung aller möglichen URL-Parameter sonst Fehler (Page- und ApiClientCache Cache Schutz)
  96. if (($urlParams = array_keys($request->query->all())) && ($diff_ = array_diff($urlParams, ['pg']))) {
  97. throw $this->createNotFoundException(sprintf('Nicht konfigurierte URL Parameter abgesetzt: %s', implode(',', $diff_)));
  98. }
  99. // Ende
  100. // --- Artikel ---
  101. $pageSize = 12;
  102. $pageNumber = $request->query->getInt('pg', 1);
  103. $query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
  104. // Keine Polizeimeldungen (Blaulicht)
  105. $query->addFilterOneOfTypOnly([
  106. ArtikelTyp::ID_AT_1,
  107. ArtikelTyp::ID_AT_3,
  108. ArtikelTyp::ID_AT_4,
  109. ]);
  110. $query->addFilterOneOfStatusOnly(['publiziert']);
  111. $query->addFilterOneOfRubrikIdOnly([$rubrikId]);
  112. $query->addSort('publish_at', 'desc');
  113. $artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
  114. // --- End Artikel ---
  115. $paging = [
  116. 'page_size' => $query->getPageSize(),
  117. 'page_curr' => $query->getPageNr(),
  118. 'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
  119. 'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
  120. ];
  121. return $this->render(
  122. 'frontend/rubrik/rubrik.html.twig',
  123. [
  124. 'h1_titel' => $h1Titel,
  125. 'artikels' => $artikels,
  126. 'paging' => $paging,
  127. ]
  128. );
  129. }
  130. }