src/Controller/ApeController.php line 447

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\Filesystem\Filesystem;
  7. use PhpOffice\PhpSpreadsheet\IOFactory;
  8. use Smalot\PdfParser\Parser;
  9. use setasign\Fpdi\Fpdi;
  10. use App\Entity\Pays;
  11. use App\Entity\Ape;
  12. use App\Entity\Theme;
  13. use App\Entity\MotClesThemes;
  14. use App\Entity\CodesNaces;
  15. use App\Repository\AdministrateursRepository;
  16. use App\Repository\GroupeRestrictionRepository;
  17. use App\Repository\GroupeRestrictionPageRepository;
  18. use App\Repository\ApeRepository;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. use Symfony\Component\DependencyInjection\ContainerInterface as Container;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use DateTime;
  25. class ApeController extends AbstractController
  26. {
  27.     public function __construct(SessionInterface $session Container $container EntityManagerInterface $em )
  28.     {
  29.         $this->em $em ;
  30.         $this->session $session ;
  31.     }
  32.     #[Route('/ape'name'configuration_ape')]
  33.     public function index(Request $request,GroupeRestrictionRepository $groupeRestrictionRepository,
  34.     GroupeRestrictionPageRepository $grouprestrictionpageRepository,
  35.     AdministrateursRepository $AdministrateursRepository): Response
  36.     {
  37.         $accessArray=[];
  38.         $niveauAcessPages = [];
  39.         $groupeRestrictions = [];
  40.         if( ($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession()) ){
  41.             $admin $this->session->get('supAdT9m2XJzn4');
  42.         }else if(($this->session->get('supAdT9m2XJzn4') != null) && ($request->hasSession())){
  43.             $admin $AdministrateursRepository->findOneBy(['email'=>$this->session->get('supAdT9m2XJzn4')['email']]);
  44.             $adminId $admin->getId();
  45.             $groupeRestrictions $groupeRestrictionRepository->findByAdminId($adminId);
  46.             $restrictionPages $grouprestrictionpageRepository->findByRestriction($groupeRestrictions[0]->getId());
  47.             $accessArray $restrictionPages[0]->getAccess();
  48.             $niveauAcessPagesCollection $restrictionPages[0]->getNiveauAcessPages();
  49.             $niveauAcessPagesCollection->initialize();
  50.             $niveauAcessPages $niveauAcessPagesCollection->toArray();
  51.         }else {
  52.             return $this->redirectToRoute('connexion');
  53.         }
  54.         $pays $this->em->getRepository(Pays::class)->findAll(); 
  55.         return $this->render('ape/ape.html.twig',[
  56.             'admin' => $admin,
  57.             'pays' => $pays,
  58.             'access' => $accessArray,
  59.             'pages' => $niveauAcessPages,
  60.         ]);
  61.     }
  62.     /**
  63.      * @Route("/serverApe", name="serverApe", methods={"GET","POST"}, options = {"expose" = true})
  64.      */
  65.     public function serverApe(Request $request): Response
  66.     {
  67.         $sql_where "" ;
  68.         if($request->get('search')['value']!=""){
  69.             $sql_where .= ' AND ( u.activites LIKE \'%'.$request->get('search')['value'].'%\' )' ;     
  70.             $sql_where .= ' OR ( u.division LIKE \'%'.$request->get('search')['value'].'%\' )';     
  71.         }
  72.          
  73.         $user_array = [] ;
  74.         
  75.         $limit =  $request->get('length') ;
  76.             
  77.         $offset $request->get('start') ;
  78.         
  79.         $array_search = array();
  80.         
  81.         $columns = ['u.ape','u.division','u.activites','u.dateCreation'];
  82.         
  83.         $orders = [] ;
  84.         
  85.         
  86.         for($i=$i<count($request->get('order')) ;$i++ ){
  87.             
  88.              $orders[] = $columns$request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
  89.             
  90.         }
  91.         
  92.         
  93.         if( count($orders)>0){
  94.         $order " ORDER BY ".implode(' , ',$orders) ;
  95.         }
  96.         else{
  97.         $order "" ;  
  98.         }
  99.         
  100.         
  101.         
  102.         $apes $this->em->createQuery(
  103.                 'SELECT u 
  104.                 FROM App\Entity\Ape u
  105.                
  106.                 
  107.                 WHERE 1=1 '.$sql_where.' '.$order.'
  108.                  
  109.                 '
  110.                 )
  111.                 ->setMaxResults($limit)
  112.                 ->setFirstResult($offset)
  113.                 ->getResult()  ;
  114.         
  115.                 $I_nbResultatsTotal count$apes ) ;
  116.         
  117.         $output = [] ; 
  118.                
  119.         foreach($apes as $ape){
  120.         $output[] = [
  121.                 
  122.                 'id'=>$ape->getId() ,
  123.                 'ape'=>$ape->getApe(),
  124.                 'division'=>$ape->getDivision(),
  125.                 'activites'=>$ape->getActivites(),
  126.                 'dateCreation'=> date_format$ape->getDateCreation() , 'd/m/Y '),
  127.                 'dateUpdate' => $ape->getDateUpdate() !== null date_format($ape->getDateUpdate(), 'd/m/Y ') : '--'
  128.         ];
  129.          
  130.         }
  131.         
  132.         $JSON json_encode($output);
  133.         $JSON '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
  134.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  135.         return $response;
  136.         
  137.     }
  138.    
  139.     /**
  140.      * @Route("/ajout_ape", name="ajout_ape" , options = {"expose"=true})
  141.      */
  142.     public function ajout_ape(Request $request): Response
  143.     {
  144.        
  145.         $ape = new Ape();
  146.         $ape->setApe($request->get('ape'));
  147.         $ape->setActivites($request->get('Activites'));
  148.         $ape->setDivision($request->get('Division'));
  149.         $ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  150.         try {
  151.             $this->em->persist($ape);
  152.             $this->em->flush();
  153.             return new JsonResponse(['status' => 'OK']);
  154.         } catch (\Exception $e) {
  155.             return new JsonResponse(['status' => 'KOO','message' => $e->getMessage()]);
  156.         } 
  157.     }
  158.     /**
  159.      * @Route("/modif_ape/{id}", name="modif_ape" , methods={"POST"}, options = {"expose"=true})
  160.      */
  161.     public function modif_ape(int $idRequest $request): Response
  162.     {   
  163.         $ape $this->em->getRepository(Ape::class)->find($id);
  164.         if (!$ape) {
  165.             return new JsonResponse(['status' => 'KOO''message' => 'Region non trouvé !']);
  166.         }
  167.         
  168.         $ape->setApe($request->get('ape_edit'));
  169.         $ape->setActivites($request->get('Activites_edit'));
  170.         $ape->setDivision($request->get('Division_edit'));
  171.         $currentDateTime = new DateTime();
  172.         $ape->setDateUpdate($currentDateTime);
  173.         try {
  174.             $this->em->persist($ape);
  175.             $this->em->flush();
  176.             return new JsonResponse(['status' => 'OK''message' => 'Region mis à jour avec succès !']);
  177.         } catch (\Exception $e) {
  178.             return new JsonResponse(['status' => 'error''message' => 'Erreur lors de la modification du region : ' $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
  179.         }
  180.     }
  181.     /**
  182.     * @Route("/delete_ape/{id}", name="delete_ape" , methods={"DELETE"}, options = {"expose"=true})
  183.     */
  184.     public function delete_ape(int $idRequest $request): Response
  185.     {   
  186.         $ape $this->em->getRepository(Ape::class)->find($id);
  187.         if (!$ape) {
  188.             return new Response('Ape not found!'Response::HTTP_NOT_FOUND);
  189.         };
  190.         try {
  191.             $this->em->remove($ape);
  192.             $this->em->flush();
  193.             return new JsonResponse(['status' => 'OK']);
  194.         } catch (\Exception $e) {
  195.             return new Response('Error deleting Ape: ' $e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
  196.         }
  197.     }
  198.     /**
  199.     * @Route("/upload_ape_list", name="upload_ape_list" , methods={"POST"}, options = {"expose"=true})
  200.     */
  201.     public function upload_ape_list (Request $request): Response{
  202.         if ($request->files->has('ape_file')) {
  203.             $file $request->files->get('ape_file');
  204.             $uploadDirRoot $this->getParameter('uploads_directory') ;
  205.             if ($request->get('delete_old_ape')) {
  206.                 $codes $this->em->getRepository(Ape::class)->findAll();
  207.                 foreach ($codes as $c) {
  208.                     $this->em->remove($c);
  209.                 }
  210.                 $this->em->flush();
  211.             }
  212.             $filesystem = new Filesystem();
  213.             $fileName $file->getClientOriginalName();          
  214.             $ApeDir $uploadDirRoot.'/APEFiles/'  ;   
  215.                 if( $filesystem->exists($ApeDir ) == false ){
  216.                     $filesystem->mkdir($ApeDir 0777true);
  217.                 }      
  218.             
  219.                 $file->move($ApeDir$fileName);
  220.         
  221.                /* if ($file->getClientOriginalExtension() === 'pdf') {
  222.                     $parser = new Parser();
  223.                     $pdf = $parser->parseFile($ApeDir.$fileName);
  224.                     
  225.                     $text = '';
  226.                     foreach ($pdf->getPages() as $page) {
  227.                         $text .= $page->getText();
  228.                     }
  229.                     $lines = explode(PHP_EOL, $text);
  230.                     //dd($lines);
  231.                     $data = [];
  232.                     foreach ($lines as $line) {
  233.                         // Divisez la ligne en colonnes en utilisant le caractère de tabulation comme délimiteur
  234.                         $columns = explode("\t", $line);
  235.                         
  236.                         // Ajoutez les colonnes dans le tableau de données
  237.                         $data[] = $columns;
  238.                     }
  239.                     $pdf = new Fpdi();
  240.                     $pageCount = $pdf->setSourceFile($ApeDir.$fileName);
  241.                     $data = [];
  242.                                         
  243.                 dd($data,$pdf  );
  244.             }
  245.                 
  246.                 
  247.                 
  248.                 else */
  249.                 if($file->getClientOriginalExtension() === 'csv') {
  250.                     $data=[];
  251.                     if (($handle fopen($ApeDir $fileName"r")) !== false) {
  252.                         while (($row fgetcsv($handle0",")) !== false) {
  253.                             $data[] = $row;
  254.                         }
  255.                         fclose($handle);
  256.                     }
  257.                     foreach($data as $i=> $r){
  258.                         if($r[0]== "DIVISION")
  259.                         {
  260.                             unset($data[$i]);
  261.                         }
  262.                     }
  263.                     unset($data[0]);
  264.                     $data array_values($data);
  265.                     /* à corriger pour fixer les divisions
  266.                     for ($i = 0; $i < count($data); $i++) {
  267.                         if (count($data[$i]) === 2) {
  268.                              $prevIndex = $i - 1;
  269.                             while ($prevIndex >= 0 && count($data[$prevIndex]) !== 3) {
  270.                                 $prevIndex--;
  271.                             }
  272.                     
  273.                             if ($prevIndex >= 0) {
  274.                                 $data[$i] = [
  275.                                     $data[$prevIndex][0],
  276.                                     $data[$i][0], 
  277.                                     $data[$i][1], 
  278.                                 ];
  279.                             }
  280.                         }
  281.                     }*/
  282.                    //dd($data);
  283.                     for ($i 0$i count($data); $i++) {
  284.                        
  285.                         $ape = new APE();
  286.                         $ape->setActivites($data[$i][5]);
  287.                         //$ape->setDivision($data[$i][0]);
  288.                         $clean_ape preg_replace('/[A-Za-z]+$/'''$data[$i][1]);
  289.                         //dd($clean_ape);
  290.                         //$ape->setApe($data[$i][0]);
  291.                         $ape->setApe($clean_ape);
  292.                         $ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  293.                         $this->em->persist($ape); 
  294.                                 
  295.                     }
  296.                         
  297.                      //dd($data);
  298.                    
  299.                    
  300.                  
  301.                
  302.             $this->em->flush();
  303.             $msg = ['msg'=>'OK']  ;
  304.         
  305.             $JSON json_encode($msg);
  306.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  307.             
  308.             
  309.             return $response ;
  310.             
  311.             
  312.                 }
  313.                 else {
  314.                     $spreadsheet IOFactory::load($ApeDir $fileName);
  315.                     $worksheet $spreadsheet->getActiveSheet();
  316.                     // dd($worksheet->getRowIterator());
  317.                         $headerFound false;
  318.                         $data = [];
  319.                     foreach ($worksheet->getRowIterator() as $row) {
  320.                         $rowData=[]; 
  321.                         foreach ($row->getCellIterator() as $cell) {
  322.                             $value $cell->getValue();
  323.                             if (!$headerFound && in_array($value, ['DIVISION''NAF''ACTIVITE'])) {
  324.                                 $headerFound true;
  325.                                 break; 
  326.                             }
  327.                             if($value !== null && $value !== 'DIVISION' && $value !== 'NAF' && $value !== 'ACTIVITE')
  328.                             {    if (is_string($value)) 
  329.                                 {
  330.                                     $rowData[] = $value;
  331.                                 }
  332.                                 else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
  333.                                     // Si la valeur est une instance de RichText, récupérez le texte brut
  334.                                     $plainText '';
  335.                                     foreach ($value->getRichTextElements() as $element) {
  336.                                         $plainText .= $element->getText();
  337.                                     }
  338.                                     $rowData[]= $plainText;
  339.                                 
  340.                                 }
  341.                                 
  342.                             }
  343.                         }
  344.                         
  345.                         if ($headerFound) {
  346.                         $data[] = $rowData;
  347.                         }
  348.                     }
  349.                     
  350.                     $data array_filter($data);//pour supprimer les array vide
  351.                     $data array_values($data);//pour corriger les indice de chaque array
  352.                     for ($i 0$i count($data); $i++) {
  353.                         if (count($data[$i]) === 2) {
  354.                              $prevIndex $i 1;
  355.                             while ($prevIndex >= && count($data[$prevIndex]) !== 3) {
  356.                                 $prevIndex--;
  357.                             }
  358.                     
  359.                             if ($prevIndex >= 0) {
  360.                                 $data[$i] = [
  361.                                     $data[$prevIndex][0],
  362.                                     $data[$i][0], 
  363.                                     $data[$i][1], 
  364.                                 ];
  365.                             }
  366.                         }
  367.                     }
  368.                     for ($i 0$i count($data); $i++) {
  369.                        
  370.                         $ape = new APE();
  371.                         $ape->setActivites($data[$i][2]);
  372.                         $ape->setDivision($data[$i][0]);
  373.                         $ape->setApe($data[$i][1]);
  374.                         $ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  375.                         $this->em->persist($ape); 
  376.                                 
  377.                             }
  378.                         
  379.                      //dd($data);
  380.                    
  381.                    
  382.                  
  383.                
  384.             $this->em->flush();
  385.             $msg = ['msg'=>'OK']  ;
  386.         
  387.             $JSON json_encode($msg);
  388.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  389.             
  390.             
  391.             return $response ;
  392.             
  393.             }
  394.         }
  395.         return $this->json(['error' => 'Aucun fichier soumis'], 400);   
  396.     }
  397.       /**
  398.      * @Route("/serverNace", name="serverNace", methods={"GET","POST"}, options = {"expose" = true})
  399.      */
  400.     public function serverNace(Request $request): Response
  401.     {
  402.         $sql_where "" ;
  403.         if($request->get('search')['value']!=""){
  404.             $sql_where .= ' AND ( u.code LIKE \'%'.$request->get('search')['value'].'%\' )' ;     
  405.             $sql_where .= ' OR ( u.libelle LIKE \'%'.$request->get('search')['value'].'%\' )';     
  406.         }
  407.          
  408.         
  409.         $limit =  $request->get('length') ;
  410.             
  411.         $offset $request->get('start') ;
  412.         
  413.         
  414.         $columns = ['u.id','u.code','u.libelle'];
  415.         
  416.         $orders = [] ;
  417.         
  418.         
  419.         for($i=$i<count($request->get('order')) ;$i++ ){
  420.             
  421.              $orders[] = $columns$request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
  422.             
  423.         }
  424.         
  425.         
  426.         if( count($orders)>0){
  427.         $order " ORDER BY ".implode(' , ',$orders) ;
  428.         }
  429.         else{
  430.         $order "" ;  
  431.         }
  432.         
  433.         
  434.         $naces $this->em->createQuery(
  435.                 'SELECT u 
  436.                 FROM App\Entity\CodesNaces u
  437.                
  438.                 
  439.                 WHERE 1=1 '.$sql_where.' '.$order.'
  440.                  
  441.                 '
  442.                 )
  443.                 ->setMaxResults($limit)
  444.                 ->setFirstResult($offset)
  445.                 ->getResult()  ;
  446.         
  447.         
  448.                 $I_nbResultatsTotal count$naces ) ;
  449.         $output = [] ; 
  450.         foreach($naces as $nace){
  451.         $output[] = [
  452.                 
  453.                 'id'=>$nace->getId() ,
  454.                 'code'=>$nace->getCode(),
  455.                 'Libelle'=>$nace->getLibelle(),
  456.                 'dateCreation'=> date_format$nace->getDateCreation() , 'd/m/Y '),
  457.                     ];
  458.          
  459.         }
  460.         
  461.         $JSON json_encode($output);
  462.         $JSON '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
  463.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  464.         return $response;
  465.         
  466.     }
  467.  /**
  468.      * @Route("/serverThemesKeyWords", name="serverThemesKeyWords", methods={"GET","POST"}, options = {"expose" = true})
  469.      */
  470.     public function serverThemesKeyWords(Request $request): Response
  471.     {
  472.         $sql_where "" ;
  473.       /* if($request->get('search')['value']!=""){
  474.              $sql_where .= ' AND ( u.code LIKE \'%'.$request->get('search')['value'].'%\' )' ;     
  475.             $sql_where .= ' OR ( u.libelle LIKE \'%'.$request->get('search')['value'].'%\' )';     
  476.         
  477.         $sql_where .= ' FIND_IN_SET(\'' . $request->get('search')['value'] . '\', u.mot_cles) > 0';
  478. }*/
  479.         
  480.         
  481.         $limit =  $request->get('length') ;
  482.             
  483.         $offset $request->get('start') ;
  484.         
  485.         
  486.         $columns = ['u.nace','u.mot_cles','u.themes'];
  487.         
  488.         $orders = [] ;
  489.         
  490.         
  491.         for($i=$i<count($request->get('order')) ;$i++ ){
  492.             
  493.              $orders[] = $columns$request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
  494.             
  495.         }
  496.         
  497.         
  498.         if( count($orders)>0){
  499.         $order " ORDER BY ".implode(' , ',$orders) ;
  500.         }
  501.         else{
  502.         $order "" ;  
  503.         }
  504.         
  505.         
  506.         $affectations $this->em->createQuery(
  507.                 'SELECT u 
  508.                 FROM App\Entity\MotClesThemes u
  509.                
  510.                 
  511.                 WHERE 1=1 '.$sql_where.' '.$order.'
  512.                  
  513.                 '
  514.                 )
  515.                 ->setMaxResults($limit)
  516.                 ->setFirstResult($offset)
  517.                 ->getResult()  ;
  518.         
  519.         
  520.                 $I_nbResultatsTotal count$affectations ) ;
  521.         $output = [] ; 
  522.         foreach($affectations as $affectation){
  523.             $motCles="";
  524.             $themes="";
  525.             if(!empty($affectation->getThemes())){
  526.                 $themes.="<ul>";
  527.                 foreach($affectation->getThemes() as $t){
  528.                     $theme $this->em->getRepository(Theme::class)->find($t);
  529.                        
  530.                     $themes.="<li>".$theme->getNom()."</li>";
  531.                 }
  532.                 $themes.="</ul>";
  533.             }
  534.             else 
  535.             {
  536.                 $themes="--";
  537.             }
  538.             if(!empty($affectation->getMotCles())){
  539.                 $motCles.="<ul>";
  540.                 foreach($affectation->getMotCles() as $t){
  541.                        
  542.                     $motCles.="<li>".$t."</li>";
  543.                 }
  544.                 $motCles.="</ul>";
  545.             }
  546.             else 
  547.             {
  548.                 $motCles="--";
  549.             }
  550.         $output[] = [
  551.                 
  552.                 'id'=>$affectation->getId() ,
  553.                 'nace'=>$affectation->getNace()->getCode(),
  554.                // 'keywords'=>$affectation->getMotCle(),
  555.                 //'ape'=>$affectation->getApe()!=null?$affectation->getApe()->getApe():"--",
  556.                 'themes'=> $themes,
  557.                 'motsCles'=>$motCles
  558.                     ];
  559.          
  560.         }
  561.         
  562.         $JSON json_encode($output);
  563.         $JSON '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
  564.         $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  565.         return $response;
  566.         
  567.     }
  568.     /**
  569.     * @Route("/upload_nace_list", name="upload_nace_list" , methods={"POST"}, options = {"expose"=true})
  570.     */
  571.     public function upload_nace_list (Request $request): Response{
  572.         if ($request->files->has('nace_file')) {
  573.             $file $request->files->get('nace_file');
  574.             $uploadDirRoot $this->getParameter('uploads_directory') ;
  575. //
  576.             if ($request->get('delete_old_codes')) {
  577.                 $codes $this->em->getRepository(CodesNaces::class)->findAll();
  578.                 foreach($codes as $c) {
  579.                     $this->em->remove($c);
  580.                 }
  581.                 $this->em->flush();
  582.             }
  583.             $filesystem = new Filesystem();
  584.             $fileName $file->getClientOriginalName();          
  585.             $NaceDir $uploadDirRoot.'/NaceFiles/'  ;   
  586.                 if( $filesystem->exists($NaceDir ) == false ){
  587.                     $filesystem->mkdir($NaceDir 0777true);
  588.                 }      
  589.             
  590.                 $file->move($NaceDir$fileName);
  591.         
  592.               /*  if ($file->getClientOriginalExtension() === 'pdf') {
  593.                     $pdf = new Fpdi();
  594.                     $pdf->setSourceFile($ApeDir . $fileName);
  595.                 
  596.                     $data = [];
  597.                 
  598.                     for ($page = 1; $page <= $pdf->getNumberOfPages(); $page++) {
  599.                         $pdf->AddPage();
  600.                         $templateId = $pdf->importPage($page);
  601.                         $size = $pdf->getTemplateSize($templateId);
  602.                         $pdf->useTemplate($templateId, null, null, $size['w'], $size['h'], true);
  603.                         $text = $pdf->getText();
  604.                         dd($pdf,$templateId,$text);
  605.                     $pdfData = $this->processPdfFile($ApeDir . $fileName);
  606.                    // $this->insertDataIntoDatabase($pdfData);
  607.                 }
  608.             }
  609.                 */
  610.                 
  611.                 if ($file->getClientOriginalExtension() === 'pdf') {
  612.                     $csvData $this->convertPdfToCsv($file);
  613.                     //$this->insertCsvDataIntoAPEEntity($csvData);
  614.                     dd$csvData);
  615.                     return $this->json(['msg' => 'OK']);
  616.                 } 
  617.                 else if($file->getClientOriginalExtension() === 'csv') {
  618.                     $data=[];
  619.                     if (($handle fopen($NaceDir $fileName"r")) !== false) {
  620.                         while (($row fgetcsv($handle0",")) !== false) {
  621.                             $data[] = $row;
  622.                         }
  623.                         fclose($handle);
  624.                     }
  625.                     foreach($data as $i=> $r){
  626.                         if($r[0]== "Code Nace")
  627.                         {
  628.                             unset($data[$i]);
  629.                         }
  630.                     }
  631.                     $data array_values($data);//pour corriger les indice de chaque array
  632.                     for ($i 0$i count($data); $i++) {
  633.                        
  634.                         $code = new CodesNaces();
  635.                         $code->setCode($data[$i][0]);
  636.                         $code->setLibelle($data[$i][1]);
  637.                         $code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  638.                         $this->em->persist($code); 
  639.                                 
  640.                             }
  641.                    
  642.                    
  643.                  
  644.                
  645.             $this->em->flush();
  646.             $msg = ['msg'=>'OK']  ;
  647.         
  648.             $JSON json_encode($msg);
  649.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  650.             
  651.             
  652.             return $response ;
  653.             
  654.                 }
  655.                 else {
  656.                     $spreadsheet IOFactory::load($NaceDir $fileName);
  657.                     $worksheet $spreadsheet->getActiveSheet();
  658.                     // dd($worksheet->getRowIterator());
  659.                         $headerFound false;
  660.                         $data = [];
  661.                     foreach ($worksheet->getRowIterator() as $row) {
  662.                         $rowData=[]; 
  663.                         foreach ($row->getCellIterator() as $cell) {
  664.                             $value $cell->getValue();
  665.                             if (!$headerFound && in_array($value, ['Code Nace''Libellé'])) {
  666.                                 $headerFound true;
  667.                                 break; 
  668.                             }
  669.                             if($value !== null && $value !== 'Code Nace' && $value !== 'Libellé' )
  670.                             {    if (is_string($value)) 
  671.                                 {
  672.                                     $rowData[] = $value;
  673.                                 }
  674.                                 else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
  675.                                     // Si la valeur est une instance de RichText, récupérez le texte brut
  676.                                     $plainText '';
  677.                                     foreach ($value->getRichTextElements() as $element) {
  678.                                         $plainText .= $element->getText();
  679.                                     }
  680.                                     $rowData[]= $plainText;
  681.                                 
  682.                                 }
  683.                                 
  684.                             }
  685.                         }
  686.                         
  687.                         if ($headerFound) {
  688.                         $data[] = $rowData;
  689.                         }
  690.                     }
  691.                     
  692.                     $data array_filter($data);//pour supprimer les array vide
  693.                     $data array_values($data);//pour corriger les indice de chaque array
  694.                     for ($i 0$i count($data); $i++) {
  695.                        
  696.                         $code = new CodesNaces();
  697.                         $code->setCode($data[$i][0]);
  698.                         $code->setLibelle($data[$i][1]);
  699.                         $code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  700.                         $this->em->persist($code); 
  701.                                 
  702.                             }
  703.                    
  704.                    
  705.                  
  706.                
  707.             $this->em->flush();
  708.             $msg = ['msg'=>'OK']  ;
  709.         
  710.             $JSON json_encode($msg);
  711.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  712.             
  713.             
  714.             return $response ;
  715.             
  716.             }
  717.         }
  718.         return $this->json(['error' => 'Aucun fichier soumis'], 400);   
  719.     }
  720.       /**
  721.     * @Route("/upload_mots_cles_list", name="upload_mots_cles_list" , methods={"POST"}, options = {"expose"=true})
  722.     */
  723.     public function upload_mots_cles_list (Request $request): Response{
  724.         if ($request->files->has('keywords_file')) {
  725.             $file $request->files->get('keywords_file');
  726.             $uploadDirRoot $this->getParameter('uploads_directory') ;
  727.             /*if ($request->get('delete_old_codes')) {
  728.                 $codes = $this->em->getRepository(MotClesThemes::class)->findAll();
  729.                 foreach($codes as $c) {
  730.                     $this->em->remove($c);
  731.                 }
  732.                 $this->em->flush();
  733.             }*/
  734.             $filesystem = new Filesystem();
  735.             $fileName $file->getClientOriginalName();          
  736.             $keywordsDir $uploadDirRoot.'/MotClesFiles/'  ;   
  737.                 if( $filesystem->exists($keywordsDir ) == false ){
  738.                     $filesystem->mkdir($keywordsDir 0777true);
  739.                 }      
  740.             
  741.                 $file->move($keywordsDir$fileName);
  742.         
  743.              if($file->getClientOriginalExtension() === 'csv') {
  744.                     $data=[];
  745.                     if (($handle fopen($keywordsDir $fileName"r")) !== false) {
  746.                         while (($row fgetcsv($handle0",")) !== false) {
  747.                             $data[] = $row;
  748.                         }
  749.                         fclose($handle);
  750.                     }
  751.                     foreach($data as $i=> $r){
  752.                         if($r[0]== "id")
  753.                         {
  754.                             unset($data[$i]);
  755.                         }
  756.                     
  757.                     }
  758.                     $data array_values($data);//pour corriger les indice de chaque array
  759.                     //dd($data);
  760.                     for ($i 0$i count($data); $i++) {
  761.                        
  762.                         $code = new MotClesThemes();
  763.                         
  764.                         $codeNace $this->em->getRepository(CodesNaces::class)->find($data[$i][0]);
  765.                         $code->setNace($codeNace);
  766.                         //$code->setLibelle($data[$i][1]);
  767.                         $keywords preg_split('/\d+\.\s*/'$data[$i][5], -1PREG_SPLIT_NO_EMPTY);
  768.                         //$trimmedKeywords = array_map('trim', $keywords);
  769.                         $trimmedKeywords array_map(function($keyword) {
  770.                             return trim($keyword", "); // Supprime les virgules et les espaces en début et fin de chaîne
  771.                         }, $keywords);
  772.                         //dd($trimmedKeywords);
  773.                         $code->setMotCles($trimmedKeywords);
  774.                         $code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  775.                         $this->em->persist($code); 
  776.                                 
  777.                             }
  778.                    
  779.                    
  780.                  
  781.                
  782.             $this->em->flush();
  783.             $msg = ['msg'=>'OK']  ;
  784.         
  785.             $JSON json_encode($msg);
  786.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  787.             
  788.             
  789.             return $response ;
  790.             
  791.                 }
  792.                 else {
  793.                     $spreadsheet IOFactory::load($NaceDir $fileName);
  794.                     $worksheet $spreadsheet->getActiveSheet();
  795.                     // dd($worksheet->getRowIterator());
  796.                         $headerFound false;
  797.                         $data = [];
  798.                     foreach ($worksheet->getRowIterator() as $row) {
  799.                         $rowData=[]; 
  800.                         foreach ($row->getCellIterator() as $cell) {
  801.                             $value $cell->getValue();
  802.                             if (!$headerFound && in_array($value, ['Code Nace''Libellé'])) {
  803.                                 $headerFound true;
  804.                                 break; 
  805.                             }
  806.                             if($value !== null && $value !== 'Code Nace' && $value !== 'Libellé' )
  807.                             {    if (is_string($value)) 
  808.                                 {
  809.                                     $rowData[] = $value;
  810.                                 }
  811.                                 else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
  812.                                     // Si la valeur est une instance de RichText, récupérez le texte brut
  813.                                     $plainText '';
  814.                                     foreach ($value->getRichTextElements() as $element) {
  815.                                         $plainText .= $element->getText();
  816.                                     }
  817.                                     $rowData[]= $plainText;
  818.                                 
  819.                                 }
  820.                                 
  821.                             }
  822.                         }
  823.                         
  824.                         if ($headerFound) {
  825.                         $data[] = $rowData;
  826.                         }
  827.                     }
  828.                     
  829.                     $data array_filter($data);//pour supprimer les array vide
  830.                     $data array_values($data);//pour corriger les indice de chaque array
  831.                     for ($i 0$i count($data); $i++) {
  832.                        
  833.                         $code = new CodesNaces();
  834.                         $code->setCode($data[$i][0]);
  835.                         $code->setLibelle($data[$i][1]);
  836.                         $code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  837.                         $this->em->persist($code); 
  838.                                 
  839.                             }
  840.                    
  841.                    
  842.                  
  843.                
  844.             $this->em->flush();
  845.             $msg = ['msg'=>'OK']  ;
  846.         
  847.             $JSON json_encode($msg);
  848.             $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  849.             
  850.             
  851.             return $response ;
  852.             
  853.             }
  854.         }
  855.         return $this->json(['error' => 'Aucun fichier soumis'], 400);   
  856.     }
  857.     /**
  858.     * @Route("/get_affectation_keywords_by_id/{id}", name="get_affectation_keywords_by_id" , methods={"GET","POST"}, options = {"expose"=true})
  859.     */
  860.     public function get_affectation_keywords_by_id(int $idRequest $request): Response
  861.     {   
  862.         $code $this->em->getRepository(MotClesThemes::class)->find($id);
  863.         $output=[];
  864.         if (!$code) {
  865.             return new Response('code n\'existe pas!'Response::HTTP_NOT_FOUND);
  866.         };
  867.         $output = [
  868.                 
  869.             'id'=>$code->getId() ,
  870.             'nace'=>$code->getNace()->getCode(),
  871.            'keywords'=>$code->getMotCles(),
  872.             'ape'=>$code->getApe()!=null?$code->getApe()->getApe():"--",
  873.             'themes'=>$code->getThemes(),
  874.                 ];
  875.      
  876.     
  877.     
  878.     $JSON json_encode($output);
  879.     $response   = new Response($JSON200, ['Content-Type' => 'application/json']);
  880.     return $response;
  881.     
  882.        
  883.     }
  884.     /**
  885.     * @Route("/edit_keywords_themes", name="edit_keywords_themes" , methods={"GET","POST"}, options = {"expose"=true})
  886.     */
  887.     public function edit_keywords_themesRequest $request): Response
  888.     {   
  889.         //dd($request->request->all());
  890.         $keywords json_decode($request->get('keywords'), true);
  891.         $code $this->em->getRepository(MotClesThemes::class)->find($request->get('motcle_id'));
  892.         if ($code) {
  893.             $code->setMotCles($keywords);
  894.             $code->setThemes($request->get('theme_edit'));
  895.             $code->setDateUpdate\DateTime::createFromFormat('Y-m-d H:i:s',  date('Y-m-d H:i:s' ) ) );
  896.     
  897.             $this->em->persist($code);
  898.             $this->em->flush();
  899.     
  900.             return new JsonResponse(['status' => 'OK']);
  901.         } else {
  902.             return new JsonResponse(['status' => 'KOO']);
  903.         }
  904.     
  905.        
  906.     }
  907.         /**
  908.     * @Route("/delete_nace/{id}", name="delete_nace" , methods={"DELETE"}, options = {"expose"=true})
  909.     */
  910.     public function delete_nace(int $idRequest $request): Response
  911.     {   
  912.         $code $this->em->getRepository(CodesNaces::class)->find($id);
  913.         if (!$code) {
  914.             return new Response('code Nace not found!'Response::HTTP_NOT_FOUND);
  915.         };
  916.         try {
  917.             $this->em->remove($code);
  918.             $this->em->flush();
  919.             return new JsonResponse(['status' => 'OK']);
  920.         } catch (\Exception $e) {
  921.             return new Response('Error deleting Ape: ' $e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
  922.         }
  923.     }
  924.    /**
  925.      * @Route("/analyzeText", name="analyzeText", methods={"GET","POST"}, options = {"expose"=true})
  926.      */
  927.     public function analyzeText(Request $request): Response
  928.     {
  929.         $text "Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses    ";
  930.         // Envoi du texte à l'API ChatGPT
  931.         $ch curl_init();
  932.         curl_setopt($chCURLOPT_URL'https://api.openai.com/v1/chat/completions');
  933.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  934.         curl_setopt($chCURLOPT_POST1);
  935.         curl_setopt($chCURLOPT_POSTFIELDSjson_encode(["prompt" => "Translate the following English text to French: '{Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses}'""max_tokens" => 60]));
  936.         $headers = array();
  937.         $headers[] = 'Content-Type: application/json';
  938.         $headers[] = 'Authorization: Bearer sk-proj-BXRCNQIKztjj4lycV3QyT3BlbkFJEwONH31on1FiL2uXTsS9';
  939.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  940.         $response curl_exec($ch);
  941.         if (curl_errno($ch)) {
  942.             echo 'Error:' curl_error($ch);
  943.         }
  944.         curl_close($ch);
  945.         // Extraction de la réponse de l'API de la chaîne JSON
  946.         $responseData json_decode($responsetrue);
  947.         dd($responseData);
  948.         $chatResponse $responseData['choices'][0]['text'];
  949.         // Extraction des mots clés et des thèmes à partir de la réponse
  950.         // Note : Les détails spécifiques de cette étape dépendront de la bibliothèque ou du service de NLP que vous utilisez
  951.         // Ici, nous utilisons simplement les fonctionnalités de base de la bibliothèque php-ai/php-ml pour illustrer
  952.         $vectorizer = new TokenCountVectorizer(new WordTokenizer());
  953.         $tfIdfTransformer = new TfIdfTransformer();
  954.         $vectorizer->fit([$chatResponse]);
  955.         $vectorizer->transform($tokens);
  956.         $tfIdfTransformer->fit($tokens);
  957.         $tfIdfTransformer->transform($tokens);
  958.         $keywords $vectorizer->getVocabulary();
  959.         dd($keywords);
  960.      
  961.     }
  962.     private function convertPdfToCsv($file)
  963.     {
  964.         $pdfPath $file->getRealPath();
  965.         
  966.         $parser = new Parser();
  967.         $document $parser->parseFile($pdfPath);
  968.         
  969.         $text '';
  970.         foreach ($document->getPages() as $page) {
  971.             $text .= $page->getText();
  972.         }
  973.         
  974.         $lines explode("\n"$text);
  975.         
  976.         $csvData '';
  977.         
  978.         foreach ($lines as $line) {
  979.         
  980.             $columns explode("\t"$line);
  981.             if (count($columns) === 3) {
  982.                 $csvData .= implode(','$columns) . "\n";
  983.             }
  984.         }
  985.         $uploadDirRoot $this->getParameter('uploads_directory') ;
  986.         $saveDirectory=$uploadDirRoot.'/APEFiles/csvFile'
  987.         if (!file_exists($saveDirectory)) {
  988.             mkdir($saveDirectory0777true); 
  989.         }
  990.         $csvFilePath $saveDirectory '/output.csv';
  991.         
  992.         file_put_contents($csvFilePath$csvData);
  993.         return $csvFilePath;
  994.     }
  995. }