src/Controller/ExpertController.php line 195

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Expert;
  4. use App\Form\ExpertType;
  5. use App\Service\Securizer;
  6. use App\Repository\UserRepository;
  7. use App\Filter\Entity\ExpertSearch;
  8. use App\Form\ExpertGeneralSkillType;
  9. use App\Repository\ExpertRepository;
  10. use App\Repository\SpecieRepository;
  11. use App\Filter\Form\ExpertFilterType;
  12. use App\Repository\SpecieAreaRepository;
  13. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  14. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  15. use App\Repository\GeneralSkillRepository;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Security\Core\Security;
  18. use App\Repository\ExpertAreaSpecieRepository;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\HttpFoundation\StreamedResponse;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. /**
  25.  * @Route("/expert")
  26.  */
  27. class ExpertController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/all.{_format}", name="expert_index",
  31.      * requirements={"_format"="html|csv"},
  32.      * defaults={"_format"="html"}))
  33.      * @Method({"GET","POST"})
  34.      */
  35.     public function index(UserRepository $userRepositorySecurizer $securizer,ExpertRepository $expertRepository,Request $request,$_format): Response
  36.     {
  37.         if (null !== $this->container->get('security.token_storage')->getToken())
  38.         {
  39.             $users $userRepository->findAll();
  40.             $tabUsers=array();
  41.             foreach ($users as $user)   array_push($tabUsers,$user->getEmail());
  42.             $search = new ExpertSearch();
  43.             $form=$this->createForm(ExpertFilterType::class,$search);
  44.             $form->handleRequest($request);
  45.             $entities $expertRepository->findAllVisibleQuery($tabUsers,$search);
  46.             $data=[
  47.                 'registered' => '1',
  48.                 'entities' => $entities,
  49.                 'form'=>$form->createView(),
  50.                 'titre' =>'Experts list'
  51.             ];
  52.             
  53.             $rep=$this->render("expert/index.$_format.twig"$data);
  54.             // if ($_format == 'csv'){
  55.             //     $fic = 'expert-'. \date("d-m-Y") . '.csv';
  56.             //     $rep->headers->set('Content-Disposition','attachment; filename="'.$fic.'"');
  57.             // }
  58.             return $rep;
  59.         }
  60.         // else return $this->render('app/restricted_area.html.twig');
  61.     }
  62.     /**
  63.      * @Route("/notRegistered.{_format}", name="expert_not_registered",
  64.      * requirements={"_format"="html|csv"},
  65.      * defaults={"_format"="html"}))
  66.      * @Method({"GET","POST"})
  67.      */
  68.     public function notRegistered(UserRepository $userRepositorySecurizer $securizer,ExpertRepository $expertRepository,Request $request,$_format): Response
  69.     {
  70.         if (null !== $this->container->get('security.token_storage')->getToken())
  71.         {
  72.             $users $userRepository->findAll();
  73.             $tabUsers=array();
  74.             foreach ($users as $user)   array_push($tabUsers,$user->getEmail());
  75.             $search = new ExpertSearch();
  76.             $form=$this->createForm(ExpertFilterType::class,$search);
  77.             $form->handleRequest($request);
  78.             $entities $expertRepository->findUnregisteredQuery($tabUsers,$search);
  79.             $data=[
  80.                 'registered' => '0',
  81.                 'entities' => $entities,
  82.                 'form'=>$form->createView(),
  83.                 'titre' =>'Unregistered experts'
  84.             ];
  85.             
  86.             $rep=$this->render("expert/index.$_format.twig"$data);
  87.             // if ($_format == 'csv'){
  88.             //     $fic = 'expert-'. \date("d-m-Y") . '.csv';
  89.             //     $rep->headers->set('Content-Disposition','attachment; filename="'.$fic.'"');
  90.             // }
  91.             return $rep;
  92.         }
  93.         // else return $this->render('app/restricted_area.html.twig');
  94.     }
  95.     /**
  96.      * @Route("/export/{registered}", name="expert_export", methods={"GET"})
  97.      */
  98.     public function export($registeredExpertAreaSpecieRepository $expertAreaSpecieRepositoryUserRepository $userRepositorySecurizer $securizer,ExpertRepository $expertRepository): Response
  99.     {
  100.         if (null !== $this->container->get('security.token_storage')->getToken())
  101.         {
  102.             $users $userRepository->findAll();
  103.             $tabUsers=array();
  104.             foreach ($users as $user)   array_push($tabUsers,$user->getEmail());
  105.             $search = new ExpertSearch();
  106.             if ($registered == 1)   $entities $expertRepository->findAllVisibleQuery($tabUsers,$search);
  107.             else                    $entities $expertRepository->findUnregisteredQuery($tabUsers,$search);
  108.             $spreadsheet = new Spreadsheet();
  109.             $sheet $spreadsheet->getActiveSheet();
  110.             $sheet->getColumnDimension('A')->setWidth(100'pt');
  111.             $sheet->getColumnDimension('B')->setWidth(100'pt');
  112.             $sheet->getColumnDimension('C')->setWidth(100'pt');
  113.             $sheet->getColumnDimension('D')->setWidth(100'pt');
  114.             $sheet->getColumnDimension('E')->setWidth(100'pt');
  115.             $sheet->getColumnDimension('F')->setWidth(300'pt');
  116.             $sheet->getColumnDimension('G')->setWidth(200'pt');
  117.             $sheet->getColumnDimension('H')->setWidth(100'pt');
  118.             $sheet->getColumnDimension('I')->setWidth(100'pt');
  119.             $sheet->getStyle('A1')->getFont()->setBold(true);
  120.             $sheet->getStyle('B1')->getFont()->setBold(true);
  121.             $sheet->getStyle('C1')->getFont()->setBold(true);
  122.             $sheet->getStyle('D1')->getFont()->setBold(true);
  123.             $sheet->getStyle('E1')->getFont()->setBold(true);
  124.             $sheet->getStyle('F1')->getFont()->setBold(true);
  125.             $sheet->getStyle('G1')->getFont()->setBold(true);
  126.             $sheet->getStyle('H1')->getFont()->setBold(true);
  127.             $sheet->getStyle('I1')->getFont()->setBold(true);
  128.             $sheet->setCellValue('A1'"Name");
  129.             $sheet->setCellValue('B1'"First name");
  130.             $sheet->setCellValue('C1'"Email");
  131.             $sheet->setCellValue('D1'"Expertise Type");
  132.             $sheet->setCellValue('E1'"Country");
  133.             $sheet->setCellValue('F1'"Species skills");
  134.             $sheet->setCellValue('G1'"General skills");
  135.             $sheet->setCellValue('H1'"Organization");
  136.             $sheet->setCellValue('I1'"ORCID");
  137.             $i=2;
  138.             foreach($entities as $entity)
  139.             {
  140.                 $sheet->setCellValue('A'.$i$entity->getName());
  141.                 $sheet->setCellValue('B'.$i$entity->getFirstname());
  142.                 $sheet->setCellValue('C'.$i$entity->getEmail());
  143.                 $sheet->setCellValue('D'.$i$entity->getExpertiseType());
  144.                 $sheet->setCellValue('E'.$i$entity->getCountry());
  145.                 $entitiesEAS $expertAreaSpecieRepository->findByExpert($entity);
  146.                 $speciesSkills "";
  147.                 if (count($entitiesEAS) > 0)
  148.                 {
  149.                     foreach ($entitiesEAS as $specieSkill)  $speciesSkills.=$specieSkill->getSpecie().'-'.$specieSkill->getSpecieArea()."\n";
  150.                 }
  151.                 $sheet->setCellValue('F'.$i$speciesSkills);
  152.                 $spreadsheet->getActiveSheet()->getStyle('F'.$i)->getAlignment()->setWrapText(true);
  153.                 $generalSkills "";
  154.                 if (count($entity->getGeneralSkill()) > 0)
  155.                 {
  156.                     foreach ($entity->getGeneralSkill() as $generalSkill)  $generalSkills.="$generalSkill\n";
  157.                 }
  158.                 $sheet->setCellValue('G'.$i$generalSkills);
  159.                 $spreadsheet->getActiveSheet()->getStyle('G'.$i)->getAlignment()->setWrapText(true);
  160.                 
  161.                 $organisms "";
  162.                 foreach ($entity->getOrganism() as $organism)  $organisms.="$organism,";
  163.                 $organisms substr($organisms,0,strlen($organisms)-1);
  164.                 $sheet->setCellValue('H'.$i$organisms);
  165.                 $sheet->setCellValue('I'.$i$entity->getOrcid());
  166.                 $i++;
  167.             }
  168.             $writer = new Xlsx($spreadsheet);
  169.             $response =  new StreamedResponse(
  170.                 function () use ($writer) {
  171.                     $writer->save('php://output');
  172.                 }
  173.             );
  174.             $response->headers->set('Content-Type''application/vnd.ms-excel');
  175.             $response->headers->set('Content-Disposition''attachment;filename="EURCAW-Experts.xlsx"');
  176.             $response->headers->set('Cache-Control','max-age=0');
  177.             return $response;
  178.         }
  179.         // else return $this->render('app/restricted_area.html.twig');
  180.     }
  181.     /**
  182.      * @Route("/{id}", name="expert_show", methods={"GET"})
  183.      */
  184.     public function show(ExpertAreaSpecieRepository $expertAreaSpecieRepositorySpecieRepository $specieRepositorySpecieAreaRepository $specieAreaRepositoryGeneralSkillRepository $generalSkillRepositoryExpert $entity): Response
  185.     {
  186.         if (null !== $this->container->get('security.token_storage')->getToken())
  187.         {
  188.             $listGeneralSkills $generalSkillRepository->findAll();
  189.             $listSpecies $specieRepository->findAll();
  190.             $listSpecieArea $specieAreaRepository->findAll();
  191.             $listESA $expertAreaSpecieRepository->findByExpert($entity);
  192.             return $this->render('expert/show.html.twig', [
  193.                 'entity' => $entity,
  194.                 'listESA' => $listESA,
  195.                 'listSpecies' => $listSpecies,
  196.                 'listSpecieArea' => $listSpecieArea,
  197.                 'listGeneralSkills' => $listGeneralSkills,
  198.             ]);
  199.         }
  200.         else return $this->render('app/restricted_area.html.twig');
  201.     }
  202.     /**
  203.      * @Route("/generalSkill/{id}", name="expert_generalskillnew", methods={"GET","POST"})
  204.      */
  205.     public function addGeneralSkill(Securizer $securizerSecurity $securityExpert $entityExpertRepository $expertRepositoryGeneralSkillRepository $generalSkillRepositoryRequest $request): Response
  206.     {
  207.         if (null !== $this->container->get('security.token_storage')->getToken())
  208.         {
  209.             $user $security->getUser();
  210.             $allowed false;
  211.             if($securizer->isGranted($user'ROLE_ADMIN'))  $allowed true;
  212.             elseif ($user)
  213.             {
  214.                 $expert $expertRepository->findOneByEmail($user->getEmail());
  215.                 if ($expert->isIsAdmin() == true)  $allowed=true;
  216.             }
  217.             $listGeneralSkills $generalSkillRepository->findAll();
  218.             $listExpertGeneralSkills $entity->getGeneralSkill();
  219.             $form $this->createForm(ExpertGeneralSkillType::class, $entity);
  220.             $form->handleRequest($request);
  221.             if ($form->isSubmitted() && $form->isValid()) {
  222.                 $entityManager $this->getDoctrine()->getManager();
  223.                 foreach ($listExpertGeneralSkills as $entityEGS)    $entity->removeGeneralSkill($entityEGS);
  224.                 $entityManager->flush();
  225.                 foreach ($listGeneralSkills as $entityEGS)
  226.                 {
  227.                     $info="gr-".$entityEGS->getId();
  228.                     if (isset($_POST[$info]))     $entity->addGeneralSkill($entityEGS);
  229.                 }
  230.                 $entityManager->flush();
  231.                 return $this->redirectToRoute('expert_index');
  232.             }
  233.             return $this->render('expert/newGeneralSkills.html.twig', [
  234.                 'allowed' => $allowed,
  235.                 'entity' => $entity,
  236.                 'listExpertGeneralSkills' => $listExpertGeneralSkills,
  237.                 'listGeneralSkills' => $listGeneralSkills,
  238.                 'form' => $form->createView(),
  239.             ]);
  240.         }
  241.         else return $this->render('app/restricted_area.html.twig');
  242.     }
  243.     /**
  244.      * @Route("/{userId}/edit", name="expert_edit", methods={"GET","POST"})
  245.      */
  246.     public function edit(ExpertRepository $expertRepositoryRequest $request$userIdUserRepository $userRepository): Response
  247.     {
  248.         if (null !== $this->container->get('security.token_storage')->getToken())
  249.         {
  250.             $user $userRepository->find($userId);
  251.             $entity $expertRepository->findOneByEmail($user->getEmail());
  252.             $form $this->createForm(ExpertType::class, $entity);
  253.             $form->handleRequest($request);
  254.             if ($form->isSubmitted() && $form->isValid()) {
  255.                 $this->getDoctrine()->getManager()->flush();
  256.                 return $this->redirectToRoute('accueil', [
  257.                     'id' => $entity->getId(),
  258.                 ]);
  259.             }
  260.             return $this->render('expert/edit.html.twig', [
  261.                 'entity' => $entity,
  262.                 'form' => $form->createView(),
  263.             ]);
  264.         }
  265.         else return $this->render('app/restricted_area.html.twig');
  266.     }
  267. }