From 643d5d451a107a142135e4c8951069f29c3cfc16 Mon Sep 17 00:00:00 2001 From: bourgoino Date: Tue, 8 Apr 2025 08:41:54 +0200 Subject: [PATCH] =?UTF-8?q?S=C3=A9lection=20de=20comp=C3=A9tences.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Controller/InternFavoriteController.php | 136 ++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/Controller/InternFavoriteController.php diff --git a/src/Controller/InternFavoriteController.php b/src/Controller/InternFavoriteController.php new file mode 100644 index 0000000..1a04b22 --- /dev/null +++ b/src/Controller/InternFavoriteController.php @@ -0,0 +1,136 @@ +getUser()->getIntern(); + + $existing = $repo->findOneBy([ + 'intern' => $intern, + 'announcement' => $announcement + ]); + + if ($existing) { + $em->remove($existing); + } else { + $favorite = new InternFavorite(); + $favorite->setIntern($intern); + $favorite->setAnnouncement($announcement); + $em->persist($favorite); + } + + $em->flush(); + + return $this->redirectToRoute('app_announcement_index'); + } + + #[Route('/announcement/{id}/favorite/toggle', name: 'app_favorite_toggle', methods: ['POST'])] + public function toggle(Announcement $announcement, EntityManagerInterface $em, Security $security): RedirectResponse + { + $user = $security->getUser(); + + if (!$user instanceof Intern) { + throw new AccessDeniedHttpException('Seuls les stagiaires peuvent ajouter aux favoris.'); + } + + $favorite = $em->getRepository(InternFavorite::class)->findOneBy([ + 'intern' => $user, + 'announcement' => $announcement + ]); + + if ($favorite) { + $em->remove($favorite); + } else { + $favorite = new InternFavorite(); + $favorite->setIntern($user); + $favorite->setAnnouncement($announcement); + $em->persist($favorite); + } + + $em->flush(); + + return new RedirectResponse($_SERVER['HTTP_REFERER'] ?? '/'); + } + + #[Route('/announcement/{id}', name: 'app_announcement_show')] + public function show(Announcement $announcement, InternFavoriteRepository $internFavoriteRepository): Response + { + $user = $this->getUser(); + $isFavorite = false; + + if (in_array('ROLE_INTERN', $user->getRoles())) { + $favorite = $internFavoriteRepository->findOneBy([ + 'announcement' => $announcement, + 'intern' => $user, + ]); + + $isFavorite = $favorite ? true : false; + } + + return $this->render('announcement/show.html.twig', [ + 'announcement' => $announcement, + 'isFavorite' => $isFavorite, + ]); + } + + #[Route('/favorite/add/{id}', name: 'app_favorite_add')] + public function addFavorite(Announcement $announcement, EntityManagerInterface $entityManager): Response + { + $user = $this->getUser(); + + // Vérifier si l'intern a déjà ce favori + $existingFavorite = $entityManager->getRepository(InternFavorite::class)->findOneBy([ + 'announcement' => $announcement, + 'intern' => $user, + ]); + + if (!$existingFavorite) { + $favorite = new InternFavorite(); + $favorite->setAnnouncement($announcement); + $favorite->setIntern($user); + + $entityManager->persist($favorite); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_announcement_show', ['id' => $announcement->getId()]); + } + + #[Route('/favorite/remove/{id}', name: 'app_favorite_remove')] + public function removeFavorite(Announcement $announcement, EntityManagerInterface $entityManager): Response + { + $user = $this->getUser(); + + $favorite = $entityManager->getRepository(InternFavorite::class)->findOneBy([ + 'announcement' => $announcement, + 'intern' => $user, + ]); + + if ($favorite) { + $entityManager->remove($favorite); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_announcement_show', ['id' => $announcement->getId()]); + } +}