source: pmb4.2/trunk/fuentes/pmb/admin/import/func_delphe.inc.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: 12.0 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: func_delphe.inc.php,v 1.9 2015-04-03 11:16:23 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9function recup_noticeunimarc_suite($notice) {
10        global $hl,$bl;
11        global $info_461,$info_463;
12        global $info_606;
13        global $serie;
14       
15       
16        $info_461 = array();
17        $info_463 = array();
18        $info_606 = array();
19        $serie = array();
20               
21        $record = new iso2709_record($notice, AUTO_UPDATE); 
22       
23        $bl=$record->inner_guide['bl'];
24        $hl=$record->inner_guide['hl']; 
25       
26        $info_461=$record->get_subfield("461","t");
27        $info_463=$record->get_subfield("463","v","d");
28        $info_606=$record->get_subfield("606","a","2");
29} // fin recup_noticeunimarc_suite
30       
31function import_new_notice_suite() {
32        global $dbh ;
33        global $notice_id ;
34       
35        global $hl,$bl;
36        global $info_461,$info_463;
37        global $info_606;
38        global $id_unimarc;
39        global $delphe_convert;
40       
41        //Récupération des id de thésaurus
42        $thesEntreprise=identifiants_thesaurus("Entreprise");
43        $thesDelphes=identifiants_thesaurus("Mot clé Delphes");
44        $thesAciege=identifiants_thesaurus("Aciege");
45       
46        //les notices ne sont que des articles...
47        if($hl==2 && $bl=="a"){
48                $bulletin = array(
49                        'date' => decoupe_date($info_463[0]['d']),
50                        'num' => clean_string($info_463[0]['v'])
51                );
52                $perio = array(
53                        'titre' =>  clean_string($info_461[0]),
54                );
55                notice_to_article($perio,$bulletin);
56        }
57       
58        //les descripteurs
59       
60        if(count($delphe_convert)==0){
61                init_delphe_term_convert();
62        }
63        $lang="fr_FR";
64        $ordre_categ = 0 ;
65        foreach ($info_606 as $terms){
66                $categ_id=0;
67                $term = $terms['a'];
68                switch($terms['2']){
69                        case "local" :
70                                $id_thesaurus=$thesEntreprise[TOP];
71                                $non_classes =$thesEntreprise[NONCLASSES];
72                                $categ_id = find_categ($term,$id_thesaurus,$lang);
73                                if($categ_id == 0){
74                                        $categ_id = add_categ($term,$id_thesaurus,$non_classes,$lang);
75                                }
76                                break;
77                        default : 
78                                //on regarde par défault dans Aciège...
79                                $id_thesaurus=$thesAciege[TOP];
80                                $non_classes =$thesAciege[NONCLASSES];
81                                $categ_id = find_categ($term,$id_thesaurus,$lang);
82                                if($categ_id == 0){
83                                        //pas trouvé dans aciège, on regarde dans delphes
84                                        $id_thesaurus=$thesDelphes[TOP];
85                                        $non_classes =$thesDelphes[NONCLASSES];
86                                        $categ_id = find_categ($term,$id_thesaurus,$lang);
87                                        if($categ_id == 0){
88                                                //pas trouvé dans delphe, on regarde la table de correspondance
89                                                if(isset($delphe_convert[$term]['aciege']) && $delphe_convert[$term]['aciege']!= ""){
90                                                        //on reprend la correspondance dans Aciège
91                                                        //on peut avoir plusieurs termes séparés par un +...
92                                                        $terms_to_keep = explode("+",$delphe_convert[$term]['aciege']);
93                                                        if(count($terms_to_keep)>1){
94                                                                foreach($terms_to_keep as $term_to_keep){
95                                                                        $term_to_keep = trim($term_to_keep);
96                                                                        $categ_id = find_categ($term_to_keep,1,$lang); 
97                                                                        if($categ_id){
98                                                                                save_categ($categ_id,$ordre_categ);
99                                                                                $ordre_categ++;
100                                                                        }
101                                                                        $categ_id=0;                                                           
102                                                                }
103                                                        }else{
104                                                                $categ_id = find_categ($delphe_convert[$term]['aciege'],1,$lang);
105                                                        }
106                                                }else if (isset($delphe_convert[$term]['aciege']) && $delphe_convert[$term]['delphes']!=""){
107                                                        //ou dans delphes
108                                                        $categ_id = find_categ($delphe_convert[$term]['delphes'],$id_thesaurus,$lang);
109                                                }else if (!isset($delphe_convert[$term])){
110                                                        //si le terme est présent dans le fichier sans aucunes correspondances,on veut juste pas le traiter du tout, sinon reprise en non classé...
111                                                        $categ_id = add_categ($term,$id_thesaurus,$non_classes,$lang);
112                                                }
113                                        }
114                                }
115                                break;
116                }
117                if($categ_id){
118                        save_categ($categ_id,$ordre_categ);
119                        $ordre_categ++;
120                }       
121        }
122       
123        //on renseigne le champ perso indexpresse avec le 001...
124        //on récup l'id du champ
125        $rqt = "select idchamp, datatype from notices_custom where name ='cp_index' ";
126        $res = pmb_mysql_query($rqt);
127        if(pmb_mysql_num_rows($res)){
128                $cp_indexpresse = pmb_mysql_fetch_object($res);
129                $insert = "insert into notices_custom_values set notices_custom_champ=".$cp_indexpresse->idchamp.", notices_custom_origine=".$notice_id.", notices_custom_".$cp_indexpresse->datatype." = '".$id_unimarc."'";
130                pmb_mysql_query($insert) or die(pmb_mysql_error());
131        }       
132       
133} // fin import_new_notice_suite
134                       
135// TRAITEMENT DES EXEMPLAIRES ICI
136function traite_exemplaires () {}
137// fin traite_exemplaires       TRAITEMENT DES EXEMPLAIRES JUSQU'ICI
138
139// fonction spécifique d'export de la zone 995
140function export_traite_exemplaires ($ex=array()) {}     
141
142
143
144
145//catégories
146function find_categ($term,$id_thesaurus,$lang){
147        $categ_id = categories::searchLibelle(addslashes($term),$id_thesaurus,$lang);
148        if($categ_id){
149                //le terme existe
150                $noeud = new noeuds($categ_id);
151                if($noeud->num_renvoi_voir){
152                        $categ_to_index = $noeud->num_renvoi_voir;
153                }else{
154                        $categ_to_index = $categ_id;
155                }
156        }else{
157                $categ_to_index=0;
158        }
159        return $categ_to_index;
160}
161
162function add_categ($term,$id_thesaurus,$non_classes,$lang){
163        $n = new noeuds();
164        $n->num_thesaurus = $id_thesaurus;
165        $n->num_parent = $non_classes;
166        $n->save();
167        $c = new categories($n->id_noeud, $lang);
168        $c->libelle_categorie = $term;
169        $c->index_categorie = ' '.strip_empty_words($term).' ';
170        $c->save();                     
171        return $n->id_noeud;
172}
173
174function save_categ($categ_to_index,$ordre_categ){
175        global $notice_id;
176        $requete = "INSERT INTO notices_categories (notcateg_notice,num_noeud,ordre_categorie) VALUES(".$notice_id.",".$categ_to_index.",".$ordre_categ.")";
177        pmb_mysql_query($requete);     
178}
179
180function init_delphe_term_convert(){
181        global $base_path;
182       
183        global $delphe_convert;
184        $delphe_convert = array();
185        $fp = fopen("$base_path/admin/convert/imports/delphe2unimarciso/TabCorrespDelphes.txt","r");
186        while (!feof($fp)) {
187                $data = fgetcsv($fp,4096,"\t");
188                $delphe_convert[$data[0]] = array('aciege' => $data[2], 'delphes' => $data[3]);
189        }
190        //highlight_string(print_r($delphe_convert,true));//die;
191        fclose($fp);
192}
193
194//Pour le formatage de la date
195function decoupe_date($date_nom_formate,$annee_seule=false){
196        $date="";
197        $tab=preg_split("/\D/",$date_nom_formate);
198       
199        switch(count($tab)){
200                case 3 :
201                        if(strlen($tab[0]) == 4){
202                                $date=$tab[0]."-".$tab[1]."-".$tab[2];
203                        }elseif(strlen($tab[2]) == 4){
204                                $date=$tab[2]."-".$tab[1]."-".$tab[0];
205                        }elseif($tab[0] > 31){
206                                $date="19".$tab[0]."-".$tab[1]."-".$tab[2];
207                        }elseif($tab[2] > 31){
208                                $date="19".$tab[2]."-".$tab[1]."-".$tab[0];
209                        }
210                        break;
211                case 2 :
212                        if(strlen($tab[0]) == 4){
213                                $date=$tab[0]."-".$tab[1]."-01";
214                        }elseif(strlen($tab[1]) == 4){
215                                $date=$tab[1]."-".$tab[0]."-01";
216                        }elseif($tab[0] > 31){
217                                $date="19".$tab[0]."-".$tab[1]."-01";
218                        }elseif($tab[1] > 31){
219                                $date="19".$tab[1]."-".$tab[0]."-01";
220                        }
221                        break;
222                case 1 :
223                        if(strlen($tab[0]) == 8){
224                                $date=substr($tab[0],0,4)."-".substr($tab[0],4,2)."-".substr($tab[0],6,2);
225                        }elseif(strlen($tab[0]) == 6){
226                                $date=substr($tab[0],0,4)."-".substr($tab[0],4,2)."-01";
227                        }elseif(strlen($tab[0]) == 4){
228                                $date=substr($tab[0],0,4)."-01-01";
229                        }
230        }
231       
232        if($annee_seule){
233                return substr($date,0,4);
234        }else{
235                return $date;
236        }
237       
238}
239
240//ca reste pratique...
241function update_notice($bl,$hl,$typdoc){
242        global $notice_id;
243        $update =" update notices set niveau_biblio = '$bl', niveau_hierar ='$hl', typdoc='$typdoc' where notice_id = $notice_id";
244        pmb_mysql_query($update);
245}
246function notice_to_article($perio_info,$bull_info){
247        global $notice_id;
248        $bull_id = genere_bulletin($perio_info,$bull_info);
249        update_notice("a","2","q");
250        $insert = "insert into analysis set analysis_bulletin = $bull_id, analysis_notice = $notice_id";
251        pmb_mysql_query($insert);
252}
253
254function genere_perio($perio_info){
255        global $statutnot;
256        $search = "select notice_id from notices where tit1 LIKE '".addslashes($perio_info['titre'])."' and niveau_biblio = 's' and niveau_hierar = '1'";
257        $res = pmb_mysql_query($search);
258        if(pmb_mysql_num_rows($res) == 0){
259                //il existe pas, faut le créer
260                //le type de document par défaut est révue
261                $insert = "insert into notices set tit1 = '".addslashes($perio_info['titre'])."', typdoc = 'n', niveau_biblio = 's', niveau_hierar = '1', statut = '".$statutnot."', create_date = '".date("Y-m-d H:i:s")."'";
262                $result = pmb_mysql_query($insert);
263                $perio_id = pmb_mysql_insert_id();
264        }else $perio_id = pmb_mysql_result($res,0,0);
265        return $perio_id;
266}
267
268function genere_bulletin($perio_info,$bull_info,$isbull=true){
269        global $bl,$hl,$notice_id;
270        //on récup et/ou génère le pério
271        $perio_id = genere_perio($perio_info);
272        //on s'occupe du cas ou on a pas de titre pour le bulletin
273        $search = "select bulletin_id from bulletins where date_date  = '".$bull_info['date']."' and bulletin_numero LIKE '".$bull_info['num']."' and bulletin_notice = $perio_id";
274        $res = pmb_mysql_query($search);
275        if(pmb_mysql_num_rows($res) == 0){
276                if($bull_info['mention'] ==""){
277                        $bull_info['mention'] = substr($bull_info['date'],8,2)."/".substr($bull_info['date'],5,2)."/".substr($bull_info['date'],0,4);
278                }
279                $insert = "insert into bulletins set date_date  = '".$bull_info['date']."', mention_date = '".$bull_info['mention']."', bulletin_numero = '".$bull_info['num']."', bulletin_notice = $perio_id";
280                if($bl == "s" && $hl == "2") {
281                        $insert .=", num_notice = $notice_id";
282                        update_notice("b","2");
283                }
284                $result = pmb_mysql_query($insert);
285                $bull_id = pmb_mysql_insert_id();
286        }else {
287                $bull_id = pmb_mysql_result($res,0,0);
288        }
289        return $bull_id;
290}
291
292function identifiants_thesaurus ($thesaurus_name,$langues_thesaurus='fr_FR') {
293        global $charset;
294       
295        $q = "select id_thesaurus from thesaurus where libelle_thesaurus='".addslashes($thesaurus_name)."'";
296        $r = pmb_mysql_query($q);
297        if ($o=pmb_mysql_fetch_object($r)) {
298                $res[NUMTHESAURUS]=$o->id_thesaurus;
299                $q="select id_noeud, autorite from noeuds where num_thesaurus=".$o->id_thesaurus." and autorite in ('TOP','NONCLASSES','ORPHELINS') ";
300                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
301                while ($o=pmb_mysql_fetch_object($r)) {
302                        $res[$o->autorite]=$o->id_noeud ;
303                }
304                return $res ;
305        } else {
306                $q = "INSERT INTO thesaurus (id_thesaurus, libelle_thesaurus, langue_defaut, active, opac_active, num_noeud_racine) VALUES (0, '".addslashes($thesaurus_name)."', '$langues_thesaurus', '1', '1', 0)";
307                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
308                $res[NUMTHESAURUS]=pmb_mysql_insert_id();
309
310                $q = "INSERT INTO noeuds (id_noeud, autorite, num_parent, num_renvoi_voir, visible, num_thesaurus) VALUES (0, 'TOP', 0, 0, '0', ".$res[NUMTHESAURUS].")";
311                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
312                $res[TOP]=pmb_mysql_insert_id();
313                $q = "update thesaurus set num_noeud_racine=".$res[TOP]." where id_thesaurus=".$res[NUMTHESAURUS]." ";
314                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
315
316                $q = "INSERT INTO noeuds (id_noeud, autorite, num_parent, num_renvoi_voir, visible, num_thesaurus) VALUES (0, 'NONCLASSES', ".$res[TOP].", 0, '0', ".$res[NUMTHESAURUS].")";
317                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
318                $res[NONCLASSES]=pmb_mysql_insert_id();
319
320                $q = "INSERT INTO noeuds (id_noeud, autorite, num_parent, num_renvoi_voir, visible, num_thesaurus) VALUES (0, 'ORPHELINS', ".$res[TOP].", 0, '0', ".$res[NUMTHESAURUS].")";
321                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
322                $res[ORPHELINS]=pmb_mysql_insert_id();
323               
324                $tmp='~termes non classés';
325                if($charset=='utf-8'){
326                        $tmp=utf8_encode($tmp);
327                }
328                $q = "INSERT INTO categories (num_thesaurus,num_noeud, langue, libelle_categorie, note_application, comment_public, comment_voir, index_categorie) VALUES (".$res[NUMTHESAURUS].", ".$res[NONCLASSES].", 'fr_FR', '".$tmp."', '', '', '', ' termes non classes ')";
329                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
330
331                $q = "INSERT INTO categories (num_thesaurus,num_noeud, langue, libelle_categorie, note_application, comment_public, comment_voir, index_categorie) VALUES (".$res[NUMTHESAURUS].", ".$res[ORPHELINS].", 'fr_FR', '~termes orphelins', '', '', '', ' termes orphelins ')";
332                $r = pmb_mysql_query($q) or die(pmb_mysql_error()."<br><br>$q<br><br>");
333
334                return $res ;
335        }
336}
Note: See TracBrowser for help on using the repository browser.