src/Controller/Web/InternalEventController.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Web;
  3. use App\Entity\User;
  4. use App\Entity\InternalEvent;
  5. use App\Entity\MainEvent;
  6. use App\Processor\InternalEventRegistrationProcessor;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. /**
  12.  * Class InternalEventController
  13.  * @package App\Controller\Web
  14.  *
  15.  * @Route("/admin/event", name="admin_internal_event")
  16.  */
  17. class InternalEventController extends AbstractController
  18. {
  19.     private $internalEventRegistrationProcessor;
  20.     public function __construct(
  21.         InternalEventRegistrationProcessor $internalEventRegistrationProcessor
  22.     ) {
  23.         $this->internalEventRegistrationProcessor $internalEventRegistrationProcessor;
  24.     }
  25.     /**
  26.      * @Route("/{mainEventId}", name="_listing")
  27.      *
  28.      * @ParamConverter("mainEvent", options={"mapping": {"mainEventId" : "id"}})
  29.      */
  30.     public function index(MainEvent $mainEvent)
  31.     {
  32.         $internalEventList $this->getDoctrine()->getRepository(InternalEvent::class)
  33.             ->findBy(['mainEvent' => $mainEvent], [
  34.                 'startDate' => 'ASC',
  35.                 'startHour' => 'ASC'
  36.             ]);
  37.         $internalEventList $this->groupEventsByDate($internalEventList);
  38.         return $this->render('admin/internal-event-listing.html.twig', [
  39.             'mainEvent' => $mainEvent,
  40.             'internalEventList' => $internalEventList,
  41.         ]);
  42.     }
  43.     /**
  44.      * @Route("/{mainEventId}/{internalEventId}", name="_details", requirements={"internalEventId"="\d+"})
  45.      *
  46.      * @ParamConverter("mainEvent", options={"mapping": {"mainEventId" : "id"}})
  47.      * @ParamConverter("internalEvent", options={"mapping": {"internalEventId" : "id"}})
  48.      */
  49.     public function details(Request $requestMainEvent $mainEventInternalEvent $internalEvent)
  50.     {
  51.         /** @var User $user */
  52.         $user $this->getUser();
  53.         $internalEventRegistration $this->internalEventRegistrationProcessor->getInternalEventRegistration($internalEvent$user->getPerson());
  54.         if ($request->getMethod() == 'POST') {
  55.             $this->internalEventRegistrationProcessor->processSubmission($internalEventRegistration$request);
  56.             $this->addFlash("success""Your registrations have been updated.");
  57.             return $this->redirectToRoute('admin_main_event_registration_summary', [
  58.                 'mainEventId' => $mainEvent->getId()
  59.             ]);
  60.         }
  61.         return $this->render('admin/internal-event-details-register.html.twig', [
  62.             "internalEvent" => $internalEvent,
  63.             "internalEventRegistration" => $internalEventRegistration
  64.         ]);
  65.     }
  66.     /**
  67.      * @param array $eventList
  68.      * @return array
  69.      */
  70.     private function groupEventsByDate($eventList = [])
  71.     {
  72.         $groupMainEventByDateList = [];
  73.         /** @var InternalEvent $event */
  74.         foreach ($eventList as $event)
  75.         {
  76.             $groupMainEventByDateList[strtotime($event->getStartDate()->format('Y-m-d'))][] = $event;
  77.         }
  78.         return $groupMainEventByDateList;
  79.     }
  80. }