<?php
namespace App\Service\FO;
use App\Entity\Ged\Fichier;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\Container;
class FOService {
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function createDirectoryPublic($dir, $output = ''){
if(is_dir($dir)) return $dir;
$dir = realpath(__DIR__ . '/../../../public/').$dir;
return $this->createDirectory($dir, $output);
/*
$directories = explode('/', $dir);
$dirTmp = '';
foreach($directories as $key => $directory){
if($key == 0) $dirTmp = $directory; else $dirTmp .= '/'.$directory;
//if(is_object($output)) $output->writeln($dirTmp.' : '.is_dir($dirTmp));
if(!is_dir($dirTmp)){
if(is_object($output)) $output->writeln('Création dir : '.$dirTmp);
@mkdir($dirTmp,0775,true);
@chown($dirTmp,"www-data");
@chgrp($dirTmp,"www-data");
}
}
return $dir;
*/
}
public function createDirectory($dir, $output = ''){
if(is_dir($dir)) return $dir;
$directories = explode('/', $dir);
$dirTmp = '';
foreach($directories as $key => $directory){
if($key == 0) $dirTmp = $directory; else $dirTmp .= '/'.$directory;
//if(is_object($output)) $output->writeln($dirTmp.' : '.is_dir($dirTmp));
if(!is_dir($dirTmp)){
if(is_object($output)) $output->writeln('Création dir : '.$dirTmp);
@mkdir($dirTmp,0775,true);
@chown($dirTmp,"www-data");
@chgrp($dirTmp,"www-data");
}
}
return $dir;
}
public function enregistrerFichierGed($fileNameOriginal, $date, $idImport = '', $fichiers, $ext, $parent = '', $save=false){
$repo_fichier = $this->em->getRepository(Fichier::class);
$newFilename = preg_replace([
'/\s+/', // Remplace les espaces
'/[^a-zA-Z0-9_\-.\+]/' // Supprime les caractères spéciaux (sauf `.`, `-`, `_`, `+`)
], ['_', ''], $fileNameOriginal);
$dir = '/uploads/ged/'.$date->format('Y/m/d/');
$dir = $this->createDirectoryPublic($dir);
$fichier = '';
if(!empty($idImport)) $fichier = $repo_fichier->findOneBy(["idImport"=>$idImport,"libelle"=>$fileNameOriginal]);
if(!is_object($fichier) && !empty($parent)) $fichier = $repo_fichier->findOneBy(["parent"=>$parent,"libelle"=>$fileNameOriginal]);
if(!is_object($fichier)){
$fichier = new Fichier();
if(!empty($idImport)) $fichier->setIdImport($idImport);
$fichier->setType("fichier");
$fichier->setRenomme(false);
$fichier->setSupprimable(false);
$fichier->setModifiable(false);
//$fichier->setCommande($commande);
if(!empty($parent)) $fichier->setParent($parent);
$fichier->setLibelle($fileNameOriginal);
$fichier->setExtension($ext);
$fichier->setVersion(1);
$fichier->setChemin($dir.$newFilename);
$this->em->persist($fichier);
$fichiers[] = $fichier;
} else {
$fichiers[] = $fichier;
}
if($save) $this->em->flush();
return [
'fichiers'=> $fichiers,
'newFilename' => $newFilename,
'dir' => $dir
];
}
}