src/Controller/App/Model/ModelController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller\App\Model;
  3. use App\Entity\Armoire;
  4. use App\Entity\Categorie;
  5. use App\Entity\Classeur;
  6. use App\Entity\Etagere;
  7. use App\Entity\Localisation;
  8. use App\Entity\Model;
  9. use App\Entity\Page;
  10. use App\Entity\SousCategorie;
  11. use App\Entity\Tag;
  12. use App\Form\SearchFilterType;
  13. use App\Form\SearchFormType;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Knp\Component\Pager\PaginatorInterface;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use App\Form\ModelFormType;
  21. #[Route('/model'name'model_')]
  22. class ModelController extends AbstractController
  23. {
  24.     private $ModelRepository;
  25.     #[Route('/collection'name'collection'methods: ['GET''POST'])]
  26.     //Méthode pour afficher le détail du modèle
  27.     public function collection(EntityManagerInterface $entityManagerRequest $requestPaginatorInterface $paginator): Response
  28.     {
  29.         $form $this->createForm(SearchFilterType::class, null, [
  30.             'method' =>'GET',
  31.         ]);
  32.         $form2 $this->createForm(SearchFormType::class, null, [
  33.             'method' => 'GET',
  34.         ]);
  35.         $form->handleRequest($request);
  36.         $form2->handleRequest($request);
  37.         //Pour que la grille ou liste reste d'une page à l'autre
  38.         $mode $request->query->get('mode''grid');
  39.         $allModels $entityManager->getRepository(Model::class)->findAll();
  40.         //Count
  41.         $count count($allModels);
  42.         $pageCount 0;
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.             $data $form->getData();
  45.             $allModels $entityManager->getRepository(Model::class)->getByFilter($data);
  46.             $pageCount count($allModels);
  47.         }
  48.         elseif ($form2->isSubmitted() && $form2->isValid()){
  49.             $data $form2->getData();
  50.             $allModels $entityManager->getRepository(Model::class)->getByFilter($data);
  51.             $pageCount count($allModels);
  52.         }
  53.         elseif(!$form2->isSubmitted() && !$form->isSubmitted()) {
  54.             // Si le formulaire n'est pas soumis, récupérer tous les modèles
  55.             $allModels $entityManager->getRepository(Model::class)->findAll();
  56.             $pageCount count($allModels);
  57.         }
  58.         // Tri par ordre alphabétique avec le Titre
  59.         usort($allModels, function($a$b) {
  60.             return strcmp($a->getTitre(), $b->getTitre());
  61.         });
  62.         //Pagination
  63.         $models $paginator->paginate(
  64.             $allModels/* query NOT result */
  65.             $request->query->getInt('p'1), /*page number*/
  66.             /*limit per page*/
  67.         );
  68. //        $models = $this->ModelRepository->findBy($limit, $offset);
  69.         return $this->render('model/collection.html.twig', [
  70.             'form' => $form->createView(),
  71.             'form2' => $form2->createView(),
  72.             'models' => $models,
  73.             'count' => $count,
  74.             'pageCount'=> $pageCount,
  75.             'mode' => $mode,
  76.         ]);
  77.     }
  78.     #[Route('/echange'name'echange'methods: ['GET'])]
  79.     //Méthode pour afficher le détail du modèle
  80.     public function echange(EntityManagerInterface $entityManager): Response
  81.     {
  82.         //Count
  83.         $models $entityManager->getRepository(Model::class)->getDoublons();
  84.         $count count($models);
  85.         // Tri par ordre alphabétique avec le Titre
  86.         usort($models, function($a$b) {
  87.             return strcmp($a->getTitre(), $b->getTitre());
  88.         });
  89.         return $this->render('model/echange.html.twig', [
  90.             'models' => $models,
  91.             'count' => $count,
  92.         ]);
  93.     }
  94.     #[Route('/create'name'create'methods: ['GET''POST'])]
  95.     public function create(Request $requestEntityManagerInterface $entityManager): Response
  96.     {
  97.         //Condition sur l'accessibilité
  98.         if (!$this->isGranted('ROLE_ADMIN')) {
  99.             return $this->redirectToRoute('app_model_collection');
  100.         }
  101.         // Création d'un nouvel objet Model
  102.         $model = new Model();
  103.         // Création du formulaire basé sur ModelFormType
  104.         $form $this->createForm(ModelFormType::class, $model);
  105.         $form->handleRequest($request);
  106.         // Vérification de la validité du formulaire et enregistrement des données
  107.         if ($form->isSubmitted() && $form->isValid()) {
  108.             /*Récupération des catégories sélectionnées dans le formulaire
  109.              recherche en bdd et associe la catégorie à la collection lié*/
  110.             $categorieIds $form->get('categories')->getData();
  111.             foreach ($categorieIds as $categorieId) {
  112.                 $categorieObject $entityManager->getRepository(Categorie::class)->find($categorieId);
  113.                 $model->addCategorie($categorieObject);
  114.             }
  115.             $scategorieIds $form->get('sousCategories')->getData();
  116.             foreach ($scategorieIds as $scategorieId) {
  117.                 $scategorieObject $entityManager->getRepository(SousCategorie::class)->find($scategorieId);
  118.                 $model->addSousCategorie($scategorieObject);
  119.             }
  120.             /*Les tags sont récupérés, recherchés, et ajouter en
  121.             bdd si pas trouvés*/
  122.             $tagString $form->get('tags')->getData();
  123.             $tagsList explode(','$tagString);
  124.             foreach ($tagsList as $tag) {
  125.                 $tag=trim($tag);
  126.                 $tagObject $entityManager->getRepository(Tag::class)->findOneBy(['nom' => $tag]);
  127.                 //Faire la vérif du même tag saisi 2 fois
  128.                 if (!$tagObject) {
  129.                     $tagObject = new Tag();
  130.                     $tagObject->setNom($tag);
  131.                     $entityManager->persist($tagObject);
  132.                 }
  133.                 $model->addTag($tagObject);
  134.             }
  135.             /*Récupération de la localisation, creation d'un objet,
  136.             association au modèle et enregistrement*/
  137.             $localisationVille $form->get('localisation_ville')->getData();
  138.             $localisationDepartement $form->get('localisation_departement')->getData();
  139.             $localisationRegion $form->get('localisation_region')->getData();
  140.             $localisationPays $form->get('localisation_pays')->getData();
  141.             // Création et association de la localisation au modèle
  142.             $localisationForm = new Localisation();
  143.             $localisationForm->setVille($localisationVille);
  144.             $localisationForm->setDepartement($localisationDepartement);
  145.             $localisationForm->setRegion($localisationRegion);
  146.             $localisationForm->setPays($localisationPays);
  147.             $model->setLocalisation($localisationForm);
  148.             $entityManager->persist($localisationForm);
  149.             $entityManager->persist($model);
  150.             $entityManager->flush();
  151.             // Récupération des noms
  152.             $armoire $form->get('armoire_nom')->getData();
  153.             $classeur $form->get('classeur_nom')->getData();
  154.             $numeroPage $form->get('page_numero')->getData();
  155.             //if exists page with id_classeur = $classeur
  156.             //: $page = page que t'as trouvé
  157.             $page $entityManager->getRepository(Page::class)->findOneBy(['classeur' => $classeur'numero' => $numeroPage]);
  158.             if (!$page){
  159.                 $page = new Page();
  160.                 $page->setNumero($numeroPage);
  161.                 $classeur->addPage($page);
  162.             }
  163.             $model->addPage($page);
  164.             // Enregistrement des emplacements dans la base de données
  165.             $entityManager->persist($armoire);
  166.             $entityManager->persist($classeur);
  167.             $entityManager->persist($page);
  168.             $entityManager->persist($model);
  169.             $entityManager->flush();
  170.             //On redirige l'utilisateur vers le détail du modèle
  171.             return $this->redirectToRoute('app_model_show', ['id' => $model->getId()]);
  172.         }
  173.         //On passe le formulaire à la vue
  174.         return $this->render('model/create.html.twig', [
  175.             'form' => $form->createView(),
  176.         ]);
  177.     }
  178.     #[Route('/{id}'name'show'methods: ['GET'])]
  179.     public function show(Model $modelRequest $request): Response
  180.     {
  181.         $referer $request->headers->get('referer');
  182.         return $this->render('model/show.html.twig', [
  183.             'model' => $model,
  184.             'back_page' => $referer,
  185.         ]);
  186.     }
  187.     #[Route('/edit/{id}'name'edit'methods: ['GET''POST'])]
  188.     public function edit(Model $modelRequest $requestEntityManagerInterface $entityManager): Response
  189.     {
  190.         if (!$this->isGranted('ROLE_ADMIN')) {
  191.             return $this->redirectToRoute('app_model_collection');
  192.         }
  193.         // Création du formulaire basé sur ModelFormType et pré-remplissage avec les valeurs existantes du modèle
  194.         $form $this->createForm(ModelFormType::class, $model);
  195.         $form->handleRequest($request);
  196.         if ($form->isSubmitted() && $form->isValid()) {
  197.             // Vérification de la soumission du formulaire et de sa validité
  198.             // Récupérer le numéro de page depuis le formulaire
  199.             $pageNumero $form->get('page_numero')->getData();
  200.             $classeur $form->get('classeur_nom')->getData();
  201.             $etagere $form->get('etagere_nom')->getData();
  202.             $armoire $form->get('armoire_nom')->getData();
  203.             // On récupère l'entité liée au modèle
  204.             $page $model->getPages()->first();
  205.             //On vérifie si il y a une page associée
  206.             if (!$page) {
  207.                 // Si aucune page n'est associée, créer une nouvelle page
  208.                 $page = new Page();
  209.                 //On l'ajoute au model
  210.                 $model->addPage($page);
  211.             }
  212.             // Mets à jour le numéro de page et les éléments associés liés
  213.             $page->setNumero($pageNumero);
  214.             $page->setClasseur($classeur);
  215.             $classeur->setEtagere($etagere);
  216.             $etagere->setArmoire($armoire);
  217.             /*Récupération de la localisation, creation d'un objet,
  218.             association au modèle et enregistrement*/
  219.             $localisationVille $form->get('localisation_ville')->getData();
  220.             $localisationDepartement $form->get('localisation_departement')->getData();
  221.             $localisationRegion $form->get('localisation_region')->getData();
  222.             $localisationPays $form->get('localisation_pays')->getData();
  223.             // Création et association de la localisation au modèle
  224.             $localisationForm =$model->getLocalisation();
  225.             if(is_null($model->getLocalisation())) {
  226.                 $localisationForm = new Localisation();
  227.             }
  228.             $localisationForm->setVille($localisationVille);
  229.             $localisationForm->setDepartement($localisationDepartement);
  230.             $localisationForm->setRegion($localisationRegion);
  231.             $localisationForm->setPays($localisationPays);
  232.             $model->setLocalisation($localisationForm);
  233.             $entityManager->persist($localisationForm);
  234.             $tagsText $form->get('tags')->getData();
  235.             $tagNames explode(','$tagsText);
  236.             // Supprimez tous les tags existants du modèle
  237.             foreach ($model->getTags() as $tag) {
  238.                 $model->removeTag($tag);
  239.             }
  240.             // Ajoutez les nouveaux tags individuels
  241.             foreach ($tagNames as $tagName) {
  242.                 $tagName=trim($tagName);
  243.                 // Recherchez si le tag existe déjà, sinon créez-le
  244.                 $tag $entityManager->getRepository(Tag::class)->findOneBy(['nom' => $tagName]);
  245.                 if (!$tag) {
  246.                     $tag = new Tag();
  247.                     $tag->setNom($tagName);
  248.                     $entityManager->persist($tag);
  249.                 }
  250.                 $model->addTag($tag);
  251.             }
  252.             $entityManager->persist($model);
  253.             $entityManager->flush();
  254.             // Redirection vers la page de détail du modèle modifié
  255.             return $this->redirectToRoute('app_model_show', ['id' => $model->getId()]);
  256.         }
  257.         // Affichage du formulaire de modification
  258.         return $this->render('model/create.html.twig', [
  259.             'form' => $form->createView(),
  260.         ]);
  261.     }
  262.     #[Route('/delete/{id}'name'delete')]
  263.     public function delete(Model $modelRequest $requestEntityManagerInterface $entityManager): Response
  264.     {
  265.         if (!$this->isGranted('ROLE_ADMIN')) {
  266.             return $this->redirectToRoute('app_model_collection');
  267.         }
  268.         //Partie ajoutée
  269.         $id $request->attributes->get('id');
  270.         $model $entityManager->getRepository(Model::class)->find($id);
  271.         if (!$model) {
  272.             throw $this->createNotFoundException('Model not found');
  273.         }
  274.         //
  275.         foreach ($model->getPhotos() as $photo){
  276.             $path $photo->getChemin();
  277.             if (file_exists($_SERVER['DOCUMENT_ROOT'].$path)) {
  278.                 unlink($_SERVER['DOCUMENT_ROOT'].$path);
  279.                 $model->removePhoto($photo);
  280.                 $entityManager->remove($photo);
  281.             }
  282.         }
  283. //        $entityManager->flush();
  284.         $entityManager->remove($model);
  285.         $entityManager->flush();
  286.         return $this->redirectToRoute('app_model_collection');
  287.     }
  288. }