src/Controller/ProjectController.php line 26

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Projet;
  4. use App\Form\Projet2Type;
  5. use App\Repository\ProjetRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use App\Entity\User;
  12. use App\Entity\Chercheur;
  13. use App\Entity\Membre;
  14. use App\Entity\Directeur;
  15. use App\Entity\Theme;
  16. use Doctrine\Persistence\ManagerRegistry;
  17. #[Route('/project')]
  18. class ProjectController extends AbstractController
  19. {
  20.     #[Route('/'name'app_project_index'methods: ['GET'])]
  21.     public function index(ProjetRepository $projetRepository ,ManagerRegistry $doctrine): Response
  22.     {
  23.         $user $this->getUser();
  24.         $role=$user->getRoles()[0];
  25.         $chercheur = array();
  26.         $typeStructure "";
  27.         if($role === "ROLE_ADMIN"){
  28.             $projets $projetRepository->findAll();
  29.         }else if ($role === "ROLE_DIRECTEUR"){
  30.             $directeur $doctrine->getRepository(Directeur::class)->findOneBy(['user' => $user]);
  31.             $etabId $directeur->getEtablissement()->getId();
  32.             $projets $doctrine->getRepository(Projet::class)->findProjectDoirecteur($etabId);
  33.         }else if ($role === "ROLE_RESPONSABLE"){
  34.             $chercheur $doctrine->getRepository(Chercheur::class)->findOneBy(['user' => $user]);
  35.             $structure $chercheur->getStructure();
  36.             $typeStructure $structure->getType();
  37.             $projets $doctrine->getRepository(Projet::class)->findBy(['structure' => $structure]);
  38.        }else if ($role === "ROLE_CHERCHEUR"){
  39.         $chercheur $doctrine->getRepository(Chercheur::class)->findOneBy(['user' => $user]);
  40.         $idChercheur $chercheur->getId();
  41.         $projets = array();
  42.         
  43.        //dump($projets);die;    
  44.             if ($chercheur) {
  45.                 $membres $doctrine->getRepository(Membre::class)->findBy(['chercheur' => $chercheur]);
  46.                
  47.                 if($membres){
  48.                     foreach ($membres as $membre) {
  49.                         $projets[] = $membre->getProjet();
  50.                     }
  51.                 }
  52.             }
  53.        
  54.         }
  55.         
  56.         $message "pas des projets dans l'unité de service commun ";
  57.         if($typeStructure != ){
  58.                 //dump($projets);die;    
  59.                 return $this->render('project/index.html.twig', [
  60.                     'projets' => $projets,
  61.                     'chercheur'=> $chercheur
  62.                 ]);
  63.         }else{
  64.             return $this->render('bundles/exception/error.html.twig', [
  65.                 'message'=>$message,
  66.             ]);
  67.         }
  68.     
  69.     }
  70.     
  71.     #[IsGranted('ROLE_RESPONSABLE')]
  72.     #[Route('/new'name'app_project_new'methods: ['GET''POST'])]
  73.     public function new(Request $requestProjetRepository $projetRepositoryManagerRegistry $doctrine): Response
  74.     {
  75.         $em $doctrine->getManager();
  76.         $user $this->getUser();
  77.         $cher $doctrine->getRepository(Chercheur::class)->findOneBy(['user' => $user]);
  78.         $structure $cher->getStructure();
  79.         $etablissement $cher->getEtablissement();
  80.         $directeurs $doctrine->getRepository(Chercheur::class)->findBy(['etablissement' => $etablissement 'structure'=>$structure]);
  81.         $themes $doctrine->getRepository(Theme::class)->findAll();       
  82.         $projet = new Projet();
  83.         $membre = new Membre();
  84.         $form $this->createForm(Projet2Type::class);
  85.         $form->handleRequest($request);
  86.           if ($form->isSubmitted() ) {
  87.             $data $form->getData(); 
  88.             $currentImage $data->getImage();
  89.             $img $form->get('image')->getData();
  90.             //dump($data);die;
  91.             $projet->setStructure($structure);
  92.             $projet->setUser($user);
  93.             $projet->setEtat($data->getEtat());
  94.             $projet->setNom($data->getNom());
  95.             $projet->setStatut($data->getStatut());
  96.             $projet->setDateDebut($data->getDateDebut());
  97.             $projet->setDateFin($data->getDateFin());
  98.             $projet->setDirecteur($data->getDirecteur());
  99.             $projet->setObjectif($data->getObjectif());
  100.             $projet->setDescription($data->getDescription());
  101.             $projet->setTheme($data->getTheme());
  102.             if ($img != null) {
  103.                 $ext1 strtolower($img->getClientOriginalExtension());
  104.                 $photo1Name 'Etab_photo1_' '_' $projet->getId() . '.' $ext1;
  105.                 $img->move('upload/projets'$photo1Name);
  106.                 $projet->setImage($photo1Name);
  107.             }else {                   
  108.                 $projet->setImage($currentImage);
  109.             }
  110.             $em->persist($projet);
  111.             $membre->setProjet($projet);
  112.             $membre->setChercheur($data->getDirecteur());
  113.             $membre->setRole('directeur');
  114.             $em->persist($membre);
  115.             $em->flush();
  116.            // $projetRepository->save($projet, true);
  117.             return $this->redirectToRoute('app_project_index', [], Response::HTTP_SEE_OTHER);
  118.         }
  119.         return $this->renderForm('project/new.html.twig', [
  120.             'projet' => $projet,
  121.             'form' => $form,
  122.             'directeurs' => $directeurs,
  123.             'themes' => $themes,
  124.             'user' => $user,
  125.         ]);
  126.     }
  127.     
  128.     
  129.     #[Route('/{id}'name'app_project_show'methods: ['GET'])]
  130.     public function show(Projet $projet ,ManagerRegistry $doctrine): Response
  131.     {
  132.         $em $doctrine->getManager();
  133.         $user $this->getUser();
  134.         $cher $doctrine->getRepository(Chercheur::class)->findOneBy(['user' => $user]);
  135.         return $this->render('project/show.html.twig', [
  136.             'projet' => $projet,
  137.             'chercheur' => $cher,
  138.         ]);
  139.     }
  140.     #[IsGranted('ROLE_RESPONSABLE')]
  141.     #[Route('/{id}/edit'name'app_project_edit'methods: ['GET''POST'])]
  142.     public function edit(Request $requestProjet $projetProjetRepository $projetRepository,ManagerRegistry $doctrine): Response
  143.     {   
  144.         
  145.         $em $doctrine->getManager();
  146.         $form $this->createForm(Projet2Type::class, $projet);
  147.         $form->handleRequest($request); 
  148.         $user $this->getUser();
  149.         $cher $doctrine->getRepository(Chercheur::class)->findOneBy(['user' => $user]);
  150.         $structure $cher->getStructure();
  151.         $etablissement $cher->getEtablissement();
  152.         $directeurs $doctrine->getRepository(Chercheur::class)->findBy(['etablissement' => $etablissement 'structure'=>$structure]);
  153.         
  154.         if ($form->isSubmitted() ) {
  155.             
  156.             $data $form->getData(); 
  157.             $currentImage $data->getImage();
  158.             $img $form->get('image')->getData();
  159.             
  160.             //dump($data,$img,$request);die;
  161.              
  162.             $membre =  $doctrine->getRepository(Membre::class)->findOneBy(['projet' => $projet ,'role'=>'directeur']);
  163.             
  164.             $projet->setNom($data->getNom());
  165.             $projet->setEtat($data->getEtat());
  166.             $projet->setStatut($data->getStatut());
  167.             $projet->setDateDebut($data->getDateDebut());
  168.             $projet->setDateFin($data->getDateFin());
  169.             $projet->setDirecteur($data->getDirecteur());
  170.             $projet->setObjectif($data->getObjectif());
  171.             $projet->setDescription($data->getDescription());
  172.             $projet->setTheme($data->getTheme());
  173.             if ($img != null) {
  174.                 $ext1 strtolower($img->getClientOriginalExtension());
  175.                 $photo1Name 'projet_photo1_' '_' $projet->getId() . '.' $ext1;
  176.                 $img->move('upload/projets'$photo1Name);
  177.                 $projet->setImage($photo1Name);
  178.             }else {                   
  179.                 $projet->setImage($currentImage);
  180.             }
  181.             //dump($projet);die;
  182.             $em->persist($projet);
  183.             if($membre){
  184.             $membre->setProjet($projet);
  185.             $membre->setChercheur($data->getDirecteur());
  186.             $membre->setRole('directeur');
  187.             }else{
  188.             $membre = new Membre ();
  189.             $membre->setProjet($projet);
  190.             $membre->setChercheur($data->getDirecteur());
  191.             $membre->setRole('directeur');
  192.             }
  193.             $em->persist($membre);
  194.             $em->flush();
  195.             //$projetRepository->save($projet, true);
  196.             return $this->redirectToRoute('app_project_index', [], Response::HTTP_SEE_OTHER);
  197.         }
  198.         return $this->renderForm('project/edit.html.twig', [
  199.             'projet' => $projet,
  200.             'form' => $form,
  201.             'directeurs'=>$directeurs,
  202.             'user' => $user
  203.         ]);
  204.     }
  205.     #[IsGranted('ROLE_RESPONSABLE')]
  206.     #[Route('/{id}/delete'name'app_project_delete'methods: ['GET','POST'])]
  207.     public function delete(Request $requestProjet $projetProjetRepository $projetRepository,ManagerRegistry $doctrine): Response
  208.     {
  209.        
  210.         try {
  211.             $em $doctrine->getManager();
  212.             $membres $doctrine->getRepository(Membre::class)->findBy(['projet' => $projet]);
  213.             
  214.             if ($membres){        
  215.                 $this->addFlash('error'"Impossible de supprimer ce projet . Elle est associée à un ou plusieurs membres . Veuillez supprimer les membres avant de supprimer le projet.");
  216.                 return $this->redirectToRoute('app_project_index');  
  217.             }
  218.             $em->remove($projet);
  219.             $em->flush();
  220.         } catch (\Exception $e) {
  221.             $this->addFlash('error'"Une erreur s'est produite lors de la suppression du projet. Veuillez réessayer.");
  222.             return $this->redirectToRoute('app_project_index');
  223.         }
  224.         
  225.         return $this->redirectToRoute('app_project_index');
  226.     }
  227. }