PrepareController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Requirement\Requirement;
  6. use Symfony\Component\Routing\Attribute\Route;
  7. use App\Repository\EventRepository;
  8. use App\Entity\Event;
  9. use App\Entity\Gamemaster;
  10. use App\Security\Voter\EventAccessVoter;
  11. final class PrepareController extends AbstractController
  12. {
  13. #[Route('/prepare', name: 'app_prepare')]
  14. public function prepare(EventRepository $repository): Response
  15. {
  16. // Faut être au moins du STAFF
  17. $this->denyAccessUnlessGranted('ROLE_STAFF');
  18. // La personne connectée est-elle un MJ ?
  19. $gamemaster = null;
  20. $user = $this->getUser();
  21. if (in_array('ROLE_STAFF', $user->GetRoles())) {
  22. // C'est un membre du staff, on check son profil MJ
  23. $gamemaster = $user->getLinkToGamemaster();
  24. if (!$gamemaster) {
  25. // Mais c'est pas un MJ
  26. $this->addFlash('danger', 'Seuls les MJ de l\'équipe peuvent préparer un événement');
  27. return $this->redirectToRoute('app_main');
  28. }
  29. }
  30. // Tous événement même non publiés à venir
  31. $events = $repository->findEventsToPrepare($gamemaster);
  32. if (count($events) < 1) {
  33. // Aucun événement à préparer
  34. $this->addFlash('danger', 'Aucun événement en cours de préparation pour le moment.');
  35. return $this->redirectToRoute('app_main');
  36. }
  37. $event = $events[0];
  38. return $this->render('prepare/prepare.html.twig', [
  39. 'event' => $event,
  40. 'events' => $events
  41. ]);
  42. }
  43. #[Route('/prepare/{id}', name: 'app_prepare_planning', requirements: ['id' => Requirement::UUID_V7], methods: ['GET', 'POST'])]
  44. public function preparePlanning(?Event $event, EventRepository $repository): Response
  45. {
  46. // Si pas d'événement, ça dégage
  47. if (!$event) {
  48. $this->addFlash('danger', 'Événement inconnu !');
  49. return $this->redirectToRoute('app_prepare');
  50. }
  51. // On controle les droits d'accès sur l'événement
  52. $this->denyAccessUnlessGranted(EventAccessVoter::ACCESS_EVENT, $event);
  53. // La personne connectée est-elle un MJ ?
  54. $gamemaster = null;
  55. $user = $this->getUser();
  56. if (in_array('ROLE_STAFF', $user->GetRoles())) {
  57. // C'est un membre du staff, on check son profil MJ
  58. $gamemaster = $user->getLinkToGamemaster();
  59. if (!$gamemaster) {
  60. // Mais c'est pas un MJ
  61. $this->addFlash('danger', 'Seuls les MJ de l\'équipe peuvent préparer un événement');
  62. return $this->redirectToRoute('app_main');
  63. }
  64. }
  65. // Tous événement même non publiés à venir
  66. $events = $repository->findEventsToPrepare($gamemaster);
  67. if (count($events) < 1) {
  68. // Aucun événement à préparer
  69. $this->addFlash('danger', 'Aucun événement en cours de préparation pour le moment.');
  70. return $this->redirectToRoute('app_main');
  71. }
  72. return $this->render('prepare/prepare.html.twig', [
  73. 'event' => $event,
  74. 'events' => $events
  75. ]);
  76. }
  77. }