plein de truc

This commit is contained in:
marvin
2024-11-22 14:10:39 +01:00
parent 22006281cd
commit db38ec2979
11 changed files with 710 additions and 185 deletions

View File

@@ -24,7 +24,7 @@ class SortieController extends AbstractController
TokenStorageInterface $tokenStorage,
LieuRepository $lieuRepository,
ParticipantRepository $participantRepository,
EtatRepository $etatRepository // Ajout du repository pour les états
EtatRepository $etatRepository
): Response {
$sortie = new Sortie();
@@ -63,7 +63,6 @@ class SortieController extends AbstractController
}
$sortie->setSite($participant->getSite());
$sortie->setParticipant($participant);
// Récupérer l'état "en création" avec l'ID donné
$etat = $etatRepository->find('019349ba-38ca-7a39-93c3-62f046671525');
@@ -75,6 +74,9 @@ class SortieController extends AbstractController
// Associer l'état à la sortie
$sortie->setEtat($etat);
// Associer l'organisateur à la sortie
$sortie->setOrganisateur($participant);
// Sauvegarder la sortie
$entityManager->persist($sortie);
$entityManager->flush();
@@ -89,4 +91,128 @@ class SortieController extends AbstractController
'form' => $form->createView(),
]);
}
#[Route('/view/{id}', name: 'view', methods: ['GET'])]
public function view(string $id, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
{
// Récupérer l'utilisateur connecté
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
$sortie = $entityManager->getRepository(Sortie::class)->find($id);
if (!$sortie) {
$this->addFlash('error', 'La sortie demandée n\'existe pas.');
return $this->redirectToRoute('home');
}
// Récupérer le profil de l'utilisateur connecté
$profile = $this->getUser();
return $this->render('sortie/view.html.twig', [
'sortie' => $sortie,
'profile' => $userConnect,
]);
}
#[Route('/inscription/{id}', name: 'inscription', methods: ['POST'])]
public function inscription(string $id, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage): Response
{
// Récupérer l'utilisateur connecté
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
if (!$userConnect) {
$this->addFlash('error', 'Vous devez être connecté pour vous inscrire.');
return $this->redirectToRoute('app_login');
}
// Récupérer la sortie
$sortie = $entityManager->getRepository(Sortie::class)->find($id);
if (!$sortie) {
$this->addFlash('error', 'La sortie demandée n\'existe pas.');
return $this->redirectToRoute('home');
}
// Vérifier que la sortie est "Ouverte"
if ($sortie->getEtat()->getLibelle() !== 'Ouverte') {
$this->addFlash('error', 'Vous ne pouvez pas vous inscrire à cette sortie car elle n\'est pas ouverte.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Vérifier si l'utilisateur est déjà inscrit
if ($sortie->getParticipants()->contains($userConnect)) {
$this->addFlash('error', 'Vous êtes déjà inscrit à cette sortie.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Vérifier le nombre maximum d'inscriptions
if ($sortie->getParticipants()->count() >= $sortie->getNbInscriptionsMax()) {
$this->addFlash('error', 'Le nombre maximum d\'inscriptions a été atteint pour cette sortie.');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
// Ajouter l'utilisateur à la liste des participants
$sortie->addParticipant($userConnect);
$entityManager->flush();
$this->addFlash('success', 'Vous êtes inscrit à la sortie avec succès !');
return $this->redirectToRoute('sortie_view', ['id' => $id]);
}
#[Route('/edit/{id}', name: 'edit', methods: ['GET', 'POST'])]
public function edit(
string $id,
Request $request,
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage,
LieuRepository $lieuRepository
): Response {
// Récupérer la sortie
$sortie = $entityManager->getRepository(Sortie::class)->find($id);
if (!$sortie) {
$this->addFlash('error', 'La sortie demandée n\'existe pas.');
return $this->redirectToRoute('home');
}
// Vérifier si l'utilisateur est l'organisateur
$token = $tokenStorage->getToken();
$userConnect = $token?->getUser();
if ($userConnect->getIdParticipant() !== $sortie->getOrganisateur()->getIdParticipant()) {
$this->addFlash('error', 'Vous n\'avez pas l\'autorisation de modifier cette sortie.');
return $this->redirectToRoute('home');
}
// Créer le formulaire
$form = $this->createForm(SortieType::class, $sortie);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Mettre à jour le lieu si modifié
$lieuId = $form->get('lieu')->getData();
$lieu = $lieuRepository->find($lieuId);
if ($lieu) {
$sortie->setLieu($lieu);
}
// Sauvegarder les modifications
$entityManager->flush();
$this->addFlash('success', 'La sortie a été mise à jour avec succès.');
return $this->redirectToRoute('sortie_view', ['id' => $sortie->getIdSortie()]);
}
return $this->render('sortie/edit.html.twig', [
'form' => $form->createView(),
'sortie' => $sortie,
'profile' => $userConnect,
]);
}
}