From d1cbeb8f828224136aba23185b0bb19b7e024b3d Mon Sep 17 00:00:00 2001 From: YvanSv <yvan.savergne@gmail.com> Date: Wed, 3 Apr 2024 14:59:09 +0200 Subject: [PATCH] ajout d'un bouton like aux annonces sur l'accueil --- assets/styles/app.css | 2 +- src/Controller/HomePageController.php | 46 +++++++++++++++++++++++++-- templates/home_page/index.html.twig | 11 +++++++ 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/assets/styles/app.css b/assets/styles/app.css index 192bf3b8..e40715f4 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -316,7 +316,7 @@ button { } .btn-like { - background-color: #ffffff; + background-color: transparent; border: 0px #ccc; padding: 5px 10px; cursor: pointer; diff --git a/src/Controller/HomePageController.php b/src/Controller/HomePageController.php index b6f21d77..d1e957b5 100644 --- a/src/Controller/HomePageController.php +++ b/src/Controller/HomePageController.php @@ -7,15 +7,27 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Doctrine\Persistence\ManagerRegistry; +use App\Entity\Notification; +use App\Entity\Prestations; +use DateTime; class HomePageController extends AbstractController { + private $doctrine; + + public function __construct(ManagerRegistry $doctrine) { + $this->doctrine = $doctrine; + } + #[Route('', name: 'app_home_page')] public function index(Request $request, PrestationsRepository $prestationsRepository): Response { $prestations = $prestationsRepository->findFilteredPrestations(); + $user = $this->getUser(); return $this->render('home_page/index.html.twig', [ - 'prestations' => $prestations + 'prestations' => $prestations, + 'user' => $user ]); } @@ -30,9 +42,39 @@ class HomePageController extends AbstractController if ($prixMax == '') $prixMax = null; $prestations = $prestationsRepository->findFilteredPrestations($keyword, $prixMin, $prixMax, $typePrestation); + $user = $this->getUser(); return $this->render('home_page/index.html.twig', [ - 'prestations' => $prestations + 'prestations' => $prestations, + 'user' => $user ]); } + + #[Route('/aimer/{id}', name: 'app_like_home_page')] + public function aimerPrestation($id,PrestationsRepository $prestationsRepository): Response + { + $user = $this->getUser(); + $entityManager = $this->doctrine->getManager(); + $prestation = $entityManager->getRepository(Prestations::class)->find($id); + + if ($user != null) { + $notification = new Notification(); + $notification->setDescription($user->getLogin(). " a aimé votre annonce " . $prestation->getTitre()); + $notification->setType("Annonce aimée"); + $notification->setDate(new DateTime()); + $notification->setUserId($prestation->getProprietaire()); + $this->doctrine->getManager()->persist($notification); + $prestation->setIdClient(null); + } else return $this->redirectToRoute('app_login'); + + if ($user->getPrestationsAimees()->contains($prestation)) { + $user->removePrestationsAimee($prestation); + $prestation->removeUtilisateursAimant($user); + } else { + $user->addPrestationsAimee($prestation); + $prestation->addUtilisateursAimant($user); + } + $entityManager->flush(); + return $this->redirectToRoute('app_home_page'); + } } \ No newline at end of file diff --git a/templates/home_page/index.html.twig b/templates/home_page/index.html.twig index b93ba36e..ac3c1e97 100644 --- a/templates/home_page/index.html.twig +++ b/templates/home_page/index.html.twig @@ -47,6 +47,17 @@ {% if is_granted('ROLE_ADMIN') %} <p class="tag_litige" id="tag">{{prestation.litiges|length}}</p> {% endif %} + {% if user and not is_granted ("ROLE_ADMIN") %} + {% if user.id != prestation.proprietaire.id %} + <a href="{{ path('app_like_home_page', {'id': prestation.id}) }}"><button class="btn-like"> + {% if user.aimePrestation(prestation) %} + <span class="aime">❤</span> + {% else %} + <span class="non_aime">❤</span> + {% endif %} + </button></a> + {% endif %} + {% endif %} {% if prestation.getType() == 'Pret' %} <p class="tag_pret" id="tag">Prêt</p> -- GitLab