ProfileManagerController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. class ProfileManagerController extends AbstractController
  8. {
  9. #[Route('/profile/{username}/follow', name: 'follow')]
  10. public function follow($username): Response
  11. {
  12. $session = $this->get('session');
  13. // Pour éviter le crash, on redirige l'utilisateur s'il n'est pas connecté
  14. if (null === $session->get('user')) {
  15. return $this->redirectToRoute('login');
  16. }
  17. // Obtention de l'objet de l'utilisateur connecté et de l'utilisateur à s'abonner
  18. $em = $this->getDoctrine()->getManager();
  19. $repository_profile = $em->getRepository(User::class);
  20. $profile = $repository_profile->findOneBy(array('username' => $session->get('user')));
  21. $followuser = $repository_profile->findOneBy(array('username' => $username));
  22. // Ajout de l'abonnement dans la BDD
  23. $profile->addSubscription($followuser);
  24. $followuser->addFollower($profile);
  25. $em->persist($profile);
  26. $em->persist($followuser);
  27. $em->flush();
  28. return $this->redirectToRoute('profile', ['username' => $username]);
  29. }
  30. #[Route('/profile/{username}/unfollow', name: 'unfollow')]
  31. public function unfollow($username): Response
  32. {
  33. $session = $this->get('session');
  34. // Pour éviter le crash, on redirige l'utilisateur s'il n'est pas connecté
  35. if (null === $session->get('user')) {
  36. return $this->redirectToRoute('login');
  37. }
  38. // Obtention de l'objet de l'utilisateur connecté et de l'utilisateur à se désabonner
  39. $em = $this->getDoctrine()->getManager();
  40. $repository_profile = $em->getRepository(User::class);
  41. $profile = $repository_profile->findOneBy(array('username' => $session->get('user')));
  42. $followuser = $repository_profile->findOneBy(array('username' => $username));
  43. // Supression de l'abonnement de la BDD
  44. $profile->removeSubscription($followuser);
  45. $followuser->removeFollower($profile);
  46. $em->persist($profile);
  47. $em->persist($followuser);
  48. $em->flush();
  49. return $this->redirectToRoute('profile', ['username' => $username]);
  50. }
  51. }