<?php
namespace App\Controller\Web;
use App\Entity\User;
use App\Entity\InternalEvent;
use App\Entity\MainEvent;
use App\Processor\InternalEventRegistrationProcessor;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class InternalEventController
* @package App\Controller\Web
*
* @Route("/admin/event", name="admin_internal_event")
*/
class InternalEventController extends AbstractController
{
private $internalEventRegistrationProcessor;
public function __construct(
InternalEventRegistrationProcessor $internalEventRegistrationProcessor
) {
$this->internalEventRegistrationProcessor = $internalEventRegistrationProcessor;
}
/**
* @Route("/{mainEventId}", name="_listing")
*
* @ParamConverter("mainEvent", options={"mapping": {"mainEventId" : "id"}})
*/
public function index(MainEvent $mainEvent)
{
$internalEventList = $this->getDoctrine()->getRepository(InternalEvent::class)
->findBy(['mainEvent' => $mainEvent], [
'startDate' => 'ASC',
'startHour' => 'ASC'
]);
$internalEventList = $this->groupEventsByDate($internalEventList);
return $this->render('admin/internal-event-listing.html.twig', [
'mainEvent' => $mainEvent,
'internalEventList' => $internalEventList,
]);
}
/**
* @Route("/{mainEventId}/{internalEventId}", name="_details", requirements={"internalEventId"="\d+"})
*
* @ParamConverter("mainEvent", options={"mapping": {"mainEventId" : "id"}})
* @ParamConverter("internalEvent", options={"mapping": {"internalEventId" : "id"}})
*/
public function details(Request $request, MainEvent $mainEvent, InternalEvent $internalEvent)
{
/** @var User $user */
$user = $this->getUser();
$internalEventRegistration = $this->internalEventRegistrationProcessor->getInternalEventRegistration($internalEvent, $user->getPerson());
if ($request->getMethod() == 'POST') {
$this->internalEventRegistrationProcessor->processSubmission($internalEventRegistration, $request);
$this->addFlash("success", "Your registrations have been updated.");
return $this->redirectToRoute('admin_main_event_registration_summary', [
'mainEventId' => $mainEvent->getId()
]);
}
return $this->render('admin/internal-event-details-register.html.twig', [
"internalEvent" => $internalEvent,
"internalEventRegistration" => $internalEventRegistration
]);
}
/**
* @param array $eventList
* @return array
*/
private function groupEventsByDate($eventList = [])
{
$groupMainEventByDateList = [];
/** @var InternalEvent $event */
foreach ($eventList as $event)
{
$groupMainEventByDateList[strtotime($event->getStartDate()->format('Y-m-d'))][] = $event;
}
return $groupMainEventByDateList;
}
}