Ver Fonte

Merge branch 'Nathan' into 'master'

Ajout des messages sur le profil et des paramètres de l'utilisateur

See merge request clement.krebs/twyrael!8
SPAETER NATHAN há 4 anos atrás
pai
commit
447a373c29

+ 7 - 5
src/Controller/HomeController.php

@@ -14,7 +14,8 @@ use Symfony\Component\Routing\Annotation\Route;
 
 class HomeController extends AbstractController
 {
-    private function cmp_array($a, $b): int {
+    private function cmp_array($a, $b): int
+    {
         if ($a == $b) {
             return 0;
         }
@@ -31,8 +32,8 @@ class HomeController extends AbstractController
         }
 
         $formBuilder = $this->createFormBuilder();
-        $formBuilder->add('text',\Symfony\Component\Form\Extension\Core\Type\TextType::class)
-                    ->setAction($this->generateUrl('home'));
+        $formBuilder->add('text', \Symfony\Component\Form\Extension\Core\Type\TextType::class)
+            ->setAction($this->generateUrl('home'));
         $form = $formBuilder->getForm();
 
         if ($request->getMethod() == 'POST') {
@@ -100,8 +101,9 @@ class HomeController extends AbstractController
 
         return $this->render('home/index.html.twig', [
             'controller_name' => 'HomeController',
-            "messages" => $sub_msg,
-            'form' => $form->createView()
+            'messages' => $sub_msg,
+            'form' => $form->createView(),
+            'username' => $session->get('user'),
         ]);
     }
 }

+ 3 - 5
src/Controller/LoginController.php

@@ -23,13 +23,11 @@ class LoginController extends AbstractController
 
         if (null !== $session->get('user')) {
             $session->save();
-            return $this->redirectToRoute('profile', ['username' => $session->get('user')]);
+            return $this->redirectToRoute('home');
         }
 
-        // $profile = new User();
-
         // Instanciation du fromBuilder
-        $formBuilder = $this->createFormBuilder(); //$profile);
+        $formBuilder = $this->createFormBuilder();
 
         // Ajout des champs
         $formBuilder
@@ -51,7 +49,7 @@ class LoginController extends AbstractController
                 if ($profile) {
                     if ($encoder->isPasswordValid($profile, $passwd)) {
                         $session->set('user', $id);
-                        return $this->redirectToRoute('profile', ['username' => $session->get('user')]);
+                        return $this->redirectToRoute('home');
                     }
                 }
                 return $this->render('login/index.html.twig', [

+ 75 - 0
src/Controller/ParametersController.php

@@ -0,0 +1,75 @@
+<?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;
+use Symfony\Component\Form\Extension\Core\Type\PasswordType;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+use Symfony\Component\Form\Extension\Core\Type\TextareaType;
+use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
+use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
+use Symfony\Component\HttpFoundation\Request;
+
+class ParametersController extends AbstractController
+{
+    #[Route('/profile/{username}/parameters', name: 'parameters')]
+    public function index(Request $request, UserPasswordEncoderInterface $encoder): Response
+    {
+        // Connexion à la BDD et récuperation de l'utilisateur
+        $sessionUser = $this->get('session')->get('user');
+        $em = $this->getDoctrine()->getManager();
+        $repository_profile = $em->getRepository(User::class);
+        $sessionUser = $this->get('session')->get('user');
+        $profile = $repository_profile->findOneBy(array('username' => $sessionUser));
+
+        // Création du formulaire
+        $values = array(
+            'description' => $profile->getDescription(),
+            'profil_prive' => $profile->getIsPrivate(),
+        );
+        $formBuilder = $this->createFormBuilder($values);
+
+        // Ajout des champs
+        $formBuilder
+            ->add('mot_de_passe', RepeatedType::class, array(
+                'type' => PasswordType::class,
+                'required' => false,
+                'first_options' => array('label' => 'Changer le mot de passe'),
+                'second_options' => array('label' => 'Répéter le nouveau mot de passe')
+            ))
+            ->add('description', TextareaType::class, ['required' => false, 'label' => 'Changer la description'])
+            ->add('profil_prive', CheckboxType::class, ['required' => false, 'label' => 'Profil privé'])
+            ->setAction($this->generateUrl('parameters', array('username' => $sessionUser)));
+
+        // Génération du formulaire
+        $form = $formBuilder->getForm();
+        
+        // Initialisation du message
+        $message = "";
+
+        // Si le formulaire modifié est envoyé (POST)
+        if ($request->getMethod() == 'POST') {
+            $form->handleRequest($request);
+            if ($form->isValid()) {
+                if ($form->get('mot_de_passe')->getData()) {
+                    $encoded_passwd = $encoder->encodePassword($profile, $form->get('mot_de_passe')->getData());
+                    $profile->setPassword($encoded_passwd);
+                }
+                $profile->setIsPrivate($form->get("profil_prive")->getData());
+                $profile->setDescription($form->get('description')->getData());
+                $em->persist($profile);
+                $em->flush();
+                $message = "Profil modifié.";
+            }
+        }
+
+        return $this->render('parameters/index.html.twig', [
+            'form' => $form->createView(),
+            'username' => $sessionUser,
+            'message' => $message,
+        ]);
+    }
+}

+ 38 - 5
src/Controller/ProfileController.php

@@ -10,26 +10,56 @@ use Symfony\Component\Routing\Annotation\Route;
 
 class ProfileController extends AbstractController
 {
+    private function cmp_array($a, $b): int
+    {
+        if ($a == $b) {
+            return 0;
+        }
+        return ($a > $b) ? -1 : 1;
+    }
+
     #[Route('/profile/{username}', name: 'profile')]
     public function index($username): Response
     {
+        // Vérifie si le profil est celui de l'utilisateur connecté.
+        $sessionUser = $this->get('session')->get('user');
+        $me = $sessionUser == $username ? true : false;
+
+        // Connexion à la table User
         $em = $this->getDoctrine()->getManager();
         $repository_profile = $em->getRepository(User::class);
+
+        // Recherche de l'utilisateur correspondant au profil de la route
         $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");
         }
+
+        // Recherche de l'utilisateur connecté à la session        
+        $loginuserprofile = $repository_profile->findOneBy(array('username' => $sessionUser));
+
+        // Vérifie si l'utilisateur connecté est abonné au profil
+        $follow = $loginuserprofile->getSubscriptions()->contains($profile) ? true : false;
+
+        $subscriptionsList = $profile->getSubscriptions();
+        $followersList = $profile->getFollowers();
+
+        // Définition des variables du profil
         $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)) {
+        if (!$me and $isPrivate and !$follow) {
             $privateNotAllowed = true;
         }
-        $follow = $loginuserprofile->getSubscriptions()->contains($profile) ? true : false;
+
+        // Récupération des messages de l'utilisateur
+        $sub_msg = array();
+        foreach ($profile->getMessages() as $msg_u) {
+            array_push($sub_msg, $msg_u);
+        }
+        usort($sub_msg, array($this, "cmp_array"));
+
         return $this->render('profile/index.html.twig', [
             'controller_name' => 'ProfileController',
             'privateNotAllowed' => $privateNotAllowed,
@@ -39,6 +69,9 @@ class ProfileController extends AbstractController
             'me' => $me,
             'sessionUser' => $sessionUser,
             'follow' => $follow,
+            'subscriptionsList' => $subscriptionsList,
+            'followersList' => $followersList,
+            'messages' => $sub_msg,
         ]);
     }
 }

+ 2 - 4
src/Controller/RegisterController.php

@@ -12,7 +12,6 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
 use Symfony\Component\Form\Extension\Core\Type\PasswordType;
 use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
 use Symfony\Component\Form\Extension\Core\Type\TextareaType;
-use Symfony\Component\Form\Extension\Core\Type\EmailType;
 use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
 
 class RegisterController extends AbstractController
@@ -26,18 +25,17 @@ class RegisterController extends AbstractController
 
         if (null !== $session->get('user')) {
             $session->save();
-            return $this->redirectToRoute('profile', ['username' => $session->get('user')]);
+            return $this->redirectToRoute('home');
         }
 
         $user = new User();
 
         // Instanciation du fromBuilder
-        $formBuilder = $this->createFormBuilder(); //$profile);
+        $formBuilder = $this->createFormBuilder();
 
         // Ajout des champs
         $formBuilder
             ->add('identifiant', TextType::class)
-            ->add('courriel', EmailType::class, ['required' => false])
             ->add('mot_de_passe', RepeatedType::class, array(
                 'type' => PasswordType::class,
                 'first_options' => array('label' => 'Mot de passe'),

+ 1 - 1
templates/home/index.html.twig

@@ -3,13 +3,13 @@
 {% block title %}Accueil{% endblock %}
 
 {% block body %}
+    <a href="{{ path('profile', {'username': username }) }}">Aller sur mon profil</a><br>
     {{ form_start(form) }}
     {{ form_errors(form) }}
     {{ form_widget(form) }} <input type="submit">
     {{ form_end(form) }}
     <ul>
     {% for msg in messages %}
-
                 <li>
                     <a href={{ path('profile', {'username': msg.sender.getUsername() }) }}>{{ msg.sender.getUsername() }}</a>
                     <div>{{ msg.text | striptags('<a>') | raw }}</div>

+ 15 - 0
templates/parameters/index.html.twig

@@ -0,0 +1,15 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Paramètres{% endblock %}
+
+{% block body %}
+<a href="{{ path('profile', {'username': username }) }}">Retourner sur mon profil</a><br>
+{{ form_start(form) }}
+    {{ form_errors(form) }}
+    {{ form_widget(form) }}
+    <input type="submit">
+    {% if message %}
+        <div>{{ message }}</div>
+    {% endif %}
+{{ form_end(form) }}
+{% endblock %}

+ 28 - 14
templates/profile/index.html.twig

@@ -3,13 +3,18 @@
 {% block title %}Profil de {{username}}{% endblock %}
 
 {% block body %}
+<a href="{{ path('home') }}">Retourner au flux de messages</a><br>
 Bonjour {{sessionUser}}, <a href="{{ path('disconnect') }}">Se déconnecter</a>
 <h1>{{ username }}</h1>
-{% if username != sessionUser %}
+{% if me %}
+    <a href="{{ path('parameters', {'username': username }) }}">Paramètres</a>
+{% endif %}
+{% if not me %}
     {% if not follow %}
-    <a href="/profile/{{username}}/follow">S'abonner</a>
+    <a href="{{ path('follow',{'username': username }) }}">S'abonner</a>
+    
     {% else %}
-    <a href="/profile/{{username}}/unfollow">Se désabonner</a>
+    <a href="{{ path('unfollow',{'username': username }) }}">Se désabonner</a>
     {% endif %}
 {% endif %}
 <dl>
@@ -22,18 +27,27 @@ Bonjour {{sessionUser}}, <a href="{{ path('disconnect') }}">Se déconnecter</a>
         <dd>Public</dd>
         {% endif %}
 </dl>
+<h2>Abonnés :</h2>
+<ul>
+    {% for follow in followersList %}
+    <li>{{ follow.username }}</li>
+    {% endfor %}
+</ul>
+<h2>Abonnements :</h2>
+<ul>
+{% for sub in subscriptionsList %}
+    <li>{{ sub.username }}</li>
+{% endfor %}
+</ul>
 <h2>Messages :</h2>
     {% if not privateNotAllowed %}
-        {# <ul>
-            {% for message in messages %}
-                <li>{{ message.text }}</li>
-            {% endfor %}
-        </ul> #}
+    <ul>
+        {% for msg in messages %}
+        <li>
+            <div>{{ msg.sender.getUsername() }}</div>
+            <div>{{ msg.text }}</div>
+        </li>
+        {% endfor %}
+    </ul>
     {% endif %}
-<h2>Ajouter un message :</h2>
-{# {{ form_start(form) }}
-{{ form_errors(form) }}
-{{ form_widget(form) }}
-<input type="submit">
-{{ form_end(form) }} #}
 {% endblock %}