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; }