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">&#10084;</span>
+                        {% else %}
+                            <span class="non_aime">&#10084;</span>
+                        {% endif %}
+                        </button></a>
+                    {% endif %}
+                {% endif %}
 
                 {% if prestation.getType() == 'Pret' %}
                     <p class="tag_pret" id="tag">Prêt</p>
-- 
GitLab