<?php
namespace App\Controller\Frontend;
use App\Application\Artikel\ArtikelFrontendData;
use App\Application\Artikel\ArtikelService;
use App\Application\Artikel\ArtikelServiceQuery;
use App\Entity\Artikel\ArtikelTyp;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Cache(expires: '+10 minutes')]
class RubrikController extends AbstractController
{
#[Route(path: '/uri', name: 'fe.rubrik_uri')]
public function uri(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'URI', 'Uri');
}
#[Route(path: '/gemeinden', name: 'fe.rubrik_gemeinden')]
public function gemeinden(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'GEMEINDEN', 'Gemeinden');
}
#[Route(path: '/kultur', name: 'fe.rubrik_kultur')]
public function kultur(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'KULTUR', 'Kultur');
}
#[Route(path: '/sport', name: 'fe.rubrik_sport')]
public function sport(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'SPORT', 'Sport');
}
#[Route(path: '/vereine', name: 'fe.rubrik_vereine')]
public function vereine(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'VEREINE', 'Vereine');
}
#[Route(path: '/spezielles', name: 'fe.rubrik_spezielles')]
public function spezielles(Request $request, ArtikelService $artikelService): Response
{
return $this->createRubrikResponse($request, $artikelService, 'SPEZIELLES', 'Spezielles');
}
#[Route(path: '/uw-plus', name: 'fe.rubrik_uwplus')]
public function uwplus(Request $request, ArtikelService $artikelService): Response
{
// --- Artikel ---
$pageSize = 12;
$pageNumber = $request->query->getInt('pg', 1);
$query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
$query->addFilterOneOfStatusOnly(['publiziert']);
$query->addFilterOneOfTypOnly([ArtikelTyp::ID_AT_3]);
$query->addSort('publish_at', 'desc');
$artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
// --- End Artikel ---
$paging = [
'page_size' => $query->getPageSize(),
'page_curr' => $query->getPageNr(),
'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
];
return $this->render('frontend/rubrik/rubrik.html.twig', [
'h1_titel' => 'UW+',
'artikels' => $artikels,
'paging' => $paging,
]);
}
#[Route(path: '/blaulicht', name: 'fe.rubrik_blaulicht')]
public function blaulicht(Request $request, ArtikelService $artikelService): Response
{
// --- Artikel ---
$pageSize = 12;
$pageNumber = $request->query->getInt('pg', 1);
$query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
$query->addFilterOneOfStatusOnly(['publiziert']);
$query->addFilterOneOfTypOnly([ArtikelTyp::ID_AT_2]);
$query->addSort('publish_at', 'desc');
$artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
// --- End Artikel ---
$paging = [
'page_size' => $query->getPageSize(),
'page_curr' => $query->getPageNr(),
'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
];
return $this->render('frontend/rubrik/rubrik.html.twig', [
'h1_titel' => 'Blaulicht',
'artikels' => $artikels,
'paging' => $paging,
]);
}
private function createRubrikResponse(Request $request, ArtikelService $artikelService, $rubrikId, $h1Titel): Response
{
// Validierung aller möglichen URL-Parameter sonst Fehler (Page- und ApiClientCache Cache Schutz)
if (($urlParams = array_keys($request->query->all())) && ($diff_ = array_diff($urlParams, ['pg']))) {
throw $this->createNotFoundException(sprintf('Nicht konfigurierte URL Parameter abgesetzt: %s', implode(',', $diff_)));
}
// Ende
// --- Artikel ---
$pageSize = 12;
$pageNumber = $request->query->getInt('pg', 1);
$query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
// Keine Polizeimeldungen (Blaulicht)
$query->addFilterOneOfTypOnly([
ArtikelTyp::ID_AT_1,
ArtikelTyp::ID_AT_3,
ArtikelTyp::ID_AT_4,
]);
$query->addFilterOneOfStatusOnly(['publiziert']);
$query->addFilterOneOfRubrikIdOnly([$rubrikId]);
$query->addSort('publish_at', 'desc');
$artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
// --- End Artikel ---
$paging = [
'page_size' => $query->getPageSize(),
'page_curr' => $query->getPageNr(),
'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
];
return $this->render(
'frontend/rubrik/rubrik.html.twig',
[
'h1_titel' => $h1Titel,
'artikels' => $artikels,
'paging' => $paging,
]
);
}
}