ProfileController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Message;
  4. use App\Entity\User;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Session\Session;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. class ProfileController extends AbstractController
  10. {
  11. private function cmp_array($a, $b): int
  12. {
  13. if ($a->getDate() == $b->getDate()) {
  14. return 0;
  15. }
  16. return ($a->getDate() > $b->getDate()) ? -1 : 1;
  17. }
  18. #[Route('/profile/{username}', name: 'profile')]
  19. public function index($username): Response
  20. {
  21. // Vérifie si le profil est celui de l'utilisateur connecté.
  22. $sessionUser = $this->get('session')->get('user');
  23. $me = $sessionUser == $username ? true : false;
  24. // Connexion à la table User
  25. $em = $this->getDoctrine()->getManager();
  26. $repository_profile = $em->getRepository(User::class);
  27. // Recherche de l'utilisateur correspondant au profil de la route
  28. $profile = $repository_profile->findOneBy(array('username' => $username));
  29. if ($profile === null) {
  30. return new Response("Profil non existant");
  31. }
  32. // Recherche de l'utilisateur connecté à la session
  33. $loginuserprofile = $repository_profile->findOneBy(array('username' => $sessionUser));
  34. // Vérifie si l'utilisateur connecté est abonné au profil
  35. $follow = $loginuserprofile->getSubscriptions()->contains($profile) ? true : false;
  36. $subscriptionsList = $profile->getSubscriptions();
  37. $followersList = $profile->getFollowers();
  38. // Définition des variables du profil
  39. $username = $profile->getUsername();
  40. $isPrivate = $profile->getIsPrivate();
  41. $description = $profile->getDescription();
  42. $privateNotAllowed = false;
  43. if (!$me and $isPrivate and !$follow) {
  44. $privateNotAllowed = true;
  45. }
  46. // Récupération des messages de l'utilisateur
  47. $sub_msg = array();
  48. $rt = $profile->getRetweets();
  49. foreach ($rt as $r) {
  50. $og_message = $r->getOgMessage();
  51. $rt_message = new Message();
  52. $rt_message->setText($og_message->getText());
  53. $rt_message->setSender($og_message->getSender());
  54. $rt_message->setId($og_message->getId());
  55. $rt_message->setDate($r->getRtDate());
  56. array_push($sub_msg, $rt_message);
  57. }
  58. foreach ($profile->getMessages() as $msg_u) {
  59. array_push($sub_msg, $msg_u);
  60. }
  61. usort($sub_msg, array($this, "cmp_array"));
  62. return $this->render('profile/index.html.twig', [
  63. 'privateNotAllowed' => $privateNotAllowed,
  64. 'profileusername' => $username,
  65. 'isPrivate' => $isPrivate,
  66. 'description' => $description,
  67. 'me' => $me,
  68. 'username' => $sessionUser,
  69. 'follow' => $follow,
  70. 'subscriptionsList' => $subscriptionsList,
  71. 'followersList' => $followersList,
  72. 'messages' => $sub_msg,
  73. ]);
  74. }
  75. }