src/Controller/EventController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Event;
  4. use App\Entity\EventComment;
  5. use App\Entity\EventMember;
  6. use App\Entity\Message;
  7. use App\EntityManager\EventManager;
  8. use App\Form\Event\CreateEventType;
  9. use App\Form\Event\EventAddCommentType;
  10. use App\Form\Event\EventRegistrationType;
  11. use App\Form\Event\EventSearchType;
  12. use App\Form\Event\UpdateParticipantType;
  13. use App\Form\Message\CreateMessageType;
  14. use App\Model\SearchEvent;
  15. use App\Security\Voter\EventVoter;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  23. /**
  24.  * Class EventController
  25.  * @package App\Controller
  26.  * @Route("/event")
  27.  */
  28. class EventController extends AbstractController
  29. {
  30.     /**
  31.      * @var EventManager
  32.      */
  33.     protected $eventManager;
  34.     public function __construct(EventManager $eventManager)
  35.     {
  36.         $this->eventManager $eventManager;
  37.     }
  38.     /**
  39.      * @Route("", name="event_index")
  40.      * @Template()
  41.      */
  42.     public function index(Request $request)
  43.     {
  44.         $searchObject = new SearchEvent();
  45.         $searchForm   $this->createForm(EventSearchType::class, $searchObject, ['method' => Request::METHOD_GET]);
  46.         $searchForm->handleRequest($request);
  47.         $events $this->eventManager->getIndexList($searchObject);
  48.         return [
  49.             'events'     => $events,
  50.             'searchForm' => $searchForm->createView(),
  51.         ];
  52.     }
  53.     /**
  54.      * @Route("/my_events", name="event_my_events")
  55.      * @Template()
  56.      */
  57.     public function myEvents()
  58.     {
  59.         $searchObject = new SearchEvent();
  60.         $searchObject->setByUser($this->getUser());
  61.         $searchObject->setDisplayPastEvents(true);
  62.         $events $this->eventManager->getIndexList($searchObject);
  63.         return [
  64.             'events' => $events,
  65.         ];
  66.     }
  67.     /**
  68.      * @Route("/{id<\d+>}", name="event_view")
  69.      * @Template()
  70.      */
  71.     public function view(Request $requestEvent $event)
  72.     {
  73.         $comment     = new EventComment();
  74.         $commentForm $this->createForm(EventAddCommentType::class, $comment);
  75.         $commentForm->handleRequest($request);
  76.         if ($commentForm->isSubmitted() && $commentForm->isValid()) {
  77.             $this->eventManager->addComment($event$comment);
  78.             $this->addFlash('success''event.add_comment');
  79.             return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  80.         }
  81.         return [
  82.             'event'       => $event,
  83.             'commentForm' => $commentForm->createView(),
  84.         ];
  85.     }
  86.     /**
  87.      * @Route("/create", name="event_create")
  88.      * @Template()
  89.      */
  90.     public function create(Request $request)
  91.     {
  92.         $event = new Event();
  93.         $form  $this->createForm(CreateEventType::class, $event);
  94.         $form->handleRequest($request);
  95.         if ($form->isSubmitted() && $form->isValid()) {
  96.             $this->eventManager->create($event);
  97.             $this->addFlash('success''event.create');
  98.             return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  99.         }
  100.         return [
  101.             'form' => $form->createView(),
  102.         ];
  103.     }
  104.     /**
  105.      * @Route("/{id}/edit", name="event_edit")
  106.      * @IsGranted(EventVoter::EDIT, subject="event")
  107.      * @Template()
  108.      */
  109.     public function edit(Request $requestEvent $event)
  110.     {
  111.         $form $this->createForm(CreateEventType::class, $event);
  112.         $form->handleRequest($request);
  113.         if ($form->isSubmitted() && $form->isValid()) {
  114.             $this->eventManager->update($event);
  115.             $this->addFlash('success''event.edit');
  116.             return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  117.         }
  118.         return [
  119.             'form'  => $form->createView(),
  120.             'event' => $event,
  121.         ];
  122.     }
  123.     /**
  124.      * @Route("/{id}/participants", name="event_participants")
  125.      * @Template()
  126.      */
  127.     public function viewParticipants(Event $event)
  128.     {
  129.         return [
  130.             'event' => $event,
  131.         ];
  132.     }
  133.     /**
  134.      * @Route("/{id}/edit_participants", name="event_edit_participants")
  135.      * @IsGranted(EventVoter::EDIT, subject="event")
  136.      * @Template()
  137.      */
  138.     public function editParticipants(Event $event)
  139.     {
  140.         return [
  141.             'event' => $event,
  142.         ];
  143.     }
  144.     /**
  145.      * @Route("/{id}/send_message", name="event_send_message")
  146.      * @IsGranted(EventVoter::EDIT, subject="event")
  147.      * @Template()
  148.      */
  149.     public function sendMessage(Request $requestEvent $event)
  150.     {
  151.         $message = new Message();
  152.         $form    $this->createForm(CreateMessageType::class, $message);
  153.         $form->handleRequest($request);
  154.         if ($form->isSubmitted() && $form->isValid()) {
  155.             $content $form->get('content')->getData();
  156.             $this->eventManager->sendMessageToParticipants($event$message$content);
  157.             $this->addFlash('success''event.send_message_to_participants');
  158.             return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  159.         }
  160.         return [
  161.             'event' => $event,
  162.             'form'  => $form->createView(),
  163.         ];
  164.     }
  165.     /**
  166.      * @Route("/{id}/update_participant/{eventMember}", name="event_update_participant", options={"expose": true})
  167.      * @IsGranted(EventVoter::EDIT, subject="event")
  168.      * @Template()
  169.      */
  170.     public function updateParticipant(Request $requestEvent $eventEventMember $eventMember)
  171.     {
  172.         $form $this->createForm(UpdateParticipantType::class, $eventMember);
  173.         $form->handleRequest($request);
  174.         if ($form->isSubmitted() && $form->isValid() && $event->isEventMember($eventMember)) {
  175.             $this->eventManager->updateParticipant($eventMember);
  176.             return new JsonResponse(null200);
  177.         }
  178.         return new JsonResponse(null400);
  179.     }
  180.     /**
  181.      * @Route("/{id}/registration", name="event_registration")
  182.      * @Template()
  183.      */
  184.     public function registration(Request $requestEvent $event)
  185.     {
  186.         $eventMember $event->getMemberFromUser($this->getUser());
  187.         $eventMember $eventMember ?? new EventMember();
  188.         $form        $this->createForm(EventRegistrationType::class, $eventMember);
  189.         $form->handleRequest($request);
  190.         if ($form->isSubmitted() && $form->isValid()) {
  191.             $this->eventManager->updateRegistration($event$eventMember);
  192.             $this->addFlash('success''event.registration_update');
  193.             return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  194.         }
  195.         return [
  196.             'event' => $event,
  197.             'form'  => $form->createView(),
  198.         ];
  199.     }
  200.     /**
  201.      * @Route("/{id}/deleteComment/{commentId}", name="event_delete_comment")
  202.      * @IsGranted(EventVoter::DELETE_COMMENT, subject="event")
  203.      * @Template()
  204.      */
  205.     public function deleteComment(Event $eventEventComment $comment)
  206.     {
  207.         if ($comment->getEvent() !== $event) {
  208.             throw new AccessDeniedException("The comment is not associated with this event.");
  209.         }
  210.         $this->eventManager->deleteComment($event$comment);
  211.         $this->addFlash('success''event.delete_comment');
  212.         return $this->redirectToRoute('event_view', ['id' => $event->getId()]);
  213.     }
  214. }