<?php
namespace App\Controller\Frontend;
use App\Application\Artikel\ArtikelFrontendData;
use App\Application\Artikel\ArtikelService;
use App\Application\Artikel\ArtikelServiceQuery;
use App\Application\Content\ContentFrontendData;
use App\Application\Content\ContentService;
use App\Application\Inserat\InseratService;
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;
#[Route(path: '/marktplatz')]
#[Cache(expires: '+10 minutes')]
class MarktplatzController extends AbstractController
{
#[Route(path: '/events', name: 'fe.marktplatz_events')]
public function artikel(InseratService $inseratService): Response
{
return $this->render('frontend/marktplatz/marktplatz.html.twig', [
'h1_titel' => 'Kommende Events',
'inserate' => $inseratService->veranstaltungen(),
]);
}
#[Route(path: '/immobilien', name: 'fe.marktplatz_immobilien')]
public function immobilien(InseratService $inseratService, ContentService $contentService): Response
{
return $this->render('frontend/marktplatz/marktplatz.html.twig', [
'h1_titel' => 'Immobilien',
'inserate' => $inseratService->immobilien(),
'content' => $contentService->getContentByCode('ACCORDION_IMMOBILIEN', new ContentFrontendData(), true),
]);
}
#[Route(path: '/stellen', name: 'fe.marktplatz_stellen')]
public function stellen(InseratService $inseratService, ContentService $contentService): Response
{
return $this->render('frontend/marktplatz/marktplatz.html.twig', [
'h1_titel' => 'Stellen',
'inserate' => $inseratService->stellen(),
'content' => $contentService->getContentByCode('ACCORDION_STELLEN', new ContentFrontendData(), true),
]);
}
#[Route(path: '/weitere-angebote', name: 'fe.marktplatz_rest')]
public function rest(InseratService $inseratService): Response
{
return $this->render('frontend/marktplatz/marktplatz.html.twig', [
'h1_titel' => 'Weitere Angebote',
'inserate' => $inseratService->rest(),
]);
}
#[Route(path: '/publireportagen', name: 'fe.marktplatz_publireportagen')]
public function publireportagen(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_4]);
$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' => 'Publireportagen',
'artikels' => $artikels,
'paging' => $paging,
]);
}
}