src/Controller/user/MonProfilController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller\user;
  3. use App\Entity\Like;
  4. use App\Entity\Post;
  5. use App\Entity\User;
  6. use App\Form\user\PostType;
  7. use App\Entity\Commentaire;
  8. use App\Form\user\CommentaireType;
  9. use App\Service\FileUploader;
  10. use App\Repository\LikeRepository;
  11. use App\Repository\PostRepository;
  12. use App\Repository\UserRepository;
  13. use App\Repository\CommentaireRepository;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\HttpFoundation\File\UploadedFile;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. class MonProfilController extends AbstractController
  20. {
  21.     #[Route('utilisateur/profil/{id}'name'app_profil'methods:['GET''POST']) ]
  22.     public function profil(FileUploader $fileUploaderRequest $requestUserRepository $userRepoCommentaireRepository $commentaireRepository ,PostRepository $postint $id ): Response
  23.     {
  24.         $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  25.         // Résolution bug ParamConverter, on redirige l'utilisateur s'il va sur la page d'un untilisateur innéxistant.
  26.         $userId $this->getUser();
  27.         $user $userRepo->find($id);
  28.         if( $user == null ){
  29.             
  30.             return $this->redirectToRoute('app_profil',['id' => $userId->getId()], Response::HTTP_SEE_OTHER);
  31.         }
  32.         // PUBLICATION D'UN COMMENTAIRE
  33.             // On Vérifie si un commentaire à été envoyer
  34.             if(isset($_POST['submit'])){
  35.                 // On récupère l'id du post
  36.                 $postId $_POST['postId'];
  37.                 // On récupère l'objet du post grace à son ID
  38.                 $postSelected $post->find($postId); // On peux également utiliser le Manager Registry : $postSelected = $doctrine()->getRepository(Post::Class)->find($postId);
  39.                 // On crée un nouvel objet de la classe Commentaire
  40.                 $newCommentaire = new Commentaire();
  41.                 // On rempli les données
  42.                 $newCommentaire->setCreatedAt(new \DateTimeImmutable());
  43.                 $newCommentaire->setUser($userId);
  44.                 $newCommentaire->setContenu($_POST['commentaire']);
  45.                 $newCommentaire->setPost($postSelected);
  46.                 // On envoi tout ça en BDD
  47.                 $commentaireRepository->add($newCommentairetrue);
  48.                 return $this->redirectToRoute('app_profil', ['id' => $user->getId()]);
  49.             }     
  50.         // CREATION D'UN NOUVEAU POST
  51.              
  52.              // On crée un nouvel objet de la classe Post
  53.              
  54.              $newPost = new Post();
  55.              
  56.              // On apelle le formulaire des post
  57.              
  58.              $formPost $this->createForm(PostType::class, $newPost);
  59.              $formPost->handleRequest($request);
  60.              
  61.              
  62.             //On remplie les champs non null
  63.             $newPost->setUser($userId);
  64.             $newPost->setCreatedAt(new \DateTimeImmutable());
  65.             if ($formPost->isSubmitted() && $formPost->isValid()) {
  66.             
  67.             //Traite l'image 
  68.             $image $formPost->get('images')->getData();
  69.                if (!empty($image)) {
  70.                    $imageFileName $fileUploader->upload($image);
  71.                    $newPost->setImagePost('data/'$imageFileName);
  72.                }
  73.             $post->add($newPosttrue);
  74.             return $this->redirectToRoute('app_profil', ['id' => $user->getId()]);
  75.             
  76.               
  77.             ////Supression
  78.             //
  79.             //if ($this->isCsrfTokenValid('delete'.$posts->getId(), $request->request->get('_token'))) {
  80.             //    $postRepository->remove($posts, true);
  81.             //}
  82.                
  83.             }
  84.        
  85.         // PAGINATION
  86.             // On stocke la page actuelle dans une variable
  87.             $currentPage = (int)$request->query->get("pg"1);
  88.             // On détermine le nombre d'articles par page
  89.             $perPage 5;
  90.             // Calcul du premier article de la page
  91.             $firstObj = ($currentPage $perPage) - $perPage;
  92.             // On récupère le nombre d'articles et on compte le nombre de pages et on arrondi à l'entier suppérieur
  93.             $page ceil(count($post->findByUser($user)) / $perPage);
  94.             // On définis les articles à afficher en fonction de la page
  95.             $postPerPage $post->postPaginateUser($perPage$firstObj$user);
  96.             return $this->renderForm('user/profil_view/index.html.twig', [
  97.                 'formPost' => $formPost,
  98.                 "post"=> $postPerPage,
  99.                 "com" => $commentaireRepository->findByUser($user),
  100.                 "user"=> $user,
  101.                 "pages"=> $page,
  102.                 "currentPage"=>$currentPage,
  103.             
  104.             ]);
  105.     
  106.     }
  107.     // LIKES <3
  108.         #[Route('/post/{id}/likes'name'app_post_likes'methods: ['GET'])]
  109.     
  110.         public function like(Post $postLikeRepository $likeRepo): Response
  111.     
  112.         {
  113.             $user $this->getUser();
  114.         
  115.             // On empèche l'utilisateur de liker s'il n'est pas authentifié
  116.         
  117.             if(!$user) return $this->json([
  118.                 'code' => 403,
  119.                 'message' => "Vous n'êtes pas autorisé à visiter cette page",
  120.             ], 403);
  121.         
  122.             // Si l'utilisateur à déja liker le post, on retire le like
  123.         
  124.             if($post->isLikedByUser($user)) {
  125.                 $newLike $likeRepo->findOneBy([
  126.                     'post' => $post,
  127.                     'user' => $user,
  128.                 ]);
  129.             
  130.                 $likeRepo->remove($newLiketrue);
  131.             
  132.                 return $this->json([
  133.                     'code' => 200,
  134.                     'message' => 'Like bien supprimé',
  135.                     'likes' => $likeRepo->count(['post' => $post])
  136.                 ], 200);
  137.             }
  138.         
  139.             // Sinon on rajoute le like :) 
  140.         
  141.             $newLike = new Like();
  142.             $newLike->setPost($post)
  143.                  ->setUser($user);
  144.         
  145.                 $likeRepo->add($newLiketrue);
  146.         
  147.             return $this->json([
  148.             'code' => 200,
  149.             'message' => 'Like bien ajouté',
  150.             'likes' => $likeRepo->count(['post' => $post])
  151.             ], 200);
  152.         }
  153. }