/[openfoncier]/trunk/obj/digitalizedDocument.class.php
ViewVC logotype

Diff of /trunk/obj/digitalizedDocument.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5254 by nhaye, Fri Nov 25 10:59:14 2016 UTC revision 14064 by softime, Thu Feb 16 22:52:47 2023 UTC
# Line 18  Line 18 
18  class DigitalizedDocument {  class DigitalizedDocument {
19    
20      /**      /**
21         * [$log_file description]
22         * @var string
23         */
24        static protected $log_file = "digitalized_document.log";
25    
26        /**
27       * @access static       * @access static
28       * @var string Messages utilisées pour l'écriture dans le log       * @var string Messages utilisées pour l'écriture dans le log
29       */       */
# Line 98  class DigitalizedDocument { Line 104  class DigitalizedDocument {
104       * @return int       Identifiant du type de document       * @return int       Identifiant du type de document
105       */       */
106      private function get_document_numerise_by_code($code) {      private function get_document_numerise_by_code($code) {
107            // Recherche du type de document avec le code de la nomenclature externe
108            // issu du nom du fichier
109            // Dans le nom du fichier des "_" sont utilisés à la place des "-" pour éviter
110            // la confusion entre le code de le pièce et son numéro de version. Pour
111            // retrouver la pièce ils doivent être remplacé.
112            $qres = $this->f->get_one_result_from_db_query(
113                sprintf(
114                    'SELECT
115                        lien_document_n_type_d_i_t.document_numerise_type
116                    FROM
117                        %1$slien_document_n_type_d_i_t
118                    WHERE
119                        lien_document_n_type_d_i_t.code LIKE \'%2$s\'',
120                    DB_PREFIXE,
121                    $this->f->db->escapeSimple(str_replace('_', '-', $code))
122                ),
123                array(
124                    "origin" => __METHOD__,
125                )
126            );
127            $document_numerise_type = $qres["result"];
128            if (! empty($document_numerise_type) && is_numeric($document_numerise_type)) {
129                return $document_numerise_type;
130            }
131    
132          //Requête SQL          //Requête SQL
133          $sql = "SELECT document_numerise_type          $qres = $this->f->get_one_result_from_db_query(
134                  FROM ".DB_PREFIXE."document_numerise_type              sprintf(
135                  WHERE code = '".$code."'";                  'SELECT
136          $document_numerise_type = $this->f->db->getOne($sql);                      document_numerise_type
137          $this->f->addToLog(__METHOD__."(): db->getOne(".$sql.")", VERBOSE_MODE);                  FROM
138          $this->f->isDatabaseError($document_numerise_type);                      %1$sdocument_numerise_type
139                    WHERE
140          //retourne la clé primaire                      code = \'%2$s\'',
141                    DB_PREFIXE,
142                    $this->f->db->escapeSimple($code)
143                ),
144                array(
145                    "origin" => __METHOD__,
146                )
147            );
148            $document_numerise_type = $qres["result"];
149          return $document_numerise_type;          return $document_numerise_type;
150      }      }
151    
152      /**      /**
153       * Ajoute une chaine de caracteres dans le log.       * Ajoute une chaine de caracteres dans le log.
154       * @param string $message Le message qui doit etre ajouté dans le log.       * @param string $message Le message qui doit etre ajouté dans le log.
      * @param mixed $type Le mode de log.  
155       */       */
156      protected function addToLog($message, $type = DEBUG_MODE) {      protected function add_to_log($message, $debug = false) {
157          //          //
158          logger::instance()->log($message, $type);          logger::instance()->log_to_file(self::$log_file, $message);
159            if ($debug === true) {
160                $this->f->addToLog($message, DEBUG_MODE);
161            }
162      }      }
163    
164      /**      /**
# Line 142  class DigitalizedDocument { Line 182  class DigitalizedDocument {
182              while(false !== ($file = readdir($dir))) {              while(false !== ($file = readdir($dir))) {
183    
184                  //Si le document est bien un fichier de type pdf                  //Si le document est bien un fichier de type pdf
185                  if($file != '.' && $file != '..' && !is_dir($dir.$file)                  $autorisedExtension = explode(';', $this->f->config['upload_extension']);
                     && strcasecmp(strstr($file, '.'), ".pdf") == 0) {  
186    
187                      //Alors il est ajouté dans le tableau                  // $this->add_to_log(__METHOD__."(): file = ".$file."; extension ? = ".strstr($file, '.')."; tableau= ".var_export($autorisedExtension, true));
188                    if($file != '.' && $file != '..' && !is_dir($dir.$file)
189                        && ! empty($autorisedExtension) && is_array($autorisedExtension)
190                        && in_array(strstr($file, '.'), $autorisedExtension, true) === true) {
191                            
192                    // Alors il est ajouté dans le tableau
193                      array_push($listFiles, $file);                      array_push($listFiles, $file);
194    
195                  }                  }
# Line 158  class DigitalizedDocument { Line 202  class DigitalizedDocument {
202          } else {          } else {
203    
204              //Sinon renvoi null              //Sinon renvoi null
205              $this->addToLog(__METHOD__."(): ".$path." : ".$this->NO_REP);              $this->add_to_log(__METHOD__."(): ".$path." : ".$this->NO_REP);
206              return null;              return null;
207          }          }
208    
209          //Si le tableau est vide on retourne null          //Si le tableau est vide on retourne null
210          if (count($listFiles) == 0) {          if (count($listFiles) == 0) {
211    
212              $this->addToLog(__METHOD__."(): ".$path." : ".$this->NO_FILES, EXTRA_VERBOSE_MODE);              $this->add_to_log(__METHOD__."(): ".$path." : ".$this->NO_FILES);
213              return null;              return null;
214    
215          }          }
# Line 217  class DigitalizedDocument { Line 261  class DigitalizedDocument {
261                  if (empty($type_doc)) {                  if (empty($type_doc)) {
262    
263                      //On retourne null                      //On retourne null
264                      $this->addToLog(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename);                      $this->add_to_log(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename, true);
265                      return null;                      return null;
266    
267                  } else {                  } else {
# Line 233  class DigitalizedDocument { Line 277  class DigitalizedDocument {
277                  //Si le tableau est vide on retourne null                  //Si le tableau est vide on retourne null
278                  if (count($metadata) == 0) {                  if (count($metadata) == 0) {
279    
280                      $this->addToLog(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename);                      $this->add_to_log(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename, true);
281                      return null;                      return null;
282    
283                  }                  }
# Line 244  class DigitalizedDocument { Line 288  class DigitalizedDocument {
288          }          }
289    
290          //Le nom du document n'est pas conforme          //Le nom du document n'est pas conforme
291          $this->addToLog(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename);          $this->add_to_log(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename, true);
292          return null;          return null;
           
293      }      }
294    
295      /**      /**
# Line 261  class DigitalizedDocument { Line 304  class DigitalizedDocument {
304          //Test si le fichier existe          //Test si le fichier existe
305          if (!file_exists($path.'/'.$filename)) {          if (!file_exists($path.'/'.$filename)) {
306              //              //
307              $this->addToLog(__METHOD__.'(): '.$path.'/'.$filename.' : '.$this->NO_FILE_EXIST);              $this->add_to_log(__METHOD__.'(): '.$path.'/'.$filename.' : '.$this->NO_FILE_EXIST, true);
308              return null;              return null;
309          }          }
310    
# Line 276  class DigitalizedDocument { Line 319  class DigitalizedDocument {
319          //Si le tableau est vide on retourne null          //Si le tableau est vide on retourne null
320          if (count($metadata) == 0) {          if (count($metadata) == 0) {
321    
322              $this->addToLog(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename);              $this->add_to_log(__METHOD__."(): ".$this->DOC_NO_CONFORME.$filename, true);
323              return null;              return null;
324    
325          }              }    
# Line 307  class DigitalizedDocument { Line 350  class DigitalizedDocument {
350       * @param  string $uid               Identifiant du fichier temporaire       * @param  string $uid               Identifiant du fichier temporaire
351       * @param  string $dossier           Identifiant du dossier d'instruction       * @param  string $dossier           Identifiant du dossier d'instruction
352       * @param  string $filename          Nom du document       * @param  string $filename          Nom du document
353       * @param  mixed $db                 Référence à la bdd       *
      * @param  mixed $DEBUG              Mode de debug  
354       * @return boolean                   Vrai ou faux       * @return boolean                   Vrai ou faux
355       */       */
356      public function createDocumentNumerise($document_numerise, $uid, $dossier, $filename, $db, $DEBUG = NULL) {      public function createDocumentNumerise($document_numerise, $uid, $dossier, $filename) {
357                    
358          //Maj en ajout          //Maj en ajout
359          $document_numerise->setParameter("maj",0);          $document_numerise->setParameter("maj",0);
# Line 320  class DigitalizedDocument { Line 362  class DigitalizedDocument {
362          $metadataFromFilename = $this->extractMetadataFromFilename($filename);          $metadataFromFilename = $this->extractMetadataFromFilename($filename);
363    
364          //Données          //Données
365            // Récupèration d'une nature de document numérisé pour pouvoir utiliser
366            // la méthode de récupèration de la valeur de la nature par défaut
367            $docNumNature = $this->f->get_inst__om_dbform(array(
368                'obj' => 'document_numerise_nature',
369                'idx' => ']'
370            ));
371    
372          $values = array(          $values = array(
373              'document_numerise' => '',              'document_numerise' => '',
374              'uid' => 'tmp|'.$uid,              'uid' => 'tmp|'.$uid,
# Line 327  class DigitalizedDocument { Line 376  class DigitalizedDocument {
376              'nom_fichier' => $filename,              'nom_fichier' => $filename,
377              'date_creation' => $metadataFromFilename['dateEvenementDocument'],              'date_creation' => $metadataFromFilename['dateEvenementDocument'],
378              'document_numerise_type' => $this->get_document_numerise_by_code($metadataFromFilename['title']),              'document_numerise_type' => $this->get_document_numerise_by_code($metadataFromFilename['title']),
379                'uid_dossier_final' => '',
380                'document_numerise_nature' => $docNumNature->get_default_select_value($dossier),
381                'description_type' => '',
382                'document_travail' => false,
383                'uid_thumbnail' => null,
384          );          );
385    
386          //Ajoute dans la table le lien          //Ajoute dans la table le lien
387          $document_numerise->ajouter($values, $db, $DEBUG);          $add = $document_numerise->ajouter($values);
388    
389          //Si le document n'est pas ajouté          //Si le document n'est pas ajouté
390          if (!$document_numerise->correct) {          if ($add === false) {
391    
392              //Log d'erreur              //Log d'erreur
393              $this->addToLog(__METHOD__."(): ".$dossier."/".$filename." : "._("Une erreur s'est produite lors de l'ajout du document ").$filename.".");              $this->add_to_log(__METHOD__."(): ".$dossier."/".$filename." : "._("Une erreur s'est produite lors de l'ajout du document ").$filename.".", true);
394              $this->addToLog(__METHOD__."(): ".$document_numerise->msg);              $this->add_to_log(__METHOD__."(): ".$document_numerise->msg, true);
395              return false;              return false;
396          }          }
397    
# Line 363  class DigitalizedDocument { Line 417  class DigitalizedDocument {
417          $move = rename($pathSrc.'/'.$filename, $pathDes.'/'.$filename);          $move = rename($pathSrc.'/'.$filename, $pathDes.'/'.$filename);
418    
419          //Si le déplacement à réussi          //Si le déplacement à réussi
420          if ($move) {          if ($move === true) {
   
             //On retourne TRUE  
421              return true;              return true;
422          }          } else {
423                $this->add_to_log(__METHOD__."(): ".$pathSrc."/".$filename." : ".$this->NO_MOVE, true);
424                return false;
425            }
426    
427          //Si le deplacement n'est pas fait on retourne false          //Si le deplacement n'est pas fait on retourne false
428          $this->addToLog(__METHOD__."(): ".$pathSrc."/".$filename." : ".$this->NO_MOVE);          $this->add_to_log(__METHOD__."(): ".$pathSrc."/".$filename." : ".$this->NO_MOVE);
429          return false;          return false;
           
430      }      }
431    
432      /**      /**
# Line 391  class DigitalizedDocument { Line 445  class DigitalizedDocument {
445              || ($dateImport == 'null' || $dateImport == null || $dateImport == '')) {              || ($dateImport == 'null' || $dateImport == null || $dateImport == '')) {
446    
447              //On supprime le fichier sans faire de test              //On supprime le fichier sans faire de test
448              if (unlink($file)) {              $delete_file = unlink($file);
449                              if ($delete_file === true) {
450                  return true;                  return true;
451                } else {
452                    $this->add_to_log(__METHOD__."(): ".$file." : ".$this->NO_DELETE_FILE.$file, true);
453                    return false;
454              }              }
455    
456          //Si la date d'import et le nombre de jour sont renseignés          //Si la date d'import et le nombre de jour sont renseignés
# Line 413  class DigitalizedDocument { Line 469  class DigitalizedDocument {
469              if ($dateImport <= $dateLimit) {              if ($dateImport <= $dateLimit) {
470    
471                  //on supprime le fichier                  //on supprime le fichier
472                  if (unlink($file)) {                  $delete_file = unlink($file);
473                                        if ($delete_file === true) {
474                      return true;                      return true;
475                    } else {
476                        $this->add_to_log(__METHOD__."(): ".$file." : ".$this->NO_DELETE_FILE.$file, true);
477                        return false;
478                  }                  }
479    
480              }              }
# Line 424  class DigitalizedDocument { Line 482  class DigitalizedDocument {
482          }          }
483    
484          //Si aucun traitement n'a été fait on retourne false          //Si aucun traitement n'a été fait on retourne false
485          $this->addToLog(__METHOD__."(): ".$file." : ".$this->NO_DELETE_FILE.$file);          $this->add_to_log(__METHOD__."(): ".$file." : ".$this->NO_DELETE_FILE.$file);
486          return false;          return false;
487    
488      }      }
# Line 437  class DigitalizedDocument { Line 495  class DigitalizedDocument {
495      public function deleteFolder($path) {      public function deleteFolder($path) {
496    
497          //Si le fichier est supprimé on retourne true          //Si le fichier est supprimé on retourne true
498          if (rmdir($path)) {          $delete_folder = rmdir($path);
499            if ($delete_folder === true) {
500              return true;              return true;
501            } else {
502                $this->add_to_log(__METHOD__."(): ".$path." : ".$this->NO_DELETE_FOLDER, true);
503                return false;
504          }          }
505    
506          //Si le fichier n'a pas été supprimé on retourne false          //Si le fichier n'a pas été supprimé on retourne false
507          $this->addToLog(__METHOD__."(): ".$path." : ".$this->NO_DELETE_FOLDER);          $this->add_to_log(__METHOD__."(): ".$path." : ".$this->NO_DELETE_FOLDER);
508          return false;          return false;
509    
510      }      }
# Line 452  class DigitalizedDocument { Line 514  class DigitalizedDocument {
514       * à l'importation des documents scannés       * à l'importation des documents scannés
515       * @param string $pathSrc Le chemin vers le dossier à traiter       * @param string $pathSrc Le chemin vers le dossier à traiter
516       * @param string $pathDes Le chemin vers le dossier après le traitement       * @param string $pathDes Le chemin vers le dossier après le traitement
517       * @param mixed $DEBUG mode de débuggage       *
518       * @return boolean true si le traitement à été fait sinon false       * @return boolean true si le traitement à été fait sinon false
519       */       */
520      function run_import($pathSrc, $pathDes, $DEBUG = NULL) {      function run_import($pathSrc, $pathDes) {
521                    
522          //Récupération du nom du répertoire          //Récupération du nom du répertoire
523          $foldername = substr(strrchr($pathSrc, "/"), 1);          $foldername = substr(strrchr($pathSrc, "/"), 1);
# Line 464  class DigitalizedDocument { Line 526  class DigitalizedDocument {
526          $dossier = str_replace('.', '', $foldername);          $dossier = str_replace('.', '', $foldername);
527    
528          //Vérifie si le numéro de dossier d'instruction est sur quatres chiffres          //Vérifie si le numéro de dossier d'instruction est sur quatres chiffres
529          if(preg_match('/[A-Za-z]{2,3}'.$this->f->getParameter("departement").          if(preg_match('/[A-Za-z]{2,3}'.strtoupper($this->f->getParameter("departement")).
530              $this->f->getParameter("commune").'[0-9]{2}[0-9]{4}[A-Za-z]{1,5}[0-9]{1,2}/',              $this->f->getParameter("commune").'[0-9]{2}[0-9]{4}[A-Za-z]{1,5}[0-9]{1,2}/',
531              $dossier)){              $dossier)){
532                            
533              //On modifie le nom du dossier d'instruction pour qu'il ait la numérotation              //On modifie le nom du dossier d'instruction pour qu'il ait la numérotation
534              //standard              //standard
535              $tempDossier = preg_split('/([A-Za-z]{2,3}'.$this->f->getParameter("departement").              $tempDossier = preg_split('/([A-Za-z]{2,3}'.strtoupper($this->f->getParameter("departement")).
536                  $this->f->getParameter("commune").'[0-9]{2})/i', $dossier, 0, PREG_SPLIT_NO_EMPTY |                  $this->f->getParameter("commune").'[0-9]{2})/i', $dossier, 0, PREG_SPLIT_NO_EMPTY |
537                  PREG_SPLIT_DELIM_CAPTURE);                  PREG_SPLIT_DELIM_CAPTURE);
538                            
# Line 478  class DigitalizedDocument { Line 540  class DigitalizedDocument {
540          }          }
541                    
542          //On vérifie que le dossier existe          //On vérifie que le dossier existe
543          $sql = "SELECT dossier          $inst_dossier_instruction = $this->f->get_inst__om_dbform(array(
544              FROM ".DB_PREFIXE."dossier              "obj" => "dossier",
545              WHERE dossier = '".$dossier."'";              "idx" => $dossier,
546          $dossierExist = $this->f->db->getOne($sql);          ));
         $this->f->addToLog(__METHOD__."(): db->getOne(".$sql.")", VERBOSE_MODE);  
         $this->f->isDatabaseError($dossierExist);  
           
547          //Si le dossier n'existe pas on annule l'importation          //Si le dossier n'existe pas on annule l'importation
548          if (!$dossierExist){          if (!$inst_dossier_instruction->exists()){
549              $this->addToLog(__METHOD__."(): ".$pathSrc."/ : "._("Le dossier d'instruction n'existe pas.")." ".$this->NO_IMPORT);              $this->add_to_log(__METHOD__."(): ".$pathSrc."/ : "._("Le dossier d'instruction n'existe pas.")." ".$this->NO_IMPORT, true);
550              return false;              return false;
551          }          }
552    
# Line 496  class DigitalizedDocument { Line 555  class DigitalizedDocument {
555          //Si il n'y a aucun document          //Si il n'y a aucun document
556          if ($listFiles === null) {          if ($listFiles === null) {
557              //On annule l'importation              //On annule l'importation
558              $this->addToLog(__METHOD__."(): ".$pathSrc."/ ".$this->NO_FILES." ".$this->NO_IMPORT);              $this->add_to_log(__METHOD__."(): ".$pathSrc."/ ".$this->NO_FILES." ".$this->NO_IMPORT);
559              return false;              return false;
560          }          }
561                    
# Line 521  class DigitalizedDocument { Line 580  class DigitalizedDocument {
580                  if ($uid !== null) {                  if ($uid !== null) {
581    
582                      //Instancie la class document_numerise                      //Instancie la class document_numerise
583                      require_once "../obj/document_numerise.class.php";                      $document_numerise = $this->f->get_inst__om_dbform(array(
584                      $document_numerise = new document_numerise("]", $this->f->db, $DEBUG);                          "obj" => "document_numerise",
585                            "idx" => "]",
586                        ));
587                            
588                      //Valeur retour formulaire                      //Valeur retour formulaire
589                      $document_numerise->retourformulaire = "dossier_instruction";                      $document_numerise->setParameter("retourformulaire", "dossier_instruction");
590    
591                      //Créer le document sur le filestorage et dans la table document_numerise                      //Créer le document sur le filestorage et dans la table document_numerise
592                      $createFileStorage = $this->createDocumentNumerise($document_numerise, $uid, $dossier, $filename, $this->f->db, $DEBUG);                      $createFileStorage = $this->createDocumentNumerise($document_numerise, $uid, $dossier, $filename);
593    
594                      //Si le document est crée sur le filestorage                      //Si le document est crée sur le filestorage
595                      if ($createFileStorage !== false && $createFileStorage !== 'OP_FAILURE') {                      if ($createFileStorage !== false && $createFileStorage !== 'OP_FAILURE') {
# Line 540  class DigitalizedDocument { Line 601  class DigitalizedDocument {
601                      }                      }
602                      else {                      else {
603                          //On annule l'importation                          //On annule l'importation
604                          $this->addToLog(__METHOD__."(): ".$pathSrc." : "._("Une erreur s'est produite lors de l'ajout du document ").$filename.". ".$this->NO_IMPORT);                          $this->add_to_log(__METHOD__."(): ".$pathSrc." : "._("Une erreur s'est produite lors de l'ajout du document ").$filename.". ".$this->NO_IMPORT, true);
605                          $this->filenameError[] = $filename;                          $this->filenameError[] = $filename;
606                      }                      }
                     //Del le fichier temporaire  
                     if($uid != $this->filestorage->delete_temporary($uid)) {  
                         $this->addToLog(__METHOD__."(): "._("Erreur lors de la suppression du fichier temporaire")." : ".$filename);  
                     }  
607                  }                  }
608              }              }
609    
# Line 617  class DigitalizedDocument { Line 674  class DigitalizedDocument {
674    
675  }  }
676    
677  ?>  

Legend:
Removed from v.5254  
changed lines
  Added in v.14064

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26