diff --git a/src/Controller/SortieController.php b/src/Controller/SortieController.php index cc1fb5b..47cf207 100644 --- a/src/Controller/SortieController.php +++ b/src/Controller/SortieController.php @@ -122,6 +122,7 @@ class SortieController extends AbstractController $this->addFlash('error', 'Cette sortie est complète.'); } else { $sortie->addParticipant($userConnect); + $entityManager->persist($sortie); $entityManager->flush(); $this->addFlash('success', 'Votre inscription a été validée.'); } @@ -129,6 +130,33 @@ class SortieController extends AbstractController return $this->redirectToRoute('sortie_view', ['id' => $id]); } + #[Route('/unsubscribe/{id}', name: 'unsubscribe', methods: ['POST'])] + public function unsubscribe(string $id, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage) + { + $userConnect = $tokenStorage->getToken()?->getUser(); + if (!$userConnect) { + $this->addFlash('error', 'Vous devez être connecté pour vous inscrire.'); + return $this->redirectToRoute('app_login'); + } + + $sortie = $entityManager->getRepository(Sortie::class)->find($id); + if (!$sortie) { + $this->addFlash('error', 'Cette sortie n\'existe pas.'); + return $this->redirectToRoute('home'); + } + + if (!$sortie->getParticipants()->contains($userConnect)) { + $this->addFlash('error', 'Vous devez être inscrit pour vous désinscrire d\'une sortie.'); + } else { + $sortie->removeParticipant($userConnect); + $entityManager->persist($sortie); + $entityManager->flush(); + $this->addFlash('success', 'Vous ne participez pu à cette sortie.'); + } + + return $this->redirectToRoute('sortie_view', ['id' => $id]); + } + #[Route('/edit/{id}', name: 'edit', methods: ['GET', 'POST'])] public function edit( string $id, diff --git a/src/Entity/Sortie.php b/src/Entity/Sortie.php index c00a6d2..9665236 100644 --- a/src/Entity/Sortie.php +++ b/src/Entity/Sortie.php @@ -202,6 +202,7 @@ class Sortie { if (!$this->participants->contains($participant)) { $this->participants->add($participant); + $participant->addSortiesParticipant($this); } return $this; @@ -210,6 +211,7 @@ class Sortie public function removeParticipant(Participant $participant): static { $this->participants->removeElement($participant); + $participant->removeSortiesParticipant($this); return $this; } diff --git a/templates/sortie/view.html.twig b/templates/sortie/view.html.twig index 88874f7..e175177 100644 --- a/templates/sortie/view.html.twig +++ b/templates/sortie/view.html.twig @@ -74,6 +74,13 @@ {% elseif app.user and sortie.participants.contains(app.user) %}
✅ Vous êtes déjà inscrit à cette sortie.
+ {% if sortie.etat.libelle == 'Ouverte' %} + + {% endif %}