source: pmb4.1/trunk/fuentes/pmb/catalog/z3950/z_progression_cache.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 10.8 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// | creator : Eric ROBERT                                                    |
5// | modified : Marco VANINETTI                                                           |
6// +-------------------------------------------------+
7// $Id: z_progression_cache.php,v 1.35 2012-09-06 07:49:21 ngantier Exp $
8
9// définition du minimum nécéssaire
10$base_path="../..";
11$base_auth = "CATALOGAGE_AUTH"; 
12$base_title = "";   
13$base_nobody = 1;     
14require_once ("$base_path/includes/init.inc.php"); 
15
16// les requis par z_progression_main.php ou ses sous modules
17require_once ("$include_path/isbn.inc.php");
18require_once ("$include_path/marc_tables/$pmb_indexation_lang/empty_words");
19require_once ("$class_path/iso2709.class.php");
20require_once ("z3950_func.inc.php");
21require ('notice.inc.php');
22// new for decoding record sutrs
23require_once ("z3950_sutrs.inc.php");
24include("$class_path/z3950_notice.class.php");
25
26//Correction mystérieuse : visiblement la fonction yaz_search impacte la variable global $limite... modifié en $limite_notices
27$limite_notices+=0;
28function critere_isbn ($val1) {
29        $val=$val1;
30        if(isEAN($val1)) {
31                // la saisie est un EAN -> on tente de le formater en ISBN
32                $val1 = z_EANtoISBN($val1);
33                // si échec, on prend l'EAN comme il vient
34                if(!$val1) $val1 = $val;
35                } else {
36                        if(isISBN($val1)) {
37                                // si la saisie est un ISBN
38                                $val1 = z_formatISBN($val1,13);
39                                // si échec, ISBN erroné on le prend sous cette forme
40                                if(!$val1) $val1 = $val;
41                                } else {
42                                        // ce n'est rien de tout ça, on prend la saisie telle quelle
43                                        $val1 = $val;
44                                        }
45                        }
46        return $val1;
47        }
48       
49       
50$mioframe="frame1";
51//affiche_jsscript ("configuring the connections...", "#FFB7B7", $mioframe);
52
53////////////////////////////////////////////////////////////////////
54// Fase 1: we prepare the query and the connection fore each biblio
55///////////////////////////////////////////////////////////////////
56
57//si può mettere prima del ciclo while principale....?
58// Remise à "" de tous les attributs de critère de recherche
59$map=array();
60               
61$rqt_bib_attr=mysql_query("select attr_libelle from z_attr group by attr_libelle ");
62while ($linea=mysql_fetch_array($rqt_bib_attr)) {
63        $attr_libelle=$linea["attr_libelle"];
64        $var = "attr_".strtolower($attr_libelle) ;
65        $$var = "" ;
66}
67
68$rq_bib_z3950=mysql_query ("select * from z_bib $selection_bib order by bib_nom, bib_id ");
69while ($ligne=mysql_fetch_array($rq_bib_z3950)) {
70        $bib_id=$ligne["bib_id"];
71                $url=$ligne["url"];
72                $port=$ligne["port"];
73                $base=$ligne["base"];
74                $format=$ligne["format"];
75                $auth_user=$ligne["auth_user"];
76                $auth_pass=$ligne["auth_pass"];
77                $sutrs_lang=$ligne["sutrs_lang"];
78                $auth=$auth_user.$auth_pass;
79                $formato[$bib_id]=$format;
80
81        // chargement des attributs de la bib sélectionnée
82        $rqt_bib_attr=mysql_query("select * from z_attr where attr_bib_id='$bib_id'");
83        while ($linea=mysql_fetch_array($rqt_bib_attr)) {
84                $attr_libelle=$linea["attr_libelle"];
85                $attr_attr=$linea["attr_attr"];
86                $var = "attr_".strtolower($attr_libelle) ;
87                $$var = $attr_attr ;
88        }
89
90        // On détermine la requête à envoyer
91        $booleen="";
92        $critere1="";
93        $critere2="";
94        $troncature="";
95        if ($bool1 == "ET") $booleen="@and ";
96        elseif ($bool1 == "OU") $booleen="@or ";
97        elseif ($bool1 == "SAUF") $booleen="@not ";
98       
99        switch ($crit1) {
100                case "titre" :
101                        $critere1=$attr_titre;
102                        break;
103                case "mots" :
104                        $critere1=$attr_mots;
105                        break;
106                case "resume" :
107                        $critere1=$attr_resume;
108                        break;
109                case "type_doc" :
110                        $critere1=$attr_type_doc;
111                        break;
112                case "auteur" :
113                        $critere1=$attr_auteur;
114                        break;
115                case "sujet" :
116                        $critere1=$attr_sujet;
117                        break;
118                case "isbn" :
119                        $critere1=$attr_isbn;
120                        //$val1=critere_isbn($val1);
121                        break;
122                case "issn" :
123                        $critere1=$attr_issn;
124                        break;
125                case "isrn" :
126                        $critere1=$attr_isrn;
127                        break;
128                case "ismn" :
129                        $critere1=$attr_ismn;
130                        break;
131                case "mk" :
132                        $critere1=$attr_mk;
133                        break;
134                case "cbsonores" :
135                        $critere1=$attr_cbsonores;
136                        break;
137                case "ean" :
138                        $critere1=$attr_ean;
139                        break;
140                case "allfields" :
141                        $critere1=$attr_allfields;
142                        break;
143                default :
144                        break;
145                }
146               
147       
148        switch ($crit2) {
149                case "titre" :
150                        $critere2=$attr_titre;
151                        break;
152                case "mots" :
153                        $critere2=$attr_mots;
154                        break;
155                case "resume" :
156                        $critere2=$attr_resume;
157                        break;
158                case "type_doc" :
159                        $critere2=$attr_type_doc;
160                        break;
161                case "auteur" :
162                        $critere2=$attr_auteur;
163                        break;
164                case "sujet" :
165                        $critere2=$attr_sujet;
166                        break;
167                case "isbn" :
168                        $critere2=$attr_isbn;
169                        //$val2=critere_isbn($val2);
170                        break;
171                case "issn" :
172                        $critere2=$attr_issn;
173                        break;
174                case "isrn" :
175                        $critere2=$attr_isrn;
176                        break;
177                case "ismn" :
178                        $critere2=$attr_ismn;
179                        break;
180                case "mk" :
181                        $critere2=$attr_mk;
182                        break;
183                case "cbsonores" :
184                        $critere2=$attr_cbsonores;
185                        break;
186                case "ean" :
187                        $critere2=$attr_ean;
188                        break;
189                case "allfields" :
190                        $critere2=$attr_allfields;
191                        break;
192                default :
193                        break;
194                }
195
196        $term="";
197       
198       
199        if ($val1 != "" AND $val2 == "" AND $critere1 != "" ) {
200                $term="@attr 1=$critere1 @attr 4=1 \"$val1$troncature\" ";
201                }
202        if ($val1 == "" AND $val2 != "" AND $critere2 != "" ) {
203                $term="@attr 1=$critere2 @attr 4=1 \"$val2$troncature\" ";
204                }
205        if ($val1 != "" AND $val2 != "" AND $critere1 != "" AND $critere2 != "" ) {
206                $term="$booleen @attr 1=$critere1 @attr 4=1 \"$val1$troncature\"  @attr 1=$critere2 @attr 4=1 \"$val2$troncature\" ";
207                }
208
209        if ($term == "") {
210                //$stato[$bib_id]=0;
211                //$map[$bib_id] = 0;
212                if ($val1 == "" AND $val2 == "") {
213                        affiche_jsscript ($msg[z3950_echec_no_champ], "#FF3333", $bib_id);
214                } else {
215                        affiche_jsscript ($msg[z3950_echec_no_valid_attr], "#FF3333", $bib_id);
216                }
217        } else {
218               
219                //////////////////////////////////////////////////////////////////////////////////
220                // the query is ok we prepare the Z 3950 process for this biblio and
221                // save the $id to be able later to retrieve the records from the servers
222                //////////////////////////////////////////////////////////////////////////////////
223       
224                //$stato[$bib_id] = 1;
225                $auth = $auth_user.$auth_pass ;
226                if ($auth != "") {
227                        $id = yaz_connect("$url:$port/$base", array("user" => $auth_user, "password" => $auth_pass, "piggyback"=>false)) or affiche_jsscript ("Echec : impossible de se connecter au Serveur", "#FF3333", $bib_id);
228                } else {
229                        $id = yaz_connect("$url:$port/$base", array("piggyback"=>false)) or affiche_jsscript ($msg[z3950_echec_cnx], "#FF3333", $bib_id);
230                }
231                $map[$bib_id] = $id;
232                yaz_element($id,"F");
233                $etrange_limite=$limite_notices;
234                yaz_range ($id, 1, $etrange_limite);
235                yaz_syntax($id,strtolower($format));
236                echo $term;
237                yaz_search($id,"rpn",$term);
238        }
239}
240///////////////////////////////////////////////////////////////////////////
241// Fase 2: all the possible connections are ready now start the researches
242//////////////////////////////////////////////////////////////////////////
243//Correction mystérieuse : visiblement la fonction yaz_search impacte la variable global $limite... modifié en $limite_notices
244
245affiche_jsscript ($msg['z3950_zmsg_wait'], "#FFCC99", $mioframe);
246
247$options=array("timeout"=>45);
248$t1=time();
249
250//Override le timeout du serveur mysql, pour être sûr que le socket dure assez longtemps pour aller jusqu'aux ajouts des résultats dans la base.
251$sql = "set wait_timeout = 120";
252mysql_query($sql);
253
254yaz_wait($options);
255$dt=time()-$t1;
256$msgz=str_replace('!!time!!',$dt,$msg['z3950_zmsg_endw']);
257hideJoke();
258affiche_jsscript ($msgz, "#D8FFBE", $mioframe);
259showButRes();
260////////////////////////////////////////////////////////////////////
261// Fase 3: Now get the results from the biblios
262// obviously if the query was ok and there weren't errors
263///////////////////////////////////////////////////////////////////
264while (list($bib_id,$id)=each($map)){
265                $error = yaz_error($id);
266                $error_info = yaz_addinfo($id);
267                if (!empty($error)) {
268                        $msg1 = $msg[z3950_echec_rech]." : ".$error.", ". $error_info;
269                        affiche_jsscript ($msg1, "#FF3333", $bib_id);
270                        yaz_close ($id);
271                } else {
272                        $hits = yaz_hits($id);
273                        $hits+=0;
274                        if ($hits>$limite_notices) {
275                                $lim_recherche=$limite_notices;
276                                $msg1 = str_replace ("!!limite!!", $limite_notices, $msg[z3950_recup_encours]) ;
277                                $msg1 = str_replace ("!!hits!!", $hits, $msg1) ;
278                                affiche_jsscript ($msg1, "#99FF99", $bib_id);
279                        } else {
280                                $lim_recherche=$hits;
281                                $msg1= str_replace ("!!hits!!", $hits, $msg[z3950_recup]) ;
282                                affiche_jsscript ($msg1, "#99FF99", $bib_id);
283                        }
284                        $total=0;
285                        for ($p = 1; $p <= $lim_recherche; $p++) {
286                               
287                                $rec = yaz_record($id,$p,"raw");
288                               
289                                // DEBUG
290                                global $z3950_debug ;
291                                if ($z3950_debug) {
292                                        $fp = fopen ("../../temp/raw".rand().".marc","wb");
293                                        fwrite ($fp, $rec);
294                                        fclose ($fp);
295                                        }
296                                if (strpos($rec,chr(0x1d))!==false)
297                                        $rec=substr($rec,0,strpos($rec,chr(0x1d))+1);
298                                $monEnr = new iso2709_record($rec);
299                                if($monEnr->valid()) {
300                                        $messageframe = " $p ".$msg['z3950_lu_bin'];
301                                        $pb = 0;
302                                } else {
303                                        $rec = yaz_record($id,$p,"string");
304                                        $monEnr2 = new iso2709_record($rec);
305                                        if ($monEnr2->valid()) {
306                                                $messageframe = "$p ".$msg['z3950_lu_cok'];
307                                                $pb = 0;
308                                        } else {
309                                                // DEBUG
310                                                //$fp = fopen ("../../temp/raw".rand().".sutrs","wb");
311                                                //fwrite ($fp, $rec);
312                                                //fclose ($fp);
313                                                $rec = sutrs_record($rec,$sutrs_lang);
314                                                $messageframe = " $p ".$msg['z3950_lu_chs'];
315                                                //$pb = 1;
316                                                //$rec="";                                     
317                                        }
318                                }
319                                if ($pb) $messageframe=$msg["z3950_reception_notice"].$messageframe;
320                                        else $messageframe=$msg["z3950_reception_notice"].$messageframe;
321                                       
322                                affiche_jsscript ($messageframe, "#B9FFD4", $bib_id);   
323                                       
324                                if ($rec != "") {
325                                        $total++;
326                                        //if ($total % 10 == 0) {
327                                        //   affiche_jsscript ($msg["z3950_reception_notice"]." $total / $lim_recherche", "#99FF99", $bib_id);
328                                        //}
329                                        $notice = new z3950_notice ($formato[$bib_id], $rec);
330                                        $isbd_affichage = $notice->get_isbd_display ();
331
332                                        $lu_isbn = $isbd_affichage[0];
333                                        $lu_titre = $isbd_affichage[1];
334                                        $lu_auteur = $isbd_affichage[2];
335                                        $lu_isbd = $isbd_affichage[3];
336
337                                        $sql2="insert into z_notices (znotices_id, znotices_query_id, znotices_bib_id, isbn, titre, auteur, isbd, z_marc) ";
338                                        $sql2.="values(0,'$last_query_id', '$bib_id', '$lu_isbn', '".addslashes($lu_titre)."', '".addslashes($lu_auteur)."', '".addslashes($lu_isbd)."','".addslashes($rec)."') ";
339                                        mysql_query ($sql2);
340                                        $ID_notice = mysql_insert_id();
341                                } // fin du if qui vérifie que la notice n'est pas vide
342                        } // fin for
343                        yaz_close ($id);
344                        $msg1 = str_replace ("!!total!!", $total, $msg[z3950_recup_fini]) ;
345                        $msg1 = str_replace ("!!hits!!", $hits, $msg1) ;
346                        affiche_jsscript ($msg1, "#FFFFCC", $bib_id);
347                } // fin if else error
348}
349
350$dt=time()-$t1;
351$msg1=str_replace('!!time!!',$dt,$msg['z3950_zmsg_show']);
352affiche_jsscript ($msg1, "#F3E6DF", $mioframe);
353//showButRes();
354?>
355</body>
356</html>
Note: See TracBrowser for help on using the repository browser.