diff --git a/src/Controller/SortieController.php b/src/Controller/SortieController.php index cc1fb5b..59c98f3 100644 --- a/src/Controller/SortieController.php +++ b/src/Controller/SortieController.php @@ -53,7 +53,7 @@ class SortieController extends AbstractController } // Définir les relations et l'état initial - $etat = $etatRepository->findOneBy(['libelle' => 'Créée']); + $etat = $etatRepository->findOneBy(['libelle' => 'Ouverte']); if (!$etat) { $this->addFlash('error', 'Erreur interne : état introuvable.'); return $this->redirectToRoute('sortie_create'); @@ -83,6 +83,7 @@ class SortieController extends AbstractController EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage ): Response { + dump('before sortie'); $sortie = $entityManager->getRepository(Sortie::class)->find($id); if (!$sortie) { $this->addFlash('error', 'Cette sortie n\'existe pas.'); @@ -99,10 +100,13 @@ class SortieController extends AbstractController public function inscription( string $id, EntityManagerInterface $entityManager, - TokenStorageInterface $tokenStorage + TokenStorageInterface $tokenStorage, + ParticipantRepository $participantRepository, ): Response { + dump('before sortie'); $userConnect = $tokenStorage->getToken()?->getUser(); - if (!$userConnect) { + $participant = $participantRepository->find($userConnect->getIdParticipant()); + if (!$participant) { $this->addFlash('error', 'Vous devez être connecté pour vous inscrire.'); return $this->redirectToRoute('app_login'); } @@ -116,12 +120,13 @@ class SortieController extends AbstractController // Conditions supplémentaires pour l'inscription if ($sortie->getEtat()->getLibelle() !== 'Ouverte') { $this->addFlash('error', 'Cette sortie n\'est pas ouverte aux inscriptions.'); - } elseif ($sortie->getParticipants()->contains($userConnect)) { + } elseif ($sortie->getParticipants()->contains($participant)) { $this->addFlash('error', 'Vous êtes déjà inscrit à cette sortie.'); } elseif ($sortie->getParticipants()->count() >= $sortie->getNbInscriptionsMax()) { $this->addFlash('error', 'Cette sortie est complète.'); } else { - $sortie->addParticipant($userConnect); + $sortie->addParticipant($participant); + dump($sortie->getParticipants()->toArray()); $entityManager->flush(); $this->addFlash('success', 'Votre inscription a été validée.'); } @@ -129,6 +134,39 @@ class SortieController extends AbstractController return $this->redirectToRoute('sortie_view', ['id' => $id]); } + #[Route('/desinscription/{id}', name: 'desinscription', methods: ['POST'])] + public function desinscription( + string $id, + EntityManagerInterface $entityManager, + TokenStorageInterface $tokenStorage, + ParticipantRepository $participantRepository, + ): Response { + $userConnect = $tokenStorage->getToken()?->getUser(); + $participant = $participantRepository->find($userConnect->getIdParticipant()); + if (!$participant) { + $this->addFlash('error', 'Vous devez être connecté pour vous désinscrire.'); + 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($participant)) { + $sortie->removeParticipant($participant); + dump($sortie->getParticipants()->toArray()); + $entityManager->flush(); + $this->addFlash('success', 'Vous avez été désinscrit de la sortie.'); + } else { + $this->addFlash('error', 'Vous n\'êtes pas inscrit à cette sortie.'); + } + + return $this->redirectToRoute('sortie_view', ['id' => $id]); + } + + #[Route('/edit/{id}', name: 'edit', methods: ['GET', 'POST'])] public function edit( string $id, @@ -144,6 +182,7 @@ class SortieController extends AbstractController } $userConnect = $tokenStorage->getToken()?->getUser(); + if ($userConnect->getIdParticipant() !== $sortie->getOrganisateur()->getIdParticipant()) { $this->addFlash('error', 'Vous ne pouvez pas modifier cette sortie.'); return $this->redirectToRoute('home'); diff --git a/src/DataFixtures/EtatFixtures.php b/src/DataFixtures/EtatFixtures.php index 30000a3..1af3717 100644 --- a/src/DataFixtures/EtatFixtures.php +++ b/src/DataFixtures/EtatFixtures.php @@ -12,7 +12,6 @@ class EtatFixtures extends Fixture public function load(ObjectManager $manager): void { $etats = [ - 'Créée', 'Ouverte', 'Clôturée', 'En cours', diff --git a/src/Entity/Participant.php b/src/Entity/Participant.php index ebb675b..40bf212 100644 --- a/src/Entity/Participant.php +++ b/src/Entity/Participant.php @@ -298,7 +298,7 @@ class Participant implements UserInterface, PasswordAuthenticatedUserInterface { if (!$this->sortiesParticipants->contains($sortiesParticipant)) { $this->sortiesParticipants->add($sortiesParticipant); - $sortiesParticipant->addParticipant($this); + $sortiesParticipant->addParticipant($this); // Synchronise avec Sortie } return $this; diff --git a/src/Entity/Sortie.php b/src/Entity/Sortie.php index c00a6d2..ae91454 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); // Synchronisation côté Participant } return $this; @@ -210,7 +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..c2211d4 100644 --- a/templates/sortie/view.html.twig +++ b/templates/sortie/view.html.twig @@ -65,18 +65,25 @@ {% endif %} - {% if app.user and sortie.etat.libelle == 'Ouverte' and not sortie.participants.contains(app.user) %} -
- {% elseif app.user and sortie.participants.contains(app.user) %} -✅ Vous êtes déjà inscrit à cette sortie.
-