Pārlūkot izejas kodu

Gestion des profils privés et des abonnements

SPAETER NATHAN 4 gadi atpakaļ
vecāks
revīzija
db5ba88156

+ 12 - 0
src/Controller/ProfileController.php

@@ -16,17 +16,29 @@ class ProfileController extends AbstractController
         $em = $this->getDoctrine()->getManager();
         $repository_profile = $em->getRepository(User::class);
         $profile = $repository_profile->findOneBy(array('username' => $username));
+        $sessionUser = $this->get('session')->get('user');
+        $loginuserprofile = $repository_profile->findOneBy(array('username' => $sessionUser));
         if ($profile === null) {
             return new Response("Profil non existant");
         }
         $username = $profile->getUsername();
         $isPrivate = $profile->getIsPrivate();
         $description = $profile->getDescription();
+        $privateNotAllowed = false;
+        $me = $sessionUser == $username ? true : false;
+        if (!$me and $isPrivate and !$profile->getSubscriptions()->contains($loginuserprofile)) {
+            $privateNotAllowed = true;
+        }
+        $follow = $loginuserprofile->getSubscriptions()->contains($profile) ? true : false;
         return $this->render('profile/index.html.twig', [
             'controller_name' => 'ProfileController',
+            'privateNotAllowed' => $privateNotAllowed,
             'username' => $username,
             'isPrivate' => $isPrivate,
             'description' => $description,
+            'me' => $me,
+            'sessionUser' => $sessionUser,
+            'follow' => $follow,
         ]);
     }
 }

+ 43 - 0
src/Controller/ProfileManagerController.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Controller;
+
+use App\Entity\User;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Annotation\Route;
+
+class ProfileManagerController extends AbstractController
+{
+    #[Route('/profile/{username}/follow', name: 'follow')]
+    public function follow($username): Response
+    {
+        $session = $this->get('session');
+        $em = $this->getDoctrine()->getManager();
+        $repository_profile = $em->getRepository(User::class);
+        $profile = $repository_profile->findOneBy(array('username' => $session->get('user')));
+        $followuser = $repository_profile->findOneBy(array('username' => $username));
+        $profile->addSubscription($followuser);
+        $followuser->addFollower($profile);
+        $em->persist($profile);
+        $em->persist($followuser);
+        $em->flush();
+        return $this->redirectToRoute('profile', ['username' => $username]);
+    }
+
+    #[Route('/profile/{username}/unfollow', name: 'unfollow')]
+    public function unfollow($username): Response
+    {
+        $session = $this->get('session');
+        $em = $this->getDoctrine()->getManager();
+        $repository_profile = $em->getRepository(User::class);
+        $profile = $repository_profile->findOneBy(array('username' => $session->get('user')));
+        $followuser = $repository_profile->findOneBy(array('username' => $username));
+        $profile->removeSubscription($followuser);
+        $followuser->removeFollower($profile);
+        $em->persist($profile);
+        $em->persist($followuser);
+        $em->flush();
+        return $this->redirectToRoute('profile', ['username' => $username]);
+    }
+}

+ 15 - 6
templates/profile/index.html.twig

@@ -3,8 +3,15 @@
 {% block title %}Profil de {{username}}{% endblock %}
 
 {% block body %}
-<a href="{{ path('disconnect') }}">Se déconnecter</a>
+Bonjour {{sessionUser}}, <a href="{{ path('disconnect') }}">Se déconnecter</a>
 <h1>{{ username }}</h1>
+{% if username != sessionUser %}
+    {% if not follow %}
+    <a href="/profile/{{username}}/follow">S'abonner</a>
+    {% else %}
+    <a href="/profile/{{username}}/unfollow">Se désabonner</a>
+    {% endif %}
+{% endif %}
 <dl>
     <dt>Description :</dt>
         <dd>{{ description }}</dd>
@@ -16,11 +23,13 @@
         {% endif %}
 </dl>
 <h2>Messages :</h2>
-{# <ul>
-    {% for message in messages %}
-        <li>{{ message.text }}</li>
-    {% endfor %}
-</ul> #}
+    {% if not privateNotAllowed %}
+        {# <ul>
+            {% for message in messages %}
+                <li>{{ message.text }}</li>
+            {% endfor %}
+        </ul> #}
+    {% endif %}
 <h2>Ajouter un message :</h2>
 {# {{ form_start(form) }}
 {{ form_errors(form) }}