src/Controller/ProjetsController.php line 81

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Projets;
  4. use App\Form\ProjetsType;
  5. use App\Entity\Commentaires;
  6. use App\Entity\ImageSlider;
  7. use App\Form\CommentairesType;
  8. use App\Repository\ProjetsRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Repository\UserProjetsRepository;
  11. use Doctrine\ORM\EntityManager;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\String\Slugger\SluggerInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  18. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  20. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  21. #[Route('/projets')]
  22. class ProjetsController extends AbstractController
  23. {
  24.     #[Route('/'name'app_projets_index'methods: ['GET'])]
  25.     public function index(ProjetsRepository $projetsRepository): Response
  26.     {
  27.         return $this->render('projets/index.html.twig', [
  28.             'projectsJs' => $projetsRepository->renderForJs(),
  29.         ]);
  30.     }
  31.     #[Route('/new'name'app_projets_new'methods: ['GET''POST'])]
  32.     public function new(Request $requestEntityManagerInterface $entityManagerSluggerInterface $slugger): Response
  33.     {
  34.         $projet = new Projets();
  35.         $form $this->createForm(ProjetsType::class, $projet);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             $uploadedFiles $request->files->all();
  39.             foreach ($uploadedFiles as $uploadedFile) {
  40.                 if ($uploadedFile) {
  41.                     $destination $this->getParameter('kernel.project_dir') . '/public/uploads/SliderImages';
  42.                     // Générer un nom de fichier unique
  43.                     $newFilename uniqid() . '.' $uploadedFile->guessExtension();
  44.                     // Déplacer le fichier vers le dossier de destination
  45.                     $uploadedFile->move(
  46.                         $destination,
  47.                         $newFilename
  48.                     );
  49.                     // Créez une nouvelle instance de ImageSlider et définissez le chemin
  50.                     $imageSlider = new ImageSlider();
  51.                     $imageSlider->setUrl($newFilename);
  52.                     $imageSlider->setProjet($projet);
  53.                     $projet->addImageSlider($imageSlider);
  54.                     $entityManager->persist($imageSlider);
  55.                     $entityManager->persist($projet);
  56.                 }
  57.             }
  58.             $entityManager->persist($projet);
  59.             $entityManager->flush();
  60.             return $this->redirectToRoute('app_user_projets_index', [], Response::HTTP_SEE_OTHER);
  61.         }
  62.         return $this->render('projets/new.html.twig', [
  63.             'projet' => $projet,
  64.             'form' => $form,
  65.         ]);
  66.     }
  67.     #[Route('/{id}'name'app_projets_show'methods: ['GET''POST'])]
  68.     public function show(Request $requestProjets $projetTokenStorageInterface $tokenStorageUserProjetsRepository $userProjetsRepository): Response
  69.     {
  70.         $commentaire = new Commentaires();
  71.         $form $this->createForm(CommentairesType::class, $commentaire);
  72.         $form->handleRequest($request);
  73.         if ($form->isSubmitted() && $form->isValid()) {
  74.             dd('test');
  75.         }
  76.         $token $tokenStorage->getToken();
  77.         if ($token) {
  78.             $user $token->getUser();
  79.         } else {
  80.             $user null;
  81.         }
  82.         $userHasProject false;
  83.         $userFinishedProject false;
  84.         $allProjects $userProjetsRepository->findBy(['projet' => $projet]);
  85.         // dd($allProjects);
  86.         if ($token && $user $token->getUser()) {
  87.             $userHasProject =  $userProjetsRepository->findOneBy(['user' => $user'projet' => $projet]);
  88.             if ($userHasProject) {
  89.                 $userFinishedProject $userHasProject->isCompleted();
  90.             }
  91.         }
  92.         // dd($user->getUserProjets());
  93.         return $this->render('projets/show.html.twig', [
  94.             'projet' => $projet,
  95.             'user' => $user,
  96.             'allProjects' => $allProjects,
  97.             'userFinishedProject' => $userFinishedProject,
  98.             'userProject' => $userHasProject,
  99.             'form' => $form,
  100.         ]);
  101.     }
  102.     #[Security("is_granted('ROLE_ADMIN')")]
  103.     #[Route('/{id}/edit'name'app_projets_edit'methods: ['GET''POST'])]
  104.     public function edit(Request $requestProjets $projetEntityManagerInterface $entityManagerSluggerInterface $slugger): Response
  105.     {
  106.         $form $this->createForm(ProjetsType::class, $projet);
  107.         $form->handleRequest($request);
  108.         if ($form->isSubmitted() && $form->isValid()) {
  109.             // dd($request);
  110.             $uploadedFiles $request->files->all();
  111.             foreach ($uploadedFiles as $uploadedFile) {
  112.                 if ($uploadedFile) {
  113.                     $destination $this->getParameter('kernel.project_dir') . '/public/uploads/SliderImages';
  114.                     // Générer un nom de fichier unique
  115.                     $newFilename uniqid() . '.' $uploadedFile->guessExtension();
  116.                     // Déplacer le fichier vers le dossier de destination
  117.                     $uploadedFile->move(
  118.                         $destination,
  119.                         $newFilename
  120.                     );
  121.                     // Créez une nouvelle instance de ImageSlider et définissez le chemin
  122.                     $imageSlider = new ImageSlider();
  123.                     $imageSlider->setUrl($newFilename);
  124.                     $imageSlider->setProjet($projet);
  125.                     $projet->addImageSlider($imageSlider);
  126.                     $entityManager->persist($imageSlider);
  127.                     $entityManager->persist($projet);
  128.                 }
  129.             }
  130.             $entityManager->flush();
  131.             return $this->redirectToRoute('app_projets_edit', ["id" => $projet->getId()], Response::HTTP_SEE_OTHER);
  132.         }
  133.         return $this->render('projets/edit.html.twig', [
  134.             'projet' => $projet,
  135.             'form' => $form,
  136.         ]);
  137.     }
  138.     #[Security("is_granted('ROLE_ADMIN')")]
  139.     #[Route('/{id}'name'app_projets_delete'methods: ['POST''GET'])]
  140.     public function delete(Request $requestProjets $projetEntityManagerInterface $entityManager): Response
  141.     {
  142.         if ($this->isCsrfTokenValid('delete' $projet->getId(), $request->request->get('_token'))) {
  143.             $entityManager->remove($projet);
  144.             $entityManager->flush();
  145.         }
  146.         return $this->redirectToRoute('app_projets_index', [], Response::HTTP_SEE_OTHER);
  147.     }
  148.     #[Security("is_granted('ROLE_ADMIN')")]
  149.     #[Route('/{id}/del'name'app_projets_delete_get'methods: ['GET'])]
  150.     public function deleteByJsx($idProjetsRepository $projetsRepositoryEntityManagerInterface $entityManager): Response
  151.     {
  152.         $project $projetsRepository->find($id);
  153.         if ($project) {
  154.             $entityManager->remove($project);
  155.             $entityManager->flush();
  156.         }
  157.         return $this->redirectToRoute('app_projets_index', [], Response::HTTP_SEE_OTHER);
  158.     }
  159.     #[Route('/image/{id}'name'app_projets_slider'methods: ['GET''POST'])]
  160.     public function newImgSlider(Request $requestProjets $projetProjetsRepository $projetsRepositoryEntityManagerInterface $entityManager): Response
  161.     {
  162.         if ($request->isMethod('POST')) {
  163.             // dd($request);
  164.             $uploadedFiles $request->files->all();
  165.             foreach ($uploadedFiles as $uploadedFile) {
  166.                 if ($uploadedFile) {
  167.                     $destination $this->getParameter('kernel.project_dir') . '/public/uploads/SliderImages';
  168.                     // Générer un nom de fichier unique
  169.                     $newFilename uniqid() . '.' $uploadedFile->guessExtension();
  170.                     // Déplacer le fichier vers le dossier de destination
  171.                     $uploadedFile->move(
  172.                         $destination,
  173.                         $newFilename
  174.                     );
  175.                     // Créez une nouvelle instance de ImageSlider et définissez le chemin
  176.                     $imageSlider = new ImageSlider();
  177.                     $imageSlider->setUrl($newFilename);
  178.                     $imageSlider->setProjet($projet);
  179.                     // Liez cette instance à votre projet
  180.                     $projet->addImageSlider($imageSlider);
  181.                     // Persistez les changements dans la base de données
  182.                     $entityManager->persist($imageSlider);
  183.                 }
  184.             }
  185.             $entityManager->flush();
  186.         }
  187.         $jsonProject $projetsRepository->renderForJs();
  188.         // Si c'est une requête GET, affichez le formulaire
  189.         return $this->render('/projets/editImage.html.twig', [
  190.             'projet' => $projet,
  191.             'jsonProject' => $jsonProject,
  192.             // Vos variables passées au template, si nécessaire
  193.         ]);
  194.     }
  195. }