<?php
namespace App\Controller\Front;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use App\Repository\Banner\BannerRepository;
use App\Repository\Article\EventRepository;
use App\Repository\Article\CompetitionRepository;
use App\Entity\Article\Event;
class EventController extends AbstractController
{
/** @var BannerRepository */
private $bannerRepository;
/** @var EventRepository */
private $eventRepository;
/** @var CompetitionRepository */
private $competitionRepository;
/** @var SessionInterface */
private $session;
/** @var string $theme */
private $theme;
/**
* @param BannerRepository $bannerRepository
* @param Session $session
*/
public function __construct(BannerRepository $bannerRepository, EventRepository $eventRepository, CompetitionRepository $competitionRepository, SessionInterface $session)
{
$this->bannerRepository = $bannerRepository;
$this->eventRepository = $eventRepository;
$this->competitionRepository = $competitionRepository;
$this->session = $session;
$this->theme = $this->session->get('theme', 'horse');
}
public function index(Request $request, PaginatorInterface $paginator): Response
{
$localeCode = $request->getLocale();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$query = $this->eventRepository->findEventsQuery($localeCode);
$events = $paginator->paginate($query, $request->query->getInt('page', 1), 9);
return $this->render('front/event/index.html.twig', compact('events', 'banner'));
}
public function competitions(Request $request, PaginatorInterface $paginator): Response
{
$localeCode = $request->getLocale();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$query = $this->competitionRepository->findCompetitionsQuery($localeCode);
$competitions = $paginator->paginate($query, $request->query->getInt('page', 1), 6);
return $this->render('front/competition/index.html.twig', compact('competitions', 'banner'));
}
public function show(Request $request, Event $event): Response
{
$localeCode = $request->getLocale();
$medias = $event->getMedias();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$event = $this->eventRepository->findEvent($event->getId(), $localeCode);
return $this->render('front/event/show.html.twig', compact('event', 'banner', 'medias'));
}
}