source: pmb4.2/trunk/fuentes/pmb/classes/indexation_docnum.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 7.9 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: indexation_docnum.class.php,v 1.30 2015-04-03 11:16:19 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path."/XMLlist.class.php");
10require_once("$base_path/catalog/explnum/index_docnum/index_pdf.class.php");
11require_once("$base_path/catalog/explnum/index_docnum/index_html.class.php");
12require_once("$base_path/catalog/explnum/index_docnum/index_txt.class.php");
13require_once("$base_path/catalog/explnum/index_docnum/index_oo.class.php");
14require_once("$base_path/catalog/explnum/index_docnum/index_bnf.class.php");
15require_once("$base_path/catalog/explnum/index_docnum/index_mso.class.php");
16require_once("$base_path/catalog/explnum/index_docnum/index_epub.class.php");
17require_once("$class_path/curl.class.php");
18require_once("$class_path/upload_folder.class.php");
19require_once("$include_path/explnum.inc.php");
20
21/**
22 * Classe de gestion de l'indexation des documents numériques
23 */
24class indexation_docnum {
25       
26        var $id_explnum;
27        var $fichier='';
28        var $file_content='';
29        var $file_url='';
30        var $mimetype='';
31        var $explnum_nomfichier='';
32        var $ext='';
33        var $os='';
34        var $class_associee='';
35        var $texte='';
36        var $vignette='';
37       
38        /**
39         * Constructeur
40         */
41        function indexation_docnum($id, $texte=''){
42                $this->id_explnum = $id;
43                if(!$texte){
44                        $this->fetch_data();
45                        if ($this->file_content || $this->mimetype == 'URL') {
46                                $this->run_index();
47                        }
48                } else {
49                        $this->texte = $texte;
50                }
51               
52        }
53       
54        /**
55         * Parcours des données de la table explnum
56         */
57        function fetch_data(){
58                global $dbh;
59               
60                $rqt_expl = "select explnum_mimetype, explnum_nomfichier, explnum_extfichier, explnum_data, explnum_url, concat(repertoire_path,explnum_path) as path, explnum_repertoire from explnum left join upload_repertoire on repertoire_id=explnum_repertoire where explnum_id='".$this->id_explnum."'";
61                $result_expl = pmb_mysql_query($rqt_expl,$dbh);
62                if($result_expl) {
63                        while(($explnum = pmb_mysql_fetch_object($result_expl))){
64                                if($explnum->explnum_data)
65                                        //le fichier est en base
66                                        $this->file_content = $explnum->explnum_data;
67                                else {
68                                        //le fichier est en upload
69                                        $up = new upload_folder($explnum->explnum_repertoire);
70                                        $path = str_replace('//','/',$explnum->path.$explnum->explnum_nomfichier);
71                                        if($path){
72                                                $path = $up->encoder_chaine($path);
73                                                if(file_exists($path)){
74                                                        $fp = fopen($path , "r" ) ;
75                                                        if((filesize($path)) && (filesize($path) < $this->return_bytes(ini_get('upload_max_filesize')) && (ini_get('memory_limit')*1==-1 || (filesize($path) < (($this->return_bytes(ini_get('memory_limit'))*1)-(memory_get_usage(true)*1)))))){
76                                                                $this->file_content = fread ($fp, filesize($path));
77                                                        }else{
78                                                                $this->file_content ="";
79                                                        }
80                                                        fclose ($fp) ;
81                                                } else $this->file_content = "";
82                                        }
83                                } 
84                                $this->file_url = $explnum->explnum_url;
85                                $this->mimetype = $explnum->explnum_mimetype;
86                                $this->explnum_nomfichier = $explnum->explnum_nomfichier;
87                                $this->ext = $explnum->explnum_extfichier;
88                        }
89                }       
90        }
91        /**
92         * Pour avoir la taille en octets
93         */
94        function return_bytes($val) {
95            $val = trim($val);
96            $last = strtolower($val[strlen($val)-1]);
97            switch($last) {
98                // Le modifieur 'G' est disponible depuis PHP 5.1.0
99                case 'g':
100                    $val *= 1024;
101                case 'm':
102                    $val *= 1024;
103                case 'k':
104                    $val *= 1024;
105            }
106            return $val;
107        }
108        /**
109         * Exécution du processus d'indexation
110         */
111        function run_index(){
112                if($this->mimetype == 'URL'){
113                        //récupération par cURL
114                        $this->get_file_from_curl($this->file_url);
115                        create_tableau_mimetype();
116                        $this->mimetype = trouve_mimetype($this->fichier);
117                        if(!$this->mimetype){
118                                //Test sur l'extension du fichier
119                                $this->ext = extension_fichier($this->file_url);
120                                $this->mimetype = trouve_mimetype($this->file_url,$this->ext);
121                        }
122                        if(!$this->mimetype && $this->explnum_nomfichier){
123                                //Test sur l'extension du fichier
124                                $this->ext = extension_fichier($this->explnum_nomfichier);
125                                $this->mimetype = trouve_mimetype($this->file_url,$this->ext);
126                        }
127                        if ($this->mimetype && !$this->ext) {
128                                $this->ext = extension_fichier($this->file_url);
129                        }
130                        if ($this->mimetype && $this->explnum_nomfichier && !$this->ext) {
131                                $this->ext = extension_fichier($this->explnum_nomfichier);
132                        }
133                        if (!$this->mimetype) {
134                                $this->mimetype = "URL";
135                        }
136                        global $prefix_url_image ;
137                        if ($prefix_url_image) $tmpprefix_url_image = $prefix_url_image; 
138                                else $tmpprefix_url_image = "./" ;
139                        if($tmp = construire_vignette('',"",$this->file_url)){
140                                $this->vignette = $tmp;
141                        }else{
142                                $this->vignette = construire_vignette('',$tmpprefix_url_image."images/mimetype/".icone_mimetype($this->mimetype, $this->ext));
143                        }
144                } else {
145                        //récupération dans la base
146                        $this->get_file($this->file_content);
147                        create_tableau_mimetype();
148                        if(!$this->mimetype) $this->mimetype = trouve_mimetype($this->fichier);
149                        if(!$this->mimetype && $this->explnum_nomfichier){
150                                //Test sur l'extension du fichier
151                                $this->ext = extension_fichier($this->explnum_nomfichier);
152                                $this->mimetype = trouve_mimetype($this->fichier,$this->ext);
153                        }
154                }
155                if (file_exists($this->fichier)) {
156                        //On parse le XML pour recupérer le nom de la classe
157                        $this->parse_xml();
158                        //On choisit la classe correspondant au traitement du type MIME
159                        $this->choose_class($this->class_associee);
160                }
161        }
162       
163        /**
164         * On récupère le nom de la classe de traitement en fonction du  mimetype
165         */
166        function parse_xml(){
167                global $base_path;
168               
169                $parse = new XMLlist("$base_path/catalog/explnum/index_docnum/index_doc.xml"); 
170                $parse->analyser();
171                if($this->mimetype) {
172                        $class = $parse->table[$this->mimetype];
173                }
174                if($class) {
175                        $this->class_associee = $class;
176                } else {
177                        $this->class_associee = '';
178                }
179        }
180       
181        /**
182         * On récupère le texte du document numérique grâce à la bonne classe
183         */
184        function choose_class($class_name){
185                if($class_name){
186                        $index_class = new $class_name($this->fichier,$this->mimetype,$this->ext);
187                        $this->texte = $index_class->get_text($this->fichier);
188                }
189        }
190       
191        /**
192         * On récupère le contenu du fichier qui est en base
193         */
194        function get_file($filecontent){
195                global $base_path;
196               
197                //On définit un nom unique dans le dossier temporaire
198                $nom_temp = session_id().microtime();
199                $nom_temp = str_replace(' ','_',$nom_temp);
200                $nom_temp = str_replace('.','_',$nom_temp);
201               
202                //On écrit le contenu dans le fichier
203                $fd = fopen("$base_path/temp/".$nom_temp,"w");
204                fwrite($fd,$filecontent);
205                fclose($fd);   
206                $this->fichier = "$base_path/temp/".$nom_temp; 
207        }
208       
209        /**
210         * On récupère le contenu du fichier à distance
211         */
212        function get_file_from_curl($f_url){
213                global $base_path;
214               
215                //On définit un nom unique dans le dossier temporaire
216                $nom_temp = session_id().microtime();
217                $nom_temp = str_replace(' ','_',$nom_temp);
218                $nom_temp = str_replace('.','_',$nom_temp);
219                $this->fichier = "$base_path/temp/".$nom_temp;
220                $aCurl = new Curl();
221                $aCurl->save_file_name=$this->fichier; 
222                $aCurl->get($f_url);   
223               
224        }
225       
226        /**
227         * On indexe le document numérique
228         */
229        function indexer(){
230                global $dbh;
231               
232                $explnum_index_sew = strip_empty_words($this->texte);
233                if(strlen($explnum_index_sew)) {
234                        $explnum_index_sew = ' '.$explnum_index_sew.' ';
235                }
236                $rqt = " update explnum set explnum_index_sew='".addslashes($explnum_index_sew)."', explnum_index_wew='".addslashes($this->texte)."' where explnum_id='".$this->id_explnum."'";
237                pmb_mysql_query($rqt,$dbh);     
238                if (file_exists($this->fichier)) unlink($this->fichier);       
239        }
240       
241        /**
242         * On supprime l'index du document numérique
243         */
244        function desindexer(){
245                global $dbh;
246               
247                $rqt = " update explnum set explnum_index_sew='', explnum_index_wew='' where explnum_id='".$this->id_explnum."'";
248                pmb_mysql_query($rqt,$dbh);     
249
250        }
251}
252?>
Note: See TracBrowser for help on using the repository browser.