config["path_scan"]) && !empty($f->config["path_scan"])
&& is_dir($f->config["path_scan"]."Done/")
&& is_dir($f->config["path_scan"]."Todo/")){
//On scanne le dossier, on vérifie qu'il n'est pas vide
$repo = scandir($f->config["path_scan"]."Done/");
//
if ($repo){
//Pour chaque dossier du Done, on vérifie la cohérence des données
foreach ($repo as $foldername) {
//Vérifie qu'il s'agit de dossier correct
if ($foldername != '.' && $foldername != '..') {
//Identifiant du dossier
$dossier = str_replace('.', '', $foldername);
//Vérifie si le numéro de dossier d'instruction est sur quatres chiffres
if(preg_match('/[A-Za-z]{2,3}'.$f->getParameter("departement").
$f->getParameter("commune").'[0-9]{2}[0-9]{4}[A-Za-z]{1,5}[0-9]{1,2}/',
$dossier)){
//On modifie le nom du dossier d'instruction pour qu'il ait la numérotation
//standard
$tempDossier = preg_split('/([A-Za-z]{2,3}'.$f->getParameter("departement").
$f->getParameter("commune").'[0-9]{2})/i', $dossier, 0, PREG_SPLIT_NO_EMPTY |
PREG_SPLIT_DELIM_CAPTURE);
$dossier = $tempDossier[0]."0".$tempDossier[1];
}
//On vérifie que le dossier existe
$sql = "SELECT dossier
FROM ".DB_PREFIXE."dossier
WHERE dossier = '".$dossier."'";
$dossierExist = $f->db->getOne($sql);
$f->addToLog("obj/digitalizedDocument.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
$f->isDatabaseError($dossierExist);
//Si le dossier n'existe pas on annule l'importation
if (!$dossierExist){
$this->addToLog($f->config["path_scan"]."Done/".$foldername.' : '._("Le dossier d'instruction n'existe pas.")." "._("L'importation a été annulee."), DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername.' : '._("Le dossier d'instruction n'existe pas.")." "._("L'importation a été annulee.")."
";
continue;
}
//Pour chaque document du dossier
$listFiles = listFiles($f->config["path_scan"]."Done/".$foldername, $f);
//Si le dossier n'est pas vide
if ($listFiles !== null) {
foreach($listFiles as $filename){
//On vérifie une correspondance exacte
$sql = "SELECT document_numerise "
. "FROM ".DB_PREFIXE."document_numerise "
. "WHERE dossier = '".$dossier."' AND "
. "nom_fichier='".$filename."'";
$document_numerise = $f->db->getOne($sql);
$f->addToLog("app/update_dn.php : db->getOne(".$sql.")", VERBOSE_MODE);
$f->isDatabaseError($document_numerise);
// Si aucune correspondance n'existe en base de données, on essaye une correpondance approximative en enlevant ce qui se trouve après les tirets
if (is_null($document_numerise)){
//Si le séparateur '-' est présent
if (strpos($filename, '-') !== false) {
//Sinon on récupère le nom du fichier avant le '-'
$nbFileToCorrect++;
$filenameTemp = strstr($filename, '-', true).".pdf";
//On vérifie la correspondance approximative
$sql = "SELECT document_numerise "
. "FROM ".DB_PREFIXE."document_numerise "
. "WHERE dossier = '".$dossier."' AND "
. "nom_fichier='".$filenameTemp."'";
$document_numerise = $f->db->getOne($sql);
$f->addToLog("app/update_dn.php : db->getOne(".$sql.")", VERBOSE_MODE);
$f->isDatabaseError($document_numerise);
//Si une correspondance approximative est trouvée
if (!is_null($document_numerise)){
//
require_once "../obj/document_numerise.class.php";
$document_numerise = new document_numerise($document_numerise, $f->db, DEBUG);
//Préparation des données
$val = array();
foreach($document_numerise->champs as $key => $champ){
$val[$champ] = $document_numerise->val[$key];
}
if($document_numerise->supprimer($val)){
//On déplace le fichier
if(!moveDocumentNumerise($f->config["path_scan"]."Done/".$foldername, $f->config["path_scan"]."Todo/".$foldername,$filename)){
$f->addToLog("app/update_dn.php : Une erreur s'est produite lors du déplacement du fichier ".$filename, DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Une erreur s'est produite lors du déplacement du fichier.")."
";
}
else{
echo $f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("L'import de ce fichier a été corrigé.")."
";
$nbMovedFiles++;
}
}
else {
$f->addToLog("app/update_dn.php : Une erreur s'est produite lors de la suppression du fichier ".$filename, DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Une erreur s'est produite lors de la suppression du fichier.")."
";
$nbErrorFiles++;
}
}
else {
$f->addToLog($f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Aucune correspondance approximative trouvée."), DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Aucune correspondance approximative trouvée.")."
";
$nbErrorFiles++;
}
}
else {
$this->addToLog($f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Aucune correspondance trouvée."), DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername."/".$filename.' : '._("Aucune correspondance trouvée.")."
";
$nbErrorFiles++;
}
}
}
}
else {
$f->addToLog($f->config["path_scan"]."Done/".$foldername.' : '._("Le dossier est vide."), DEBUG_MODE);
echo $f->config["path_scan"]."Done/".$foldername.' : '._("Le dossier est vide.")."
";
}
}
}
}
}
else {
$msg = "Le dossier de numérisation n'est pas correctement configuré";
}
//On affiche un message de résultat
echo $msg."Le traitement s'est terminé avec succés.
";
echo "Nombre de document(s) à corriger = ".$nbFileToCorrect."
";
$f->displayMessage("valid", "Nombre de fichiers corrigés : ".$nbMovedFiles);
if ($nbErrorFiles!=0)
$f->displayMessage("error", "Nombre de fichiers en erreur : ".$nbErrorFiles);
/**
* Cette fonction permet de recupérer et de classer dans un tableau
* la liste des documents présent dans le dossier passé en paramètre
* @param string $path Le chemin vers le dossier
* @param object $f Utils
* @return array Tableau des documents
*/
function listFiles($path, $f) {
//Tableau qui sera retourné en fin de traitement
$listFiles = array();
//Ouvre le répertoire
$dir = opendir($path);
//Si un dossier est ouvert
if ($dir) {
//Parcours le dossier
while(false !== ($file = readdir($dir))) {
//Si le document est bien un fichier de type pdf
if($file != '.' && $file != '..' && !is_dir($dir.$file)
&& strcasecmp(strstr($file, '.'), ".pdf") == 0) {
//Alors il est ajouté dans le tableau
array_push($listFiles, $file);
}
}
//Ferme le répertoire
closedir($dir);
} else {
//Sinon renvoi null
$f->addToLog($path.' : '._("Le dossier n'existe pas."));
return null;
}
//Si le tableau est vide on retourne null
if (count($listFiles) == 0) {
$f->addToLog($path.' : '._("Le dossier est vide."));
return null;
}
//Retourne le tableau des documents
return $listFiles;
}
/**
* Permet de déplacer les fichiers créés dans le filestorage vers le dossier
* des fichiers traités
* @param string $pathSrc Chemin du dossier source
* @param string $pathDes Chemin du dossier de destination
* @param string $filename Nom du fichier
* @return boolean Retourne true si le fichier à été déplacé sinon false
*/
function moveDocumentNumerise($pathSrc, $pathDes, $filename) {
//Si le dossier de destination n'existe pas, il est créé
if (!file_exists($pathDes)) {
mkdir($pathDes);
}
//Déplace le document
$move = rename($pathSrc.'/'.$filename, $pathDes.'/'.$filename);
//Si le déplacement à réussi
if ($move) {
//On retourne TRUE
return true;
}
//Si le deplacement n'est pas fait on retourne false
$this->addToLog($pathSrc.'/'.$filename.' : '.$this->NO_MOVE);
return false;
}