getUser(); $onlyPublicAccess = true; if ($user) { $roles = $user->getRoles(); if (in_array('ROLE_STAFF', $roles) || in_array('ROLE_MANAGER', $roles) || in_array('ROLE_ADMIN', $roles)) { $onlyPublicAccess = false; } } // Récupérer la liste des événements visibles $events = $repository->findEventsToCome($onlyPublicAccess); return $this->render('main/index.html.twig', [ 'events' => $events, ]); } #[Route('/booking', name: 'app_main_booking_main')] public function bookingMain(EventRepository $repository): Response { // Est-ce qu'un utilisateur est connecté et qu'il est au moins "staff" ? $user = $this->getUser(); $onlyPublicAccess = true; if ($user) { $roles = $user->getRoles(); if (in_array('ROLE_STAFF', $roles) || in_array('ROLE_MANAGER', $roles) || in_array('ROLE_ADMIN', $roles)) { $onlyPublicAccess = false; } } // Récupérer la liste des événements visibles $events = $repository->findEventsToCome($onlyPublicAccess); if (!$events) { $this->addFlash('info', 'Aucun d\'événement n\'est plannifié pour le moment.'); return $this->redirectToRoute('app_main'); } $event = $events[0]; return $this->redirectToRoute('app_main_booking', ['id' => $event->getId(), 'view' => 'pictures']); } #[Route('/booking/{id}/{view}', name: 'app_main_booking', requirements: ['id' => Requirement::UUID_V7, 'view' => '.*'], methods: ['GET', 'POST'])] public function booking(?Event $event, EventRepository $repository, string $view): Response { // Contrôler qu'un événement est bien ok if (!$event) { $this->addFlash('danger', 'Événement inconnu !'); $this->redirectToRoute('app_main_booking_main'); } // Est-ce qu'un utilisateur est connecté et qu'il est au moins "staff" ? $user = $this->getUser(); $onlyPublicAccess = true; if ($user) { $roles = $user->getRoles(); if (in_array('ROLE_STAFF', $roles) || in_array('ROLE_MANAGER', $roles) || in_array('ROLE_ADMIN', $roles)) { $onlyPublicAccess = false; } } // Est-ce qu'une vue est invoquée dans l'URL ? et est-ce une option valide ? if (!$view || !in_array($view, ['info', 'planning', 'pictures'])) { $view = 'pictures'; } // Si le planning n'est pas affiché, planning et pictures -> info //if ($event.isHiddenPlanning() // Récupérer la liste des événements visibles $events = $repository->findEventsToCome($onlyPublicAccess); return $this->render('main/booking.'.$view.'.html.twig', [ 'event' => $event, 'events' => $events ]); } #[Route('/charte-animations', name: 'app_code_of_conduct')] public function codeOfConduct(): Response { // Lire le contenu de la charte des animations depuis un fichier $codeContent = file_get_contents(__DIR__ . '/../../public/pages/code.md'); return $this->render('main/markdown.html.twig', [ 'codeContent' => $codeContent, ]); } #[Route('/cgu', name: 'app_terms')] public function terms(): Response { // Lire le contenu de la charte des animations depuis un fichier $codeContent = file_get_contents(__DIR__ . '/../../public/pages/terms.md'); return $this->render('main/markdown.html.twig', [ 'codeContent' => $codeContent, ]); } #[Route('/legal', name: 'app_legal')] public function legal(): Response { // Lire le contenu de la charte des animations depuis un fichier $codeContent = file_get_contents(__DIR__ . '/../../public/pages/legal.md'); return $this->render('main/markdown.html.twig', [ 'codeContent' => $codeContent, ]); } #[Route('/contact', name: 'app_contact')] public function contact(): Response { // TODO: formulaire de contact avec envoi d'un mail // Lire le contenu de la charte des animations depuis un fichier $codeContent = file_get_contents(__DIR__ . '/../../public/pages/legal.md'); return $this->render('main/markdown.html.twig', [ 'codeContent' => $codeContent, ]); } #[Route('/gamemaster/{id}', name: 'app_gamemaster_public_profile', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])] public function gamemasterPublicProfile(?Gamemaster $gamemaster): Response { if ($gamemaster) { return $this->render('main/_modal.gamemaster.html.twig', [ 'gamemaster' => $gamemaster, ]); } else { $this->addFlash('danger', 'Meneur(euse) de jeu inconnu(e).'); return $this->redirectToRoute('app_main'); } } #[Route('/game/{id}', name: 'app_game_public', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])] public function gamePublic(?Game $game): Response { if ($game) { return $this->render('main/_modal.game.html.twig', [ 'game' => $game, ]); } else { $this->addFlash('danger', 'Jeu inconnu.'); return $this->redirectToRoute('app_main'); } } // Gestion de la newsletter et des pièces jointes // ORGASSO permet uniquement de générer un template de newsletter, il ne gère pas l'envoi de celle-ci pour l'instant // Génération de la newsletter /newsletter/(annee)/(mois) #[Route('/newsletter/{year}/{month}', name: 'app_newsletter', requirements: ['year' => '\d{4}', 'month' => '0[1-9]|1[0-2]'], methods: ['GET'])] public function newsletter(EventRepository $repository, int $year, int $month): Response { // Lister tous les événements du mois et de l'année $events = $repository->findEventsOfMonth($month, $year, true); // Générer et retourner la newsletter return $this->render('main/mailing/simple.template.html.twig', ['events' => $events]); } // Génération de la newsletter d'un événement /newsletter/detail/(uuid) #[Route('/newsletter/detail/{id}', name: 'app_newsletter_detail', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])] public function newsletterDetail(?Event $event, EventRepository $repository): Response { // Contrôle qu'un événement est bien transmis if (!$event) { $this->addFlash('danger', 'Événement inconnu !'); $this->redirectToRoute('app_main_booking_main'); } return $this->render('main/malling/detail.template.html.twig', ['event' => $event]); } // Génération des ICS pour la newsletter et l'affiche des événements #[Route('/ics/{id}.ics', name: 'app_main_ics', requirements: ['id' => Requirement::UUID_V7], methods: ['GET'])] public function ics(?Event $event, EventRepository $repository): Response { // Contrôler qu'un événement est bien ok if (!$event) { $this->addFlash('danger', 'Événement inconnu !'); $this->redirectToRoute('app_main_booking_main'); } return $this->render('main/event.ics.twig', ['event' => $event]); } }