src/Controller/HomeController.php line 130

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\Message;
  5. use App\Entity\Materiel;
  6. use App\Form\CompteType;
  7. use App\Entity\Protocole;
  8. use App\Form\MessageType;
  9. use App\Entity\Commentaire;
  10. use App\Form\CommentaireType;
  11. use Symfony\Component\Mime\Email;
  12. use App\Repository\PageRepository;
  13. use App\Repository\UserRepository;
  14. use App\Repository\SliderRepository;
  15. use App\Repository\ArticleRepository;
  16. use App\Repository\LogPageRepository;
  17. use App\Repository\ContactsRepository;
  18. use App\Repository\MaterielRepository;
  19. use App\Repository\CategorieRepository;
  20. use App\Repository\ProtocoleRepository;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use App\Repository\CommentaireRepository;
  23. use App\Repository\MaterielphotoRepository;
  24. use App\Repository\ProtocolephotoRepository;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\Mailer\MailerInterface;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\Validator\Constraints\Length;
  31. class HomeController extends AbstractController
  32. {
  33.     /** UTILISATEUR CONNECTE */
  34.     private UserRepository $userRepository;
  35.     public function __construct(UserRepository $userRepository) {
  36.         $this->userRepository $userRepository;
  37.     }
  38.     private function getUserEntity() : ?User {
  39.         $user $this->getUser(); 
  40.         if($user == null) return null;           
  41.         $email $user->getUserIdentifier();
  42.         return  $this->userRepository->findOneBy(["email" => $email]);
  43.     }
  44.     #[Route('/'name'home_page')]
  45.     public function index(PageRepository $pageRepository
  46.                           ArticleRepository $articleRepository
  47.                           CategorieRepository $categorieRepository,
  48.                           ProtocoleRepository $protocoleRepository,
  49.                           SliderRepository $sliderRepository,
  50.                           LogPageRepository $logPageRepository): Response
  51.     {
  52.         $page1 $pageRepository->findOneBy([ 'url' => 'pourquoi-nos-protocoles']);
  53.         $page2 $pageRepository->findOneBy([ 'url' => 'organisation-du-cabinet']);
  54.         $page3 $pageRepository->findOneBy([ 'url' => 'la-bonne-selection-du-materiel']);        
  55.         $articles $articleRepository->findBy([], ['dtpubli' => 'desc'], 4);        
  56.         $categories $categorieRepository->findOneBy(['titre' => 'Protocoles'])->getCategories(); 
  57.         $protocoles $protocoleRepository->findBy(['favori' => '1'], ['titre' => 'asc']); 
  58.         
  59.         $logPageRepository->addLog("accueil""/"$this->getUser());
  60.         return $this->render('home/index.html.twig', [   
  61.             'page1'=> $page1,
  62.             'page2'=> $page2,
  63.             'page3'=> $page3,
  64.             'articles'=> $articles,
  65.             'categories'=> $categories,
  66.             'protocoles'=> $protocoles,
  67.             'sliders' => $sliderRepository->findAll(),
  68.         ]);
  69.     }
  70.     #[Route('/sousmenus/{code}'name'sousmenus_menu')]
  71.     public function getsousmenus($codeCategorieRepository $categorieRepository): Response
  72.     {
  73.         switch($code) {
  74.             case 'protocoles':
  75.                 return $this->render('menu/sousmenus.html.twig', [
  76.                     'categorie' => $categorieRepository->findOneBy(['titre' => 'Protocoles']),
  77.                     'type' => 1,
  78.                 ]);
  79.             case 'materiels':
  80.                 return $this->render('menu/sousmenus.html.twig', [
  81.                     'categorie' => $categorieRepository->findOneBy(['titre' => 'Matériels']),
  82.                     'type' => 2,
  83.                 ]);
  84.             default :
  85.                 return new Response('');
  86.         }        
  87.     }
  88.     /***********************************************************************************************
  89.      * PAGES STATIQUES, ARTICLE et CONTACTS
  90.      */
  91.     #[Route('/page/{url}'name'static_page')]
  92.     public function staticpage($urlPageRepository $pageRepositoryLogPageRepository $logPageRepository): Response
  93.     {
  94.         $page $pageRepository->findOneBy([ 'url' => $url]);
  95.         if($page == null) {
  96.             return $this->redirectToRoute('home_page');
  97.         }
  98.         $logPageRepository->addLog($url"/page/".$url$this->getUser());
  99.         return $this->render('home/pagestatic.html.twig', [ 
  100.             'page'=> $page
  101.         ]);
  102.     }
  103.     #[Route("/articles"name:"articles_page")]
  104.     public function articlespage(ArticleRepository $articleRepositoryLogPageRepository $logPageRepository): Response
  105.     {
  106.         $articles $articleRepository->findBy([], [ 'dtpubli' => 'desc']);
  107.         return $this->render('home/pagearticles.html.twig', [ 
  108.             'articles'=> $articles
  109.         ]);
  110.     }
  111.     
  112.     #[Route("/article/{url}"name:"article_page")]
  113.     public function articlepage($urlArticleRepository $articleRepositoryLogPageRepository $logPageRepository): Response
  114.     {
  115.         $article $articleRepository->findOneBy([ 'url' => $url]);
  116.         if($article == null) {
  117.             return $this->redirectToRoute('home_page');            
  118.         }
  119.         $logPageRepository->addLog($url"/article/".$url$this->getUser());
  120.         return $this->render('home/pagearticle.html.twig', [ 
  121.             'article'=> $article
  122.         ]);        
  123.     }
  124.     #[Route("/contacts"name:"contacts_page")]
  125.     public function contactspage(Request $requestMailerInterface $mailer
  126.                                  ContactsRepository $contactsRepository,
  127.                                  LogPageRepository $logPageRepository,
  128.                                  EntityManagerInterface $entityManager): Response
  129.     {
  130.         //les infos 
  131.         $contactmessage $contactsRepository->findOneBy(['type' => 'message']);
  132.         $liens $contactsRepository->findBy(['type' => 'lien']);
  133.         $admins $contactsRepository->findBy(['type' => 'admin']);
  134.         
  135.         //le message 
  136.         $message = new Message(); 
  137.         $form $this->createForm(MessageType::class, $message);
  138.         $msgretour ="";
  139.     
  140.         $form->handleRequest($request);     
  141.         if($form->isSubmitted() && $form->isValid()){
  142.             $message $form->getData();
  143.             $entityManager->persist($message);
  144.             $entityManager->flush();
  145.             //envoi de l'email
  146.             $body 'Message de '.$message->getNom().' <br/>Email : '.$message->getEmail().' <br/>'.$message->getMessage();
  147.             //$adresse = $contactmessage->getAdresse();
  148.             $adresse "nadine@aesisoft.fr";
  149.             $email = (new Email())
  150.             ->from('website@lodeao.com')
  151.             ->to($adresse)
  152.             ->subject('LODEAO : '.$message->getObjet())
  153.             ->text($body)
  154.             ->html($body);
  155.             $mailer->send($email);       
  156.             $msgretour ="Votre message a été envoyé. Merci.";
  157.             
  158.             //reset du message
  159.             $message = new Message(); 
  160.             $form $this->createForm(MessageType::class, $message);
  161.         }
  162.         $logPageRepository->addLog("contacts""/contacts"$this->getUser());
  163.         return $this->render('home/contacts.html.twig', [
  164.             'form' => $form->createView(),
  165.             'contactmessage' => $contactmessage,
  166.             'msgretour' => $msgretour,
  167.             'liens' => $liens,
  168.             'admins' => $admins,
  169.         ]);
  170.     }
  171.     /***********************************************************************************************
  172.      * CATEGORIE, URGENCES, MATERIEL et PROTOCOLE
  173.      */
  174.     #[Route("/categoriefiltre/{type}/{code}/{coche}"name:"categoriefiltre_page"defaults: ["code"=> """coche"=> ""])]
  175.     public function categoriefiltrepage($type$code$coche,
  176.                                         ProtocoleRepository $protocoleRepository
  177.                                         MaterielRepository $materielRepository
  178.                                         CategorieRepository $categorieRepository,
  179.                                         ProtocolephotoRepository $protocolephotoRepository,
  180.                                         MaterielphotoRepository $materielphotoRepository,
  181.                                         LogPageRepository $logPageRepository): Response
  182.     {        
  183.         $titre="";
  184.         $soustitre="";
  185.         $description="";
  186.         $protocoles = [];
  187.         $photos = [];
  188.         $materiels = [];
  189.         $sscategories = [];
  190.         $parentid=0;
  191.         if($code=='U'$code=34;
  192.                 
  193.         if($type == 1) {
  194.             $titre="Protocoles";
  195.             if(is_numeric($code) && $code != '1') {
  196.                 $catid intval($code);
  197.                 $categfiltre $categorieRepository->find($catid);    
  198.                 if($categfiltre != null &&$categfiltre->getParent() != null) {
  199.                     $parentid=$categfiltre->getParent()->getId();
  200.                     if($parentid >) {
  201.                         $parentid=$categfiltre->getParent()->getParent()->getId(); 
  202.                         if($parentid <) { $parentid=$categfiltre->getParent()->getId(); }
  203.                     }   
  204.                 }                        
  205.                 $soustitre =$categfiltre->getTitre();     
  206.                 $description $categfiltre->getDescription();                             
  207.                 $protocoles $protocoleRepository->findByCategorie($categfiltre);
  208.                 $sscategories $categorieRepository->findBy(['parent' => $catid],['titre' => 'asc']);
  209.                 // if(count($sscategories) >0 ){
  210.                 //     foreach($sscategories as $sscatg){
  211.                 //         $temp = $protocoleRepository->findByCategorie($sscatg);
  212.                 //         if(count($temp)) $protocoles = array_merge($protocoles, $temp);
  213.                 //     }
  214.                 // }                                
  215.             }
  216.             else {
  217.                 //Catégorie racine Protocoles
  218.                 $protocoles $protocoleRepository->findBy([],['titre' => 'asc']);
  219.                 $categfiltre $categorieRepository->find(1);       
  220.                 $description $categfiltre->getDescription(); 
  221.             }      
  222.             //recup des photos
  223.             foreach($protocoles as $p){
  224.                 $photo $protocolephotoRepository->findOneBy(['protocole' => $p], ['ordre' => 'asc']);
  225.                 if($photo != null ){
  226.                     $photos[$p->getId()] = $photo->getImage()->getUrlfichier();
  227.                 }
  228.                 else {
  229.                     $photos[$p->getId()] = null;
  230.                 }
  231.             } 
  232.         }
  233.         else {
  234.             $titre="Matériels";
  235.             if(is_numeric($code) && $code 1) {
  236.                 $catid intval($code);
  237.                 $categfiltre $categorieRepository->find($catid);  
  238.                 if($categfiltre->getParent() != null) {
  239.                     $parentid=$categfiltre->getParent()->getId();
  240.                     if($parentid >) {
  241.                         $parentid=$categfiltre->getParent()->getParent()->getId(); 
  242.                         if($parentid <) { $parentid=$categfiltre->getParent()->getId(); }
  243.                     } 
  244.                 }                          
  245.                 $soustitre =$categfiltre->getTitre();      
  246.                 $description $categfiltre->getDescription();
  247.                 $materiels $materielRepository->findByCategorie($categfiltre$coche);
  248.                 $sscategories $categorieRepository->findBy(['parent' => $catid],['titre' => 'asc']);
  249.                 // if(count($sscategories) >0 ){
  250.                 //     foreach($sscategories as $sscatg){
  251.                 //         $temp = $protocoleRepository->findByCategorie($sscatg);
  252.                 //         if(count($temp)) $materiels = array_merge($materiels, $temp);
  253.                 //     }
  254.                 // }
  255.             }
  256.             else{
  257.                 switch($coche) {
  258.                     case 'S':
  259.                         $materiels $materielRepository->findBy(['codeSC' => $coche'archive' => false],['nom' => 'asc']);
  260.                         $titre="Matériels";
  261.                         $soustitre ="Matériels stérilisables";
  262.                         break;
  263.                     case 'C':
  264.                         $materiels $materielRepository->findBy(['codeSC' => $coche'archive' => false],['nom' => 'asc']);
  265.                         $titre="Matériels";
  266.                         $soustitre ="Matériels consommables";
  267.                         break;
  268.                     case 'E':
  269.                         $materiels $materielRepository->findBy(['codeSC' => $coche'archive' => false],['nom' => 'asc']);
  270.                         $titre="Matériels";
  271.                         $soustitre ="Equipements";
  272.                         break;
  273.                     case 'P':
  274.                         $materiels $materielRepository->findBy(['codePA' => $coche'archive' => false],['nom' => 'asc']);
  275.                         $titre="Matériels";
  276.                         $soustitre ="Matériels du plateau Praticien";
  277.                         break;
  278.                     case 'A':
  279.                         $materiels $materielRepository->findBy(['codePA' => $coche'archive' => false],['nom' => 'asc']);
  280.                         $titre="Matériels";
  281.                         $soustitre ="Matériels du plateau Assistante";
  282.                         break;
  283.                     
  284.                     default :
  285.                         //Catégorie racine Materiels
  286.                         $materiels $materielRepository->findBy([],['nom' => 'asc']);
  287.                         $categfiltre $categorieRepository->find(2);       
  288.                         $description $categfiltre->getDescription(); 
  289.                 }
  290.             }
  291.              //recup des photos
  292.              foreach($materiels as $p){
  293.                 $photo $materielphotoRepository->findOneBy(['materiel' => $p], ['ordre' => 'asc']);
  294.                 if($photo != null ){
  295.                     $photos[$p->getId()] = $photo->getImage()->getUrlfichier();
  296.                 }
  297.                 else {
  298.                     $photos[$p->getId()] = null;
  299.                 }
  300.             } 
  301.         }
  302.                
  303.         $logPageRepository->addLog($titre." ".$soustitre"/categoriefiltre/".$type."/".$code$this->getUser());
  304.         return $this->render('home/pagecategories.html.twig', [ 
  305.             'type' => $type,
  306.             'titre' => $titre,
  307.             'materiels'=> $materiels,
  308.             'protocoles'=> $protocoles,
  309.             'soustitre' => $soustitre,
  310.             'description' => $description,
  311.             'code' => $code,
  312.             'coche' => $coche,
  313.             'categorie' => $categorieRepository->find($type),
  314.             'sscategories' => $sscategories,
  315.             'parentid' => $parentid,
  316.             'photos' => $photos,
  317.         ]);
  318.     }
  319.     #[Route("/categoriefiltrenom/{type}/{nom}"name:"categoriefiltrenom_page")]
  320.     public function categoriefiltrepagenom($type$nomCategorieRepository $categorieRepository): Response
  321.     {   
  322.         $nom str_replace("%27","'",$nom); 
  323.         $nom str_replace("%20"," ",$nom); 
  324.         $nom trim($nom); //dd($nom);
  325.         $categfiltre $categorieRepository->getCategoriesParNom($nom,$type); //dd($categfiltre);
  326.         $id 1;
  327.         if($categfiltre != null $id=$categfiltre->getId();
  328.         if($id == 2$id 1//cas matériels !!
  329.         
  330.         return $this->redirectToRoute('categoriefiltre_page', ['code' => $id'type' => $type]);  
  331.     }
  332.     #[Route("/protocole/{id}/{nom}"name:"protocole_page"defaults: ["nom"=> ""])]
  333.     public function protocolepage(Protocole $protocoleRequest $request
  334.                                   LogPageRepository $logPageRepository
  335.                                   CommentaireRepository $commentaireRepository,
  336.                                   ProtocolephotoRepository $protocolephotoRepository,
  337.                                   EntityManagerInterface $entityManager): Response
  338.     {        
  339.         if($protocole->getArchive()) {
  340.             return $this->redirectToRoute('home_page');
  341.         }
  342.         $isFavori false;
  343.         $usermateriels = [];
  344.         //force le user courant par sécurité ;-)
  345.         $user $this->getUserEntity();        
  346.   
  347.         //formulaire nouveau commentaire
  348.         $commentaire = new Commentaire();        
  349.         $form $this->createForm(CommentaireType::class, $commentaire);
  350.         $form->handleRequest($request);
  351.         if ($form->isSubmitted() && $form->isValid() && $user != null) {
  352.             $commentaire->setDatepubli(new \DateTime());
  353.             $commentaire->setValide(true);
  354.             $commentaire->setProtocole($protocole);
  355.             $commentaire->setAuteur($user);
  356.             $entityManager->persist($commentaire);
  357.             $entityManager->flush();
  358.             //redirection pour nouveau formulaire !
  359.             return $this->redirectToRoute('protocole_page', ['id' => $protocole->getId(), 'nom' => $protocole->getTitre()]);     
  360.         }
  361.         if($user != null){
  362.             //protocole dans les favoris ?
  363.             foreach($user->getProtocoles() as $prot){
  364.                 if($prot->getId() == $protocole->getId()) {
  365.                     $isFavori true;
  366.                     break;
  367.                 }
  368.             }        
  369.             //materiels    
  370.             foreach($user->getMateriels() as $matos){
  371.                 $usermateriels[]=$matos->getId();
  372.             }  
  373.         }
  374.         //url catégories complete
  375.         $urls=[];
  376.         $categories $protocole->getCategories();
  377.         if($categories->count()>0) {
  378.             $categorie $categories[0]; //dd($categorie);
  379.             $urls $this->getCategoriesParentes($categorie);           
  380.         }
  381.         $logPageRepository->addLog("Protocole ".$protocole->getTitre(), "/protocole/".$protocole->getId(), $this->getUser());
  382.         return $this->render('home/pageprotocole.html.twig', [ 
  383.             'urls' => $urls,
  384.             'protocole' => $protocole,
  385.             'protocolephotos' => $protocolephotoRepository->findBy(['protocole' => $protocole], ['ordre' => 'asc']),
  386.             'isFavori'  => $isFavori,
  387.             'usermateriels'  => $usermateriels,
  388.             'commentaires'  => $commentaireRepository->findBy(['protocole'=>$protocole], ['datepubli'=>'desc']),
  389.             'form' => $form,
  390.         ]);
  391.     }
  392.     #[Route("/materiel/{id}"name:"materiel_page")]
  393.     public function materielpage(Materiel $materielRequest $request,
  394.                                  LogPageRepository $logPageRepository,
  395.                                  CommentaireRepository $commentaireRepository,
  396.                                  MaterielphotoRepository $materielphotoRepository,
  397.                                  EntityManagerInterface $entityManager): Response
  398.     {
  399.         if($materiel->isArchive()) {
  400.             return $this->redirectToRoute('home_page');
  401.         }
  402.         //force le user courant par sécurité ;-)
  403.         $user $this->getUserEntity();        
  404.         //formulaire nouveau commentaire
  405.         $commentaire = new Commentaire();        
  406.         $form $this->createForm(CommentaireType::class, $commentaire);
  407.         $form->handleRequest($request);
  408.         if ($form->isSubmitted() && $form->isValid() && $user != null) {
  409.             $commentaire->setDatepubli(new \DateTime());
  410.             $commentaire->setValide(true);
  411.             $commentaire->setMateriel($materiel);
  412.             $commentaire->setAuteur($user);
  413.             $entityManager->persist($commentaire);
  414.             $entityManager->flush();
  415.             //redirection pour nouveau formulaire !
  416.             return $this->redirectToRoute('materiel_page', ['id' => $materiel->getId()]);         
  417.         }
  418.         //url catégories complete
  419.         $urls=[];
  420.         $categories $materiel->getCategories();
  421.         if($categories->count()>0) {
  422.             $categorie $categories[0]; //dd($categorie);
  423.             $urls $this->getCategoriesParentes($categorie);           
  424.         }
  425.         //photos ds produits associes
  426.         $assocphotos=[];
  427.         foreach($materiel->getAssocies() as $assoc){
  428.             $assocphotos[$assoc->getId()]=$materielphotoRepository->findBy(['materiel' => $assoc], ['ordre' => 'asc']);
  429.         }
  430.         //favori ?
  431.         $isFavori false;
  432.         if($user != null){
  433.             //materiel dans les favoris ?
  434.             foreach($user->getMateriels() as $item){
  435.                 if($item->getId() == $materiel->getId()) {
  436.                     $isFavori true;
  437.                     break;
  438.                 }
  439.             }     
  440.         }
  441.         $logPageRepository->addLog("Matériel ".$materiel->getNom(), "/materiel/".$materiel->getId(), $this->getUser());
  442.         return $this->render('home/pagemateriel.html.twig', [ 
  443.             'materiel'=> $materiel,
  444.             'materielphotos' => $materielphotoRepository->findBy(['materiel' => $materiel], ['ordre' => 'asc']),
  445.             'assocphotos' => $assocphotos,
  446.             'isFavori' => $isFavori,
  447.             'urls' => $urls,
  448.             'commentaires'  => $commentaireRepository->findBy(['materiel'=>$materiel], ['datepubli'=>'desc']),
  449.             'form' => $form,
  450.         ]);
  451.     }
  452.     private function getCategoriesParentes($categorie) {
  453.         $urls=[];
  454.         $urls[] = $categorie->getTitre();
  455.         //parent 1
  456.         $categorie $categorie->getParent();
  457.         if($categorie == null) return $urls;
  458.         array_unshift($urls$categorie->getTitre());
  459.         //parent 2
  460.         $categorie $categorie->getParent();
  461.         if($categorie == null) return $urls;
  462.         array_unshift($urls$categorie->getTitre());
  463.         
  464.         //parent 3
  465.         $categorie $categorie->getParent();
  466.         if($categorie == null) return $urls;
  467.         array_unshift($urls$categorie->getTitre());
  468.         //parent 4
  469.         $categorie $categorie->getParent();
  470.         if($categorie == null) return $urls;
  471.         array_unshift($urls$categorie->getTitre());
  472.         //parent 5
  473.         $categorie $categorie->getParent();
  474.         if($categorie == null) return $urls;
  475.         array_unshift($urls$categorie->getTitre());
  476.         return $urls;
  477.     }
  478.     /***********************************************************************************************
  479.      * COMPTE
  480.      */
  481.     #[Route("/compte"name:"compte_page")]
  482.     public function comptepage(): Response
  483.     {
  484.         //force le user courant par sécurité ;-)
  485.         $user $this->getUserEntity();        
  486.         if ($user == null) {
  487.             return $this->redirectToRoute('home_page');
  488.         }
  489.         if ($user->hasRole('ROLE_ADMIN')) {
  490.             return $this->redirectToRoute('admin548637_home');
  491.         }
  492.         else {
  493.             return $this->redirectToRoute('home_page');
  494.         }        
  495.     }
  496.     
  497.     #[Route("/infoscompte"name:"infoscompte_page"methods:["GET","POST"])]
  498.     public function edit(Request $requestLogPageRepository $logPageRepository,
  499.                          ProtocolephotoRepository $protocolephotoRepository ,
  500.                          MaterielphotoRepository $materielphotoRepository,
  501.                          EntityManagerInterface $entityManager): Response
  502.     {
  503.         //force le user courant par sécurité ;-)
  504.         $user $this->getUserEntity();        
  505.         if ($user == null) {
  506.             return $this->redirectToRoute('home_page');
  507.         }
  508.         $form $this->createForm(CompteType::class, $user);
  509.         $form->handleRequest($request);
  510.         if ($form->isSubmitted() && $form->isValid()) {
  511.             $entityManager->flush();
  512.             return $this->redirectToRoute('infoscompte_page', [], Response::HTTP_SEE_OTHER);
  513.         }
  514.         //photos des favoris
  515.         $protocolesphotos =[];
  516.         $materielsphotos =[];
  517.         foreach($user->getProtocoles() as $item){
  518.             $photos $protocolephotoRepository->findBy(['protocole' => $item], ['ordre' => 'asc']);
  519.             if(count($photos) >0
  520.                  $protocolesphotos[$item->getId()] = $photos[0];
  521.             else $protocolesphotos[$item->getId()] = null;
  522.         }
  523.         foreach($user->getMateriels() as $item){
  524.             $photos $materielphotoRepository->findBy(['materiel' => $item], ['ordre' => 'asc']);
  525.             if(count($photos) >0
  526.                  $materielsphotos[$item->getId()] = $photos[0];
  527.             else $materielsphotos[$item->getId()] = null;
  528.         }
  529.         
  530.         $logPageRepository->addLog("Mon compte""/infoscompte/".$user->getId(), $user);
  531.         return $this->render('home/pagecompte.html.twig', [
  532.             'user' => $user,
  533.             'protocolesphotos' => $protocolesphotos,
  534.             'materielsphotos' => $materielsphotos,
  535.             'form' => $form,
  536.         ]);
  537.     }
  538.     #[Route("/addusermaterielajax/{id}"name:"addusermateriel_ajax")]
  539.     public function addusermaterielajax(Materiel $materielEntityManagerInterface $entityManager): Response
  540.     {
  541.        //force le user courant par sécurité ;-)
  542.        $user $this->getUserEntity();        
  543.         if ($user == null) {
  544.             return new Response(false);
  545.         }
  546.         
  547.         //test si existe déjà
  548.         foreach($user->getMateriels() as $usermat){
  549.             if($usermat->getId() == $materiel->getId()) {
  550.                 return new Response(true); //existe déjà
  551.             }
  552.         }
  553.         //sinon l'ajoute
  554.         $user->addMateriel($materiel);
  555.         $entityManager->flush();
  556.         return new Response(true);
  557.     }
  558.     #[Route("/adduserprotocole/{id}"name:"adduserprotocole_ajax")]
  559.     public function adduserprotocole(Protocole $protocoleEntityManagerInterface $entityManager): Response
  560.     {
  561.         //force le user courant par sécurité ;-)
  562.         $user $this->getUserEntity();        
  563.          if ($user != null) {  
  564.             //test si existe déjà
  565.             foreach($user->getProtocoles() as $userprot){
  566.                 if($userprot->getId() == $protocole->getId()) {
  567.                     return $this->redirectToRoute('protocole_page', ['id' => $protocole->getId(), 'nom' => $protocole->getTitre()]); //existe déjà
  568.                 }
  569.             }
  570.             //sinon l'ajoute
  571.             $user->addProtocole($protocole);
  572.             $entityManager->flush();
  573.         }
  574.         return $this->redirectToRoute('protocole_page', ['id' => $protocole->getId(), 'nom' => $protocole->getTitre()]);
  575.     }
  576.     #[Route("/addusermateriel/{id}"name:"addusermateriel")]
  577.     public function addusermateriel(Materiel $materielEntityManagerInterface $entityManager): Response
  578.     {
  579.         //force le user courant par sécurité ;-)
  580.         $user $this->getUserEntity();        
  581.         if ($user != null) {
  582.             //test si existe déjà
  583.             foreach($user->getMateriels() as $usermat){
  584.                 if($usermat->getId() == $materiel->getId()) {
  585.                     return new Response(true); //existe déjà
  586.                 }
  587.             }
  588.             //sinon l'ajoute
  589.             $user->addMateriel($materiel);
  590.             $entityManager->flush();
  591.         }
  592.         return $this->redirectToRoute('materiel_page', ['id' => $materiel->getId()]);
  593.     }
  594.     #[Route("/removeuserprotocole/{id}"name:"removeuserprotocole_ajax")]
  595.     public function removeuserprotocole(Protocole $protocoleEntityManagerInterface $entityManager): Response
  596.     {
  597.         //force le user courant par sécurité ;-)
  598.         $user $this->getUserEntity(); 
  599.         if ($user != null) { 
  600.             $user->removeProtocole($protocole);
  601.             $entityManager->flush();
  602.         }
  603.         return $this->redirectToRoute('protocole_page', ['id' => $protocole->getId(), 'nom' => $protocole->getTitre()]);
  604.     }
  605.     #[Route("/removeusermateriel/{id}"name:"removeusermateriel_ajax")]
  606.     public function removeusermateriel(Materiel $materielEntityManagerInterface $entityManager): Response
  607.     {
  608.         //force le user courant par sécurité ;-)
  609.         $user $this->getUserEntity(); 
  610.         if ($user != null) { 
  611.             $user->removeMateriel($materiel);
  612.             $entityManager->flush();
  613.         }
  614.         return $this->redirectToRoute('materiel_page', ['id' => $materiel->getId()]);
  615.     }
  616.     #[Route("/removecompteprotocole/{id}"name:"removecompteprotocole_page")]
  617.     public function removecompteprotocole(Protocole $protocoleEntityManagerInterface $entityManager): Response
  618.     {
  619.         //force le user courant par sécurité ;-)
  620.         $user $this->getUserEntity();    
  621.         if ($user != null) { 
  622.             $user->removeProtocole($protocole);
  623.             $entityManager->flush();
  624.         }
  625.         return $this->redirectToRoute('infoscompte_page');
  626.     }
  627.     #[Route("/removecomptemateriel/{id}"name:"removecomptemateriel_page")]
  628.     public function removecomptemateriel(Materiel $materielEntityManagerInterface $entityManager): Response
  629.     {
  630.         //force le user courant par sécurité ;-)
  631.         $user $this->getUserEntity(); 
  632.         if ($user != null) { 
  633.             $user->removeMateriel($materiel);
  634.             $entityManager->flush();
  635.         }
  636.         return $this->redirectToRoute('infoscompte_page');
  637.     }
  638.     /***********************************************************************************************
  639.      * RECHERCHER
  640.      */
  641.     #[Route("/recherche"name:"recherche_page")]
  642.     public function recherchepage(Request $request
  643.                                   ProtocoleRepository $protocoleRepository
  644.                                   MaterielRepository $materielRepository,
  645.                                   ArticleRepository $articleRepository,
  646.                                   CategorieRepository $categorieRepository): Response
  647.     {
  648.         $texte $request->query->get('txtrecherche'''); 
  649.         $texte trim($texte);
  650.         if(strlen($texte)>2  && $texte[strlen($texte)-1] == "s"$texte substr($texte0strlen($texte)-1);
  651.         $enctexte htmlentities($texte);  //dd( $texte);
  652.         $categories $categorieRepository->recherche($texte); //dd( $categories);
  653.         $protocoles1 $protocoleRepository->rechercheTitre($texte$enctexte); //dd( $protocoles);
  654.         $protocoles2 $protocoleRepository->rechercheAutres($texte$enctexte); //dd( $protocoles);
  655.         $materiels1 $materielRepository->rechercheTitre($texte$enctexte); //dd( $materiels);
  656.         $materiels2 $materielRepository->rechercheAutres($texte$enctexte); //dd( $materiels);
  657.         $articles $articleRepository->recherche($texte$enctexte); //dd( $articles);
  658.         
  659.         return $this->render('home/recherches.html.twig', [ 
  660.             'texte'=> $texte,
  661.             'protocoles1'=> $protocoles1,
  662.             'protocoles2'=> $protocoles2,
  663.             'materiels1'=> $materiels1,
  664.             'materiels2'=> $materiels2,
  665.             'articles'=> $articles,
  666.             'categories'=> $categories,
  667.         ]);
  668.     }
  669.      /***********************************************************************************************
  670.      * MENU PAGE
  671.      */
  672.     #[Route("/menu"name:"menu_page")]
  673.     public function menuPage(CategorieRepository $categorieRepository) {
  674.        
  675.         return $this->render('menu/menuPage.html.twig'
  676.         [
  677.             'protocoles' => $categorieRepository->findOneBy(['titre' => 'Protocoles']),
  678.             'materiels' => $categorieRepository->findOneBy(['titre' => 'Matériels']),
  679.         ]);
  680.     }
  681. }