<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Filesystem\Filesystem;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Smalot\PdfParser\Parser;
use setasign\Fpdi\Fpdi;
use App\Entity\Pays;
use App\Entity\Ape;
use App\Entity\Theme;
use App\Entity\MotClesThemes;
use App\Entity\CodesNaces;
use App\Repository\AdministrateursRepository;
use App\Repository\GroupeRestrictionRepository;
use App\Repository\GroupeRestrictionPageRepository;
use App\Repository\ApeRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Doctrine\ORM\EntityManagerInterface;
use DateTime;
class ApeController extends AbstractController
{
public function __construct(SessionInterface $session , Container $container , EntityManagerInterface $em )
{
$this->em = $em ;
$this->session = $session ;
}
#[Route('/ape', name: 'configuration_ape')]
public function index(Request $request,GroupeRestrictionRepository $groupeRestrictionRepository,
GroupeRestrictionPageRepository $grouprestrictionpageRepository,
AdministrateursRepository $AdministrateursRepository): Response
{
$accessArray=[];
$niveauAcessPages = [];
$groupeRestrictions = [];
if( ($this->session->get('susrD3p9LjjY86') == 'gA64ya3G5N') && ($request->hasSession()) ){
$admin = $this->session->get('supAdT9m2XJzn4');
}else if(($this->session->get('supAdT9m2XJzn4') != null) && ($request->hasSession())){
$admin = $AdministrateursRepository->findOneBy(['email'=>$this->session->get('supAdT9m2XJzn4')['email']]);
$adminId = $admin->getId();
$groupeRestrictions = $groupeRestrictionRepository->findByAdminId($adminId);
$restrictionPages = $grouprestrictionpageRepository->findByRestriction($groupeRestrictions[0]->getId());
$accessArray = $restrictionPages[0]->getAccess();
$niveauAcessPagesCollection = $restrictionPages[0]->getNiveauAcessPages();
$niveauAcessPagesCollection->initialize();
$niveauAcessPages = $niveauAcessPagesCollection->toArray();
}else {
return $this->redirectToRoute('connexion');
}
$pays = $this->em->getRepository(Pays::class)->findAll();
return $this->render('ape/ape.html.twig',[
'admin' => $admin,
'pays' => $pays,
'access' => $accessArray,
'pages' => $niveauAcessPages,
]);
}
/**
* @Route("/serverApe", name="serverApe", methods={"GET","POST"}, options = {"expose" = true})
*/
public function serverApe(Request $request): Response
{
$sql_where = "" ;
if($request->get('search')['value']!=""){
$sql_where .= ' AND ( u.activites LIKE \'%'.$request->get('search')['value'].'%\' )' ;
$sql_where .= ' OR ( u.division LIKE \'%'.$request->get('search')['value'].'%\' )';
}
$user_array = [] ;
$limit = $request->get('length') ;
$offset = $request->get('start') ;
$array_search = array();
$columns = ['u.ape','u.division','u.activites','u.dateCreation'];
$orders = [] ;
for($i=0 ; $i<count($request->get('order')) ;$i++ ){
$orders[] = $columns[ $request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
}
if( count($orders)>0){
$order = " ORDER BY ".implode(' , ',$orders) ;
}
else{
$order = "" ;
}
$apes = $this->em->createQuery(
'SELECT u
FROM App\Entity\Ape u
WHERE 1=1 '.$sql_where.' '.$order.'
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult() ;
$I_nbResultatsTotal = count( $apes ) ;
$output = [] ;
foreach($apes as $ape){
$output[] = [
'id'=>$ape->getId() ,
'ape'=>$ape->getApe(),
'division'=>$ape->getDivision(),
'activites'=>$ape->getActivites(),
'dateCreation'=> date_format( $ape->getDateCreation() , 'd/m/Y '),
'dateUpdate' => $ape->getDateUpdate() !== null ? date_format($ape->getDateUpdate(), 'd/m/Y ') : '--'
];
}
$JSON = json_encode($output);
$JSON = '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/ajout_ape", name="ajout_ape" , options = {"expose"=true})
*/
public function ajout_ape(Request $request): Response
{
$ape = new Ape();
$ape->setApe($request->get('ape'));
$ape->setActivites($request->get('Activites'));
$ape->setDivision($request->get('Division'));
$ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
try {
$this->em->persist($ape);
$this->em->flush();
return new JsonResponse(['status' => 'OK']);
} catch (\Exception $e) {
return new JsonResponse(['status' => 'KOO','message' => $e->getMessage()]);
}
}
/**
* @Route("/modif_ape/{id}", name="modif_ape" , methods={"POST"}, options = {"expose"=true})
*/
public function modif_ape(int $id, Request $request): Response
{
$ape = $this->em->getRepository(Ape::class)->find($id);
if (!$ape) {
return new JsonResponse(['status' => 'KOO', 'message' => 'Region non trouvé !']);
}
$ape->setApe($request->get('ape_edit'));
$ape->setActivites($request->get('Activites_edit'));
$ape->setDivision($request->get('Division_edit'));
$currentDateTime = new DateTime();
$ape->setDateUpdate($currentDateTime);
try {
$this->em->persist($ape);
$this->em->flush();
return new JsonResponse(['status' => 'OK', 'message' => 'Region mis à jour avec succès !']);
} catch (\Exception $e) {
return new JsonResponse(['status' => 'error', 'message' => 'Erreur lors de la modification du region : ' . $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
/**
* @Route("/delete_ape/{id}", name="delete_ape" , methods={"DELETE"}, options = {"expose"=true})
*/
public function delete_ape(int $id, Request $request): Response
{
$ape = $this->em->getRepository(Ape::class)->find($id);
if (!$ape) {
return new Response('Ape not found!', Response::HTTP_NOT_FOUND);
};
try {
$this->em->remove($ape);
$this->em->flush();
return new JsonResponse(['status' => 'OK']);
} catch (\Exception $e) {
return new Response('Error deleting Ape: ' . $e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
/**
* @Route("/upload_ape_list", name="upload_ape_list" , methods={"POST"}, options = {"expose"=true})
*/
public function upload_ape_list (Request $request): Response{
if ($request->files->has('ape_file')) {
$file = $request->files->get('ape_file');
$uploadDirRoot = $this->getParameter('uploads_directory') ;
if ($request->get('delete_old_ape')) {
$codes = $this->em->getRepository(Ape::class)->findAll();
foreach ($codes as $c) {
$this->em->remove($c);
}
$this->em->flush();
}
$filesystem = new Filesystem();
$fileName = $file->getClientOriginalName();
$ApeDir = $uploadDirRoot.'/APEFiles/' ;
if( $filesystem->exists($ApeDir ) == false ){
$filesystem->mkdir($ApeDir , 0777, true);
}
$file->move($ApeDir, $fileName);
/* if ($file->getClientOriginalExtension() === 'pdf') {
$parser = new Parser();
$pdf = $parser->parseFile($ApeDir.$fileName);
$text = '';
foreach ($pdf->getPages() as $page) {
$text .= $page->getText();
}
$lines = explode(PHP_EOL, $text);
//dd($lines);
$data = [];
foreach ($lines as $line) {
// Divisez la ligne en colonnes en utilisant le caractère de tabulation comme délimiteur
$columns = explode("\t", $line);
// Ajoutez les colonnes dans le tableau de données
$data[] = $columns;
}
$pdf = new Fpdi();
$pageCount = $pdf->setSourceFile($ApeDir.$fileName);
$data = [];
dd($data,$pdf );
}
else */
if($file->getClientOriginalExtension() === 'csv') {
$data=[];
if (($handle = fopen($ApeDir . $fileName, "r")) !== false) {
while (($row = fgetcsv($handle, 0, ",")) !== false) {
$data[] = $row;
}
fclose($handle);
}
foreach($data as $i=> $r){
if($r[0]== "DIVISION")
{
unset($data[$i]);
}
}
unset($data[0]);
$data = array_values($data);
/* à corriger pour fixer les divisions
for ($i = 0; $i < count($data); $i++) {
if (count($data[$i]) === 2) {
$prevIndex = $i - 1;
while ($prevIndex >= 0 && count($data[$prevIndex]) !== 3) {
$prevIndex--;
}
if ($prevIndex >= 0) {
$data[$i] = [
$data[$prevIndex][0],
$data[$i][0],
$data[$i][1],
];
}
}
}*/
//dd($data);
for ($i = 0; $i < count($data); $i++) {
$ape = new APE();
$ape->setActivites($data[$i][5]);
//$ape->setDivision($data[$i][0]);
$clean_ape = preg_replace('/[A-Za-z]+$/', '', $data[$i][1]);
//dd($clean_ape);
//$ape->setApe($data[$i][0]);
$ape->setApe($clean_ape);
$ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($ape);
}
//dd($data);
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
else {
$spreadsheet = IOFactory::load($ApeDir . $fileName);
$worksheet = $spreadsheet->getActiveSheet();
// dd($worksheet->getRowIterator());
$headerFound = false;
$data = [];
foreach ($worksheet->getRowIterator() as $row) {
$rowData=[];
foreach ($row->getCellIterator() as $cell) {
$value = $cell->getValue();
if (!$headerFound && in_array($value, ['DIVISION', 'NAF', 'ACTIVITE'])) {
$headerFound = true;
break;
}
if($value !== null && $value !== 'DIVISION' && $value !== 'NAF' && $value !== 'ACTIVITE')
{ if (is_string($value))
{
$rowData[] = $value;
}
else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
// Si la valeur est une instance de RichText, récupérez le texte brut
$plainText = '';
foreach ($value->getRichTextElements() as $element) {
$plainText .= $element->getText();
}
$rowData[]= $plainText;
}
}
}
if ($headerFound) {
$data[] = $rowData;
}
}
$data = array_filter($data);//pour supprimer les array vide
$data = array_values($data);//pour corriger les indice de chaque array
for ($i = 0; $i < count($data); $i++) {
if (count($data[$i]) === 2) {
$prevIndex = $i - 1;
while ($prevIndex >= 0 && count($data[$prevIndex]) !== 3) {
$prevIndex--;
}
if ($prevIndex >= 0) {
$data[$i] = [
$data[$prevIndex][0],
$data[$i][0],
$data[$i][1],
];
}
}
}
for ($i = 0; $i < count($data); $i++) {
$ape = new APE();
$ape->setActivites($data[$i][2]);
$ape->setDivision($data[$i][0]);
$ape->setApe($data[$i][1]);
$ape->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($ape);
}
//dd($data);
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
}
return $this->json(['error' => 'Aucun fichier soumis'], 400);
}
/**
* @Route("/serverNace", name="serverNace", methods={"GET","POST"}, options = {"expose" = true})
*/
public function serverNace(Request $request): Response
{
$sql_where = "" ;
if($request->get('search')['value']!=""){
$sql_where .= ' AND ( u.code LIKE \'%'.$request->get('search')['value'].'%\' )' ;
$sql_where .= ' OR ( u.libelle LIKE \'%'.$request->get('search')['value'].'%\' )';
}
$limit = $request->get('length') ;
$offset = $request->get('start') ;
$columns = ['u.id','u.code','u.libelle'];
$orders = [] ;
for($i=0 ; $i<count($request->get('order')) ;$i++ ){
$orders[] = $columns[ $request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
}
if( count($orders)>0){
$order = " ORDER BY ".implode(' , ',$orders) ;
}
else{
$order = "" ;
}
$naces = $this->em->createQuery(
'SELECT u
FROM App\Entity\CodesNaces u
WHERE 1=1 '.$sql_where.' '.$order.'
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult() ;
$I_nbResultatsTotal = count( $naces ) ;
$output = [] ;
foreach($naces as $nace){
$output[] = [
'id'=>$nace->getId() ,
'code'=>$nace->getCode(),
'Libelle'=>$nace->getLibelle(),
'dateCreation'=> date_format( $nace->getDateCreation() , 'd/m/Y '),
];
}
$JSON = json_encode($output);
$JSON = '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/serverThemesKeyWords", name="serverThemesKeyWords", methods={"GET","POST"}, options = {"expose" = true})
*/
public function serverThemesKeyWords(Request $request): Response
{
$sql_where = "" ;
/* if($request->get('search')['value']!=""){
$sql_where .= ' AND ( u.code LIKE \'%'.$request->get('search')['value'].'%\' )' ;
$sql_where .= ' OR ( u.libelle LIKE \'%'.$request->get('search')['value'].'%\' )';
$sql_where .= ' FIND_IN_SET(\'' . $request->get('search')['value'] . '\', u.mot_cles) > 0';
}*/
$limit = $request->get('length') ;
$offset = $request->get('start') ;
$columns = ['u.nace','u.mot_cles','u.themes'];
$orders = [] ;
for($i=0 ; $i<count($request->get('order')) ;$i++ ){
$orders[] = $columns[ $request->get('order')[$i]['column'] ].' '.$request->get('order')[$i]['dir'] ;
}
if( count($orders)>0){
$order = " ORDER BY ".implode(' , ',$orders) ;
}
else{
$order = "" ;
}
$affectations = $this->em->createQuery(
'SELECT u
FROM App\Entity\MotClesThemes u
WHERE 1=1 '.$sql_where.' '.$order.'
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult() ;
$I_nbResultatsTotal = count( $affectations ) ;
$output = [] ;
foreach($affectations as $affectation){
$motCles="";
$themes="";
if(!empty($affectation->getThemes())){
$themes.="<ul>";
foreach($affectation->getThemes() as $t){
$theme = $this->em->getRepository(Theme::class)->find($t);
$themes.="<li>".$theme->getNom()."</li>";
}
$themes.="</ul>";
}
else
{
$themes="--";
}
if(!empty($affectation->getMotCles())){
$motCles.="<ul>";
foreach($affectation->getMotCles() as $t){
$motCles.="<li>".$t."</li>";
}
$motCles.="</ul>";
}
else
{
$motCles="--";
}
$output[] = [
'id'=>$affectation->getId() ,
'nace'=>$affectation->getNace()->getCode(),
// 'keywords'=>$affectation->getMotCle(),
//'ape'=>$affectation->getApe()!=null?$affectation->getApe()->getApe():"--",
'themes'=> $themes,
'motsCles'=>$motCles
];
}
$JSON = json_encode($output);
$JSON = '{"draw": '.$request->get('draw').',"recordsTotal":'.$I_nbResultatsTotal.',"recordsFiltered":'.$I_nbResultatsTotal.',"data":'.$JSON.'}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/upload_nace_list", name="upload_nace_list" , methods={"POST"}, options = {"expose"=true})
*/
public function upload_nace_list (Request $request): Response{
if ($request->files->has('nace_file')) {
$file = $request->files->get('nace_file');
$uploadDirRoot = $this->getParameter('uploads_directory') ;
//
if ($request->get('delete_old_codes')) {
$codes = $this->em->getRepository(CodesNaces::class)->findAll();
foreach($codes as $c) {
$this->em->remove($c);
}
$this->em->flush();
}
$filesystem = new Filesystem();
$fileName = $file->getClientOriginalName();
$NaceDir = $uploadDirRoot.'/NaceFiles/' ;
if( $filesystem->exists($NaceDir ) == false ){
$filesystem->mkdir($NaceDir , 0777, true);
}
$file->move($NaceDir, $fileName);
/* if ($file->getClientOriginalExtension() === 'pdf') {
$pdf = new Fpdi();
$pdf->setSourceFile($ApeDir . $fileName);
$data = [];
for ($page = 1; $page <= $pdf->getNumberOfPages(); $page++) {
$pdf->AddPage();
$templateId = $pdf->importPage($page);
$size = $pdf->getTemplateSize($templateId);
$pdf->useTemplate($templateId, null, null, $size['w'], $size['h'], true);
$text = $pdf->getText();
dd($pdf,$templateId,$text);
$pdfData = $this->processPdfFile($ApeDir . $fileName);
// $this->insertDataIntoDatabase($pdfData);
}
}
*/
if ($file->getClientOriginalExtension() === 'pdf') {
$csvData = $this->convertPdfToCsv($file);
//$this->insertCsvDataIntoAPEEntity($csvData);
dd( $csvData);
return $this->json(['msg' => 'OK']);
}
else if($file->getClientOriginalExtension() === 'csv') {
$data=[];
if (($handle = fopen($NaceDir . $fileName, "r")) !== false) {
while (($row = fgetcsv($handle, 0, ",")) !== false) {
$data[] = $row;
}
fclose($handle);
}
foreach($data as $i=> $r){
if($r[0]== "Code Nace")
{
unset($data[$i]);
}
}
$data = array_values($data);//pour corriger les indice de chaque array
for ($i = 0; $i < count($data); $i++) {
$code = new CodesNaces();
$code->setCode($data[$i][0]);
$code->setLibelle($data[$i][1]);
$code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($code);
}
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
else {
$spreadsheet = IOFactory::load($NaceDir . $fileName);
$worksheet = $spreadsheet->getActiveSheet();
// dd($worksheet->getRowIterator());
$headerFound = false;
$data = [];
foreach ($worksheet->getRowIterator() as $row) {
$rowData=[];
foreach ($row->getCellIterator() as $cell) {
$value = $cell->getValue();
if (!$headerFound && in_array($value, ['Code Nace', 'Libellé'])) {
$headerFound = true;
break;
}
if($value !== null && $value !== 'Code Nace' && $value !== 'Libellé' )
{ if (is_string($value))
{
$rowData[] = $value;
}
else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
// Si la valeur est une instance de RichText, récupérez le texte brut
$plainText = '';
foreach ($value->getRichTextElements() as $element) {
$plainText .= $element->getText();
}
$rowData[]= $plainText;
}
}
}
if ($headerFound) {
$data[] = $rowData;
}
}
$data = array_filter($data);//pour supprimer les array vide
$data = array_values($data);//pour corriger les indice de chaque array
for ($i = 0; $i < count($data); $i++) {
$code = new CodesNaces();
$code->setCode($data[$i][0]);
$code->setLibelle($data[$i][1]);
$code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($code);
}
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
}
return $this->json(['error' => 'Aucun fichier soumis'], 400);
}
/**
* @Route("/upload_mots_cles_list", name="upload_mots_cles_list" , methods={"POST"}, options = {"expose"=true})
*/
public function upload_mots_cles_list (Request $request): Response{
if ($request->files->has('keywords_file')) {
$file = $request->files->get('keywords_file');
$uploadDirRoot = $this->getParameter('uploads_directory') ;
/*if ($request->get('delete_old_codes')) {
$codes = $this->em->getRepository(MotClesThemes::class)->findAll();
foreach($codes as $c) {
$this->em->remove($c);
}
$this->em->flush();
}*/
$filesystem = new Filesystem();
$fileName = $file->getClientOriginalName();
$keywordsDir = $uploadDirRoot.'/MotClesFiles/' ;
if( $filesystem->exists($keywordsDir ) == false ){
$filesystem->mkdir($keywordsDir , 0777, true);
}
$file->move($keywordsDir, $fileName);
if($file->getClientOriginalExtension() === 'csv') {
$data=[];
if (($handle = fopen($keywordsDir . $fileName, "r")) !== false) {
while (($row = fgetcsv($handle, 0, ",")) !== false) {
$data[] = $row;
}
fclose($handle);
}
foreach($data as $i=> $r){
if($r[0]== "id")
{
unset($data[$i]);
}
}
$data = array_values($data);//pour corriger les indice de chaque array
//dd($data);
for ($i = 0; $i < count($data); $i++) {
$code = new MotClesThemes();
$codeNace = $this->em->getRepository(CodesNaces::class)->find($data[$i][0]);
$code->setNace($codeNace);
//$code->setLibelle($data[$i][1]);
$keywords = preg_split('/\d+\.\s*/', $data[$i][5], -1, PREG_SPLIT_NO_EMPTY);
//$trimmedKeywords = array_map('trim', $keywords);
$trimmedKeywords = array_map(function($keyword) {
return trim($keyword, ", "); // Supprime les virgules et les espaces en début et fin de chaîne
}, $keywords);
//dd($trimmedKeywords);
$code->setMotCles($trimmedKeywords);
$code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($code);
}
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
else {
$spreadsheet = IOFactory::load($NaceDir . $fileName);
$worksheet = $spreadsheet->getActiveSheet();
// dd($worksheet->getRowIterator());
$headerFound = false;
$data = [];
foreach ($worksheet->getRowIterator() as $row) {
$rowData=[];
foreach ($row->getCellIterator() as $cell) {
$value = $cell->getValue();
if (!$headerFound && in_array($value, ['Code Nace', 'Libellé'])) {
$headerFound = true;
break;
}
if($value !== null && $value !== 'Code Nace' && $value !== 'Libellé' )
{ if (is_string($value))
{
$rowData[] = $value;
}
else if ($value instanceof PhpOffice\PhpSpreadsheet\RichText\RichText) {
// Si la valeur est une instance de RichText, récupérez le texte brut
$plainText = '';
foreach ($value->getRichTextElements() as $element) {
$plainText .= $element->getText();
}
$rowData[]= $plainText;
}
}
}
if ($headerFound) {
$data[] = $rowData;
}
}
$data = array_filter($data);//pour supprimer les array vide
$data = array_values($data);//pour corriger les indice de chaque array
for ($i = 0; $i < count($data); $i++) {
$code = new CodesNaces();
$code->setCode($data[$i][0]);
$code->setLibelle($data[$i][1]);
$code->setDateCreation(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($code);
}
$this->em->flush();
$msg = ['msg'=>'OK'] ;
$JSON = json_encode($msg);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response ;
}
}
return $this->json(['error' => 'Aucun fichier soumis'], 400);
}
/**
* @Route("/get_affectation_keywords_by_id/{id}", name="get_affectation_keywords_by_id" , methods={"GET","POST"}, options = {"expose"=true})
*/
public function get_affectation_keywords_by_id(int $id, Request $request): Response
{
$code = $this->em->getRepository(MotClesThemes::class)->find($id);
$output=[];
if (!$code) {
return new Response('code n\'existe pas!', Response::HTTP_NOT_FOUND);
};
$output = [
'id'=>$code->getId() ,
'nace'=>$code->getNace()->getCode(),
'keywords'=>$code->getMotCles(),
'ape'=>$code->getApe()!=null?$code->getApe()->getApe():"--",
'themes'=>$code->getThemes(),
];
$JSON = json_encode($output);
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
/**
* @Route("/edit_keywords_themes", name="edit_keywords_themes" , methods={"GET","POST"}, options = {"expose"=true})
*/
public function edit_keywords_themes( Request $request): Response
{
//dd($request->request->all());
$keywords = json_decode($request->get('keywords'), true);
$code = $this->em->getRepository(MotClesThemes::class)->find($request->get('motcle_id'));
if ($code) {
$code->setMotCles($keywords);
$code->setThemes($request->get('theme_edit'));
$code->setDateUpdate( \DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s' ) ) );
$this->em->persist($code);
$this->em->flush();
return new JsonResponse(['status' => 'OK']);
} else {
return new JsonResponse(['status' => 'KOO']);
}
}
/**
* @Route("/delete_nace/{id}", name="delete_nace" , methods={"DELETE"}, options = {"expose"=true})
*/
public function delete_nace(int $id, Request $request): Response
{
$code = $this->em->getRepository(CodesNaces::class)->find($id);
if (!$code) {
return new Response('code Nace not found!', Response::HTTP_NOT_FOUND);
};
try {
$this->em->remove($code);
$this->em->flush();
return new JsonResponse(['status' => 'OK']);
} catch (\Exception $e) {
return new Response('Error deleting Ape: ' . $e->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
/**
* @Route("/analyzeText", name="analyzeText", methods={"GET","POST"}, options = {"expose"=true})
*/
public function analyzeText(Request $request): Response
{
$text = "Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses ";
// Envoi du texte à l'API ChatGPT
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_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]));
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer sk-proj-BXRCNQIKztjj4lycV3QyT3BlbkFJEwONH31on1FiL2uXTsS9';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
// Extraction de la réponse de l'API de la chaîne JSON
$responseData = json_decode($response, true);
dd($responseData);
$chatResponse = $responseData['choices'][0]['text'];
// Extraction des mots clés et des thèmes à partir de la réponse
// Note : Les détails spécifiques de cette étape dépendront de la bibliothèque ou du service de NLP que vous utilisez
// Ici, nous utilisons simplement les fonctionnalités de base de la bibliothèque php-ai/php-ml pour illustrer
$vectorizer = new TokenCountVectorizer(new WordTokenizer());
$tfIdfTransformer = new TfIdfTransformer();
$vectorizer->fit([$chatResponse]);
$vectorizer->transform($tokens);
$tfIdfTransformer->fit($tokens);
$tfIdfTransformer->transform($tokens);
$keywords = $vectorizer->getVocabulary();
dd($keywords);
}
private function convertPdfToCsv($file)
{
$pdfPath = $file->getRealPath();
$parser = new Parser();
$document = $parser->parseFile($pdfPath);
$text = '';
foreach ($document->getPages() as $page) {
$text .= $page->getText();
}
$lines = explode("\n", $text);
$csvData = '';
foreach ($lines as $line) {
$columns = explode("\t", $line);
if (count($columns) === 3) {
$csvData .= implode(',', $columns) . "\n";
}
}
$uploadDirRoot = $this->getParameter('uploads_directory') ;
$saveDirectory=$uploadDirRoot.'/APEFiles/csvFile';
if (!file_exists($saveDirectory)) {
mkdir($saveDirectory, 0777, true);
}
$csvFilePath = $saveDirectory . '/output.csv';
file_put_contents($csvFilePath, $csvData);
return $csvFilePath;
}
}