source: spip-zone/_plugins_/spip-pmb/2_0_0/pmb_mes_fonctions.php @ 32207

Last change on this file since 32207 was 32207, checked in by apachot@…, 11 years ago

prénom de l'auteur et suppréssion du paramètre 'seule' inutile avec les webservices

File size: 35.8 KB
Line 
1<?php
2/*************************************************************************************/
3/*                                                                                   */
4/*      Portail web pour PMB                                                                             */
5/*                                                                                   */
6/*      Copyright (c) OpenStudio                                                     */
7/*      email : info@openstudio.fr                                                               */
8/*      web : http://www.openstudio.fr                                                                                                   */
9/*                                                                                   */
10/*      This program is free software; you can redistribute it and/or modify         */
11/*      it under the terms of the GNU General Public License as published by         */
12/*      the Free Software Foundation; either version 3 of the License, or            */
13/*      (at your option) any later version.                                          */
14/*                                                                                   */
15/*      This program is distributed in the hope that it will be useful,              */
16/*      but WITHOUT ANY WARRANTY; without even the implied warranty of               */
17/*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
18/*      GNU General Public License for more details.                                 */
19/*                                                                                   */
20/*      You should have received a copy of the GNU General Public License            */
21/*      along with this program; if not, write to the Free Software                  */
22/*      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    */
23/*                                                                                   */
24/*************************************************************************************/
25
26include_spip('base/pmb_tables');
27
28
29function pmb_transformer_nav_bar($nav_bar) {
30        //si une seule page, on retourne vide
31        if (strpos($nav_bar,"1/1")) return "";
32
33        //sinon, on transforme les liens vers les images locales
34        $nav_bar = str_replace("./images/first-grey.gif", find_in_path("img/pmb-first-grey.gif"), $nav_bar);
35        $nav_bar = str_replace("./images/prev-grey.gif", find_in_path("img/pmb-prev-grey.gif"), $nav_bar);
36        $nav_bar = str_replace("./images/first.gif", find_in_path("img/pmb-first.gif"), $nav_bar);
37        $nav_bar = str_replace("./images/prev.gif", find_in_path("img/pmb-prev.gif"), $nav_bar);
38        $nav_bar = str_replace("./images/next-grey.gif", find_in_path("img/pmb-next-grey.gif"), $nav_bar);
39        $nav_bar = str_replace("./images/last-grey.gif", find_in_path("img/pmb-last-grey.gif"), $nav_bar);
40        $nav_bar = str_replace("./images/next.gif", find_in_path("img/pmb-next.gif"), $nav_bar);
41        $nav_bar = str_replace("./images/last.gif", find_in_path("img/pmb-last.gif"), $nav_bar);
42        return $nav_bar;
43}
44
45
46function pmb_charger_page ($url_base, $file, $mode='auto') {
47        $resultat_recherche_locale = copie_locale($url_base.$file,$mode);
48        if($resultat_recherche_locale != false) {
49                $resultat_recherche_html = unicode2charset(charset2unicode(file_get_contents($resultat_recherche_locale), 'iso-8859-1'),'utf-8');
50               
51                $resultat_recherche_html = str_replace("page=", "pmb_page=", $resultat_recherche_html);
52                $resultat_recherche_html = str_replace("addtags.php", $url_base."addtags.php", $resultat_recherche_html);
53                $resultat_recherche_html = str_replace("avis.php", $url_base."avis.php", $resultat_recherche_html);
54                $resultat_recherche_html = str_replace("./do_resa.php", $url_base."do_resa.php", $resultat_recherche_html);
55                $resultat_recherche_html = str_replace("index.php?lvl=", "index.php?page=", $resultat_recherche_html);
56                require(find_in_path('simple_html_dom.php'));
57                $htmldom = str_get_html($resultat_recherche_html);     
58
59        }
60        return $htmldom;               
61                                       
62
63}
64
65function pmb_accueil_extraire($url_base, $mode='auto') {
66        $tableau_resultat = Array();
67       
68        if ($htmldom = pmb_charger_page($url_base, "index.php",$mode)) {
69                        $resultats_recherche = $htmldom->find('#location-container td');
70                        $i=0;
71                        foreach($resultats_recherche as $res) {
72                                $tableau_resultat[$i] = $res->find('a',1)->outertext;                           
73                               
74                                $i++;
75                        }       
76        }
77        return $tableau_resultat;
78
79}
80function pmb_section_extraire($id_section, $url_base) {
81        $tableau_sections = Array();
82        pmb_ws_charger_wsdl($ws, $url_base);
83        $tab_sections = $ws->pmbesOPACGeneric_list_sections($id_section);
84        $cpt = 0;
85        foreach ($tab_sections as $section) {
86              $tableau_sections[$cpt] = Array();
87              $tableau_sections[$cpt]['section_id'] = $section->section_id;
88              $tableau_sections[$cpt]['section_location'] = $section->section_location;
89              $tableau_sections[$cpt]['section_caption'] = $section->section_caption;
90              $tableau_sections[$cpt]['section_image'] = lire_config("spip_pmb/url","http://tence.bibli.fr/opac").'/'.$section->section_image;
91
92             
93              $cpt++;
94        }
95        return $tableau_sections;
96}
97
98function pmb_liste_locations_extraire($url_base) {
99        $tableau_sections = Array();
100        pmb_ws_charger_wsdl($ws, $url_base);
101        $tab_locations = $ws->pmbesOPACGeneric_list_locations();
102        $cpt = 0;
103        foreach ($tab_locations as $location) {
104              $tableau_locations[$cpt] = Array();
105              $tableau_locations[$cpt]['location_id'] = $location->location_id;
106              $tableau_locations[$cpt]['location_caption'] = $location->location_caption;
107              $cpt++;
108        }
109        return $tableau_locations;
110}
111
112function pmb_notices_section_extraire($id_section, $url_base, $debut=0, $fin=5) {
113        $tableau_resultat = Array();
114       
115        $search = array();
116        $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
117                       
118        pmb_ws_charger_wsdl($ws, $url_base);
119        try {   
120                        $tableau_resultat[0] = Array();
121                                       
122                        $r=$ws->pmbesOPACAnonymous_advancedSearch($search);
123                       
124                        $searchId=$r["searchId"];
125                        $tableau_resultat[0][' '] = $r["nbResults"];
126           
127                         $r=$ws->pmbesOPACAnonymous_fetchSearchRecords($searchId,$debut,$fin,"serialized_unimarc","utf8");
128                          $i = 1;
129                          foreach($r as $value) {
130                                    $tableau_resultat[$i] = Array();                           
131                               
132                                    pmb_ws_parser_notice_serialisee($value['noticeId'], $value['noticeContent'], $tableau_resultat[$i]);
133                                    $i++;
134                          }
135               
136
137        } catch (SoapFault $fault) {
138                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
139        } 
140
141        return $tableau_resultat;
142}
143
144function pmb_serie_extraire($id_serie, $url_base, $pmb_page=1, $mode='auto') {
145        $tableau_resultat = Array();
146       
147        if ($htmldom = pmb_charger_page($url_base, "index.php?lvl=serie_see&page=".$pmb_page."&id=".$id_serie,$mode)) {
148                        $tableau_resultat[0] = Array();
149                        $tableau_resultat[0]['nav_bar'] = $htmldom->find('.navbar',0)->outertext;
150                        $tableau_resultat[0]['nav_bar'] = pmb_transformer_nav_bar($tableau_resultat[0]['nav_bar']);
151                        $tableau_resultat[0]['titre_serie'] = $htmldom->find('#aut_see h3',0)->innertext;
152                       
153                        $resultats_recherche = $htmldom->find('.notice-child');
154                        $tableau_resultat[0]['nb_resultats'] = count($resultats_recherche);
155                        $i = 1;
156                        foreach($resultats_recherche as $res) {
157                                $tableau_resultat[$i] = Array();                               
158                                pmb_parser_notice_apercu($res, $tableau_resultat[$i]);
159                                $i++;
160                        }       
161        }
162        return $tableau_resultat;
163
164}
165
166function pmb_collection_extraire($id_collection, $url_base, $pmb_page=1, $mode='auto') {
167        $tableau_resultat = Array();
168       
169        if ($htmldom = pmb_charger_page($url_base, "index.php?lvl=coll_see&page=".$pmb_page."&id=".$id_collection,$mode)) {
170                        $tableau_resultat[0] = Array();
171                        $tableau_resultat[0]['nav_bar'] = $htmldom->find('.navbar',0)->outertext;
172                        $tableau_resultat[0]['nav_bar'] = pmb_transformer_nav_bar($tableau_resultat[0]['nav_bar']);
173                        $tableau_resultat[0]['titre_collection'] = $htmldom->find('#aut_see h3',0)->innertext;
174                        $tableau_resultat[0]['collections_infos'] = $htmldom->find('#aut_see ul',0)->outertext;
175                       
176                        $resultats_recherche = $htmldom->find('.notice-child');
177                        $tableau_resultat[0]['nb_resultats'] = count($resultats_recherche);
178                        $i = 1;
179                        foreach($resultats_recherche as $res) {
180                                $tableau_resultat[$i] = Array();                               
181                                pmb_parser_notice_apercu($res, $tableau_resultat[$i]);
182                                $i++;
183                        }       
184        }
185        return $tableau_resultat;
186
187}
188
189function pmb_editeur_extraire($id_editeur, $url_base, $pmb_page=1, $mode='auto') {
190        $tableau_resultat = Array();
191       
192        if ($htmldom = pmb_charger_page($url_base, "index.php?lvl=publisher_see&page=".$pmb_page."&id=".$id_editeur,$mode)) {
193                        $tableau_resultat[0] = Array();
194                        $tableau_resultat[0]['nav_bar'] = $htmldom->find('.navbar',0)->outertext;
195                        $tableau_resultat[0]['nav_bar'] = pmb_transformer_nav_bar($tableau_resultat[0]['nav_bar']);
196                        $tableau_resultat[0]['titre_editeur'] = $htmldom->find('#aut_see h3',0)->innertext;
197                        $tableau_resultat[0]['collections_editeur'] = $htmldom->find('#aut_see ul',0)->outertext;
198                        $infos_editeur = $htmldom->find('#aut_see p');
199                        $tableau_resultat[0]['infos_editeur'] = '';
200                        foreach($infos_editeur as $p_editeur) {
201                                $tableau_resultat[0]['infos_editeur'] .= $p_editeur->outertext;
202                        }
203                       
204                        $resultats_recherche = $htmldom->find('.notice-child');
205                        $tableau_resultat[0]['nb_resultats'] = count($resultats_recherche);
206                        $i = 1;
207                        foreach($resultats_recherche as $res) {
208                                $tableau_resultat[$i] = Array();                               
209                                pmb_parser_notice_apercu($res, $tableau_resultat[$i]);
210                                $i++;
211                        }       
212        }
213        return $tableau_resultat;
214
215}
216
217function pmb_auteur_extraire($id_auteur, $url_base) {
218        $tableau_resultat = Array();
219       
220        pmb_ws_charger_wsdl($ws, $url_base);
221        try {
222              $result = $ws->pmbesAuthors_get_author_information_and_notices($id_auteur,0);
223              if ($result) {
224                  $tableau_resultat['author_id'] = $result['information']->author_id;
225                  $tableau_resultat['author_type'] = $result['information']->author_type;
226                  $tableau_resultat['author_name'] = $result['information']->author_name;
227                  $tableau_resultat['author_rejete'] = $result['information']->author_rejete;
228                  if ($result['information']->author_rejete) {
229                      $tableau_resultat['author_nomcomplet'] =  $tableau_resultat['author_rejete'].' '.$tableau_resultat['author_name'];
230                  } else {
231                      $tableau_resultat['author_nomcomplet'] = $tableau_resultat['author_name'];
232                  }
233
234                  $tableau_resultat['author_see'] = $result['information']->author_see;
235                  $tableau_resultat['author_date'] = $result['information']->author_date;
236                  $tableau_resultat['author_web'] = $result['information']->author_web;
237                  $tableau_resultat['author_comment'] = $result['information']->author_comment;
238                  $tableau_resultat['author_lieu'] = $result['information']->author_lieu;
239                  $tableau_resultat['author_ville'] = $result['information']->author_ville;
240                  $tableau_resultat['author_pays'] = $result['information']->author_pays;
241                  $tableau_resultat['author_subdivision'] = $result['information']->author_subdivision;
242                  $tableau_resultat['author_numero'] = $result['information']->author_numero;
243                  $tableau_resultat['notice_ids'] = Array();
244
245                  $liste_notices = Array();
246                  foreach($result['notice_ids'] as $cle=>$valeur) {
247                    $liste_notices[] = $valeur;
248                  }
249                  pmb_ws_recuperer_tab_notices($liste_notices, $ws, $tableau_resultat['notice_ids']);
250                  $cpt=0;
251                  foreach($liste_notices as $notice) {
252                    $tableau_resultat['notice_ids'][$cpt]['id'] = $notice;
253                    $cpt++;
254                  }
255                }
256        } catch (SoapFault $fault) {
257                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
258        } 
259        return $tableau_resultat;
260
261}
262
263function pmb_recherche_extraire($recherche='*', $url_base, $look_ALL='', $look_AUTHOR='', $look_PUBLISHER='', $look_COLLECTION='', $look_SUBCOLLECTION='', $look_CATEGORY='', $look_INDEXINT='', $look_KEYWORDS='', $look_TITLE='', $look_ABSTRACT='', $id_section='', $debut=0, $fin=5) {
264        $tableau_resultat = Array();
265
266
267       
268        $search = array();
269       
270                       
271        if ($look_ALL) {
272                  $search[] = array("inter"=>"or","field"=>42,"operator"=>"BOOLEAN", "value"=>$recherche);     
273                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
274                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
275        }
276        if ($look_TITLE) {
277                  $search[] = array("inter"=>"or","field"=>1,"operator"=>"BOOLEAN", "value"=>$recherche);
278                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
279                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
280        }
281
282        if ($look_AUTHOR) {
283                  $search[] = array("inter"=>"or","field"=>2,"operator"=>"BOOLEAN", "value"=>$recherche);
284                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
285                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
286        }
287   
288        if ($look_PUBLISHER) {
289                  $search[] = array("inter"=>"or","field"=>3,"operator"=>"BOOLEAN", "value"=>$recherche);
290                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
291                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
292        }
293
294        if ($look_COLLECTION) {
295                  $search[] = array("inter"=>"or","field"=>4,"operator"=>"BOOLEAN", "value"=>$recherche);
296                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
297                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
298        }
299
300        if ($look_ABSTRACT) {
301                  $search[] = array("inter"=>"or","field"=>10,"operator"=>"BOOLEAN", "value"=>$recherche);
302                  if ($typdoc) $search[] = array("inter"=>"AND","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
303                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
304        }
305 
306        if ($look_CATEGORY) {
307                  $search[] = array("inter"=>"or","field"=>11,"operator"=>"BOOLEAN", "value"=>$recherche);
308                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
309                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
310        }
311
312        if ($look_INDEXINT) {
313                  $search[] = array("inter"=>"or","field"=>12,"operator"=>"BOOLEAN", "value"=>$recherche);
314                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
315                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
316        }
317
318        if ($look_KEYWORDS) {
319                  $search[] = array("inter"=>"","field"=>13,"operator"=>"BOOLEAN", "value"=>$recherche);
320                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
321                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
322        }
323       
324       
325                 
326        //récupérer le résultat d'une recherchevia les webservices
327       
328        global $gtresultat;
329        $gtresultat = array();
330       
331       
332       
333        pmb_ws_charger_wsdl($ws, $url_base);
334        try {   
335                        $tableau_resultat[0] = Array();
336                                       
337                        $r=$ws->pmbesOPACAnonymous_advancedSearch($search);
338                       
339                        $searchId=$r["searchId"];
340                        $tableau_resultat[0]['nb_resultats'] = $r["nbResults"];
341           
342                        //R�cup�ration des 10 premiers r�sultats
343                        /*Les formats peuvent-�tre :
344                                pmb_xml_unimarc pour du xml.
345                                json_unimarc pour du javascript.
346                                serialized_unimarc pour du php.
347                                header, isbd, isbd_suite pour du texte.
348                                dc, oai_dc pour du dublin core.
349                                convert:truc pour un passage pas admin/convert dans le format truc.
350                                autre: renvoi l'id de la notice.
351                        */ 
352                          $r=$ws->pmbesOPACAnonymous_fetchSearchRecords($searchId,$debut,$fin,"serialized_unimarc","utf8");
353                          $i = 1;
354                          foreach($r as $value) {
355                                    $tableau_resultat[$i] = Array();                           
356                               
357                                    pmb_ws_parser_notice_serialisee($value['noticeId'], $value['noticeContent'], $tableau_resultat[$i]);
358                                    $i++;
359                          }
360               
361
362        } catch (SoapFault $fault) {
363                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
364        } 
365
366        return $tableau_resultat;
367}
368
369
370function pmb_parser_notice_apercu ($localdom, &$tresultat) {
371        $tresultat['id'] = intval(substr($localdom->id,2));     
372        $tresultat['logo_src'] = $localdom->find('table td img',2)->src; 
373        $tablechamps = $localdom->find('table tr tr');
374        foreach($tablechamps as $tr) {
375                $libelle = htmlentities($tr->find('td',0)->innertext);
376                $valeur = $tr->find('td',1)->innertext;
377                if (strpos($libelle, 'Titre de s')) $tresultat['serie'] = $valeur; 
378                if (strpos($libelle, 'Titre')) $tresultat['titre'] = $valeur; 
379                else if (strpos($libelle, 'Type de document')) $tresultat['type'] = $valeur; 
380                else if (strpos($libelle, 'Editeur')) $tresultat['editeur'] = $valeur; 
381                else if (strpos($libelle, 'Auteurs')) $tresultat['lesauteurs'] = $valeur; 
382                else if (strpos($libelle, 'de publication')) $tresultat['annee_publication'] = $valeur; 
383                else if (strpos($libelle, 'Collection')) $tresultat['collection'] = $valeur; 
384                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur; 
385                else if (strpos($libelle, 'Présentation')) $tresultat['presentation'] = $valeur; 
386                else if (strpos($libelle, 'Format')) $tresultat['format'] = $valeur; 
387                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur; 
388                else if (strpos($libelle, 'ISBN')) $tresultat['isbn'] = $valeur; 
389                else if (strpos($libelle, 'Prix')) $tresultat['prix'] = $valeur; 
390                else if (strpos($libelle, 'Langues')) $tresultat['langues'] = $valeur; 
391                else if (strpos($libelle, 'sum')) $tresultat['resume'] = $valeur; 
392        }
393
394}
395
396
397
398//d�coupage d'une notice au d�part dans un div de class .parent
399/*function pmb_parser_notice ($id_notice, $localdom, &$tresultat) {
400        $tresultat['id'] = $id_notice; 
401        $tresultat['logo_src'] = $localdom->find('table td img',2)->src;
402        $tresultat['exemplaires'] = $localdom->find('.exemplaires',0)->outertext;
403        if ($tmp = $localdom->find('.autres_lectures',0)) {
404                        $tresultat['autres_lecteurs'] = $tmp->next_sibling()->outertext;
405        }                               
406        $tablechamps = $localdom->find('#div_public'.$id_notice.' tr');
407        foreach($tablechamps as $tr) {
408                $libelle = htmlentities($tr->find('td',0)->innertext);
409                $valeur = $tr->find('td',1)->innertext;
410                if (strpos($libelle, 'Titre de s')) $tresultat['serie'] = $valeur;
411                if (strpos($libelle, 'Titre')) $tresultat['titre'] = $valeur;
412                else if (strpos($libelle, 'Type de document')) $tresultat['type'] = $valeur;
413                else if (strpos($libelle, 'Editeur')) $tresultat['editeur'] = $valeur;
414                else if (strpos($libelle, 'Auteurs')) $tresultat['lesauteurs'] = $valeur;
415                else if (strpos($libelle, 'de publication')) $tresultat['annee_publication'] = $valeur;
416                else if (strpos($libelle, 'Collection')) $tresultat['collection'] = $valeur;
417                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur;
418                else if (strpos($libelle, 'Présentation')) $tresultat['presentation'] = $valeur;
419                else if (strpos($libelle, 'Format')) $tresultat['format'] = $valeur;
420                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur;
421                else if (strpos($libelle, 'ISBN')) $tresultat['isbn'] = $valeur;
422                else if (strpos($libelle, 'Prix')) $tresultat['prix'] = $valeur;
423                else if (strpos($libelle, 'Langues')) $tresultat['langues'] = $valeur;
424                else if (strpos($libelle, 'sum')) $tresultat['resume'] = $valeur;
425        }
426
427}*/
428
429    // Traitement des balises ouvrantes
430    function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
431    {
432        // En fait... nous nous conteterons de mémoriser le nom de la balise
433        // afin d'en tenir compte dans la fonction "fonctionTexte"
434
435        global $derniereBaliseRencontree;
436         global $dernierAttributRencontre;
437       global $dernierTypeTrouve;
438       global $dernierIdTrouve;
439
440        $derniereBaliseRencontree = $nomBalise;
441 
442        $dernierAttributRencontre = $tableauAttributs;
443       
444    }
445   
446    // Rraitement des balises fermantes
447    function fonctionBaliseFermante($parseur, $nomBalise)
448    {
449        // On oublie la dernière balise rencontrée
450        global $derniereBaliseRencontree;
451         global $dernierAttributRencontre;
452       global $dernierTypeTrouve;
453       global $dernierIdTrouve;
454
455        $derniereBaliseRencontree = "";
456    }
457
458    // Traitement du texte
459    // qui est appelé par le "parseur"
460    function fonctionTexte($parseur, $texte)
461    {
462        global $derniereBaliseRencontree;
463         global $dernierAttributRencontre;
464       global $dernierTypeTrouve;
465       global $dernierIdTrouve;
466    global $gtresultat;
467    global $indice_exemplaire;
468
469        // Selon les cas, nous affichons le texte
470        // ou nous proposons un lien
471        // ATTENTION: Par défaut les noms des balises sont
472        //            mises en majuscules
473       //echo("<br />fonctionTexte=".$derniereBaliseRencontree);
474        switch ($derniereBaliseRencontree) {
475            case "F": 
476                   foreach($dernierAttributRencontre as $cle=>$attr) {
477                        if ($cle=="C") $dernierTypeTrouve = $attr;
478                        if ($cle=="ID") $dernierIdTrouve = $attr;
479                  }
480              break;
481
482            case "S":
483               foreach($dernierAttributRencontre as $cle=>$attr) {
484                        if ($cle=="C") $dernierSousTypeTrouve = $attr;
485                }
486
487                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "a")) $gtresultat['isbn'] .= $texte;
488                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "b")) $gtresultat['reliure'] .= $texte;
489                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "d")) $gtresultat['prix'] .= $texte;
490               
491                if (($dernierTypeTrouve == "101") && ($dernierSousTypeTrouve == "a")) $gtresultat['langues'] .= $texte;
492               
493                if (($dernierTypeTrouve == "102") && ($dernierSousTypeTrouve == "a")) $gtresultat['pays'] .= $texte;
494               
495                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "a")) $gtresultat['titre'] .= $texte;
496                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "f")) $gtresultat['auteur'] .= $texte;
497               
498                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['editeur'] .= $texte;
499                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "a")) $gtresultat['editeur'] .= ' ('.$texte.')';
500                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "d")) $gtresultat['annee_publication'] .= $texte;
501                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['id_editeur'] = $dernierIdTrouve;
502               
503                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "a")) $gtresultat['importance'] .= $texte;
504                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "c")) $gtresultat['presentation'] .= $texte;
505                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "d")) $gtresultat['format'] .= $texte;
506               
507                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['collection'] .= $texte;
508                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_collection'] = $dernierIdTrouve;
509               
510                if (($dernierTypeTrouve == "330") && ($dernierSousTypeTrouve == "a")) $gtresultat['resume'] .= str_replace("œ","&oelig;", str_replace("\n","<br />", $texte));
511               
512                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['lesauteurs'] .= $texte;
513                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "b")) $gtresultat['lesauteurs'] .= " ".$texte;
514                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_auteur'] = $dernierIdTrouve;
515               
516                //section996 mode html
517                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "f")) $gtresultat['exemplaires'] .= "<tr><td class='expl_cb'>".$texte."</td>";
518                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "k")) $gtresultat['exemplaires'] .= "<td class='expl_cote'>".$texte."</td>";
519                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "e")) $gtresultat['exemplaires'] .= "<td class='tdoc_libelle'>".$texte."</td>";
520                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "v")) $gtresultat['exemplaires'] .= "<td class='location_libelle'>".$texte."</td>";
521                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "x")) $gtresultat['exemplaires'] .= "<td class='section_libelle'>".$texte."</td>";
522                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "1")) $gtresultat['exemplaires'] .= "<td class='expl_situation'><strong>".$texte."</strong></td></tr>";
523
524                //section996 mode tableau
525                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "f")) {
526                        $indice_exemplaire++;
527                        $gtresultat['tab_exemplaires'][$indice_exemplaire-1] = Array();
528                        $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_cb'] .= $texte;
529                }
530
531                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "k")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_cote'] .= $texte;
532                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "e")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['tdoc_libelle'] .= $texte;
533                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "v")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['location_libelle'] .= $texte;
534                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "x")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['section_libelle'] .= $texte;
535                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "1")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_situation'] .= $texte;
536
537               
538                break;
539        }         
540    }
541
542//parsing xml d'une notice
543function pmb_ws_parser_notice_xml($id_notice, $value, &$tresultat) {
544
545            include_spip("/inc/filtres_images");
546            global $gtresultat;
547            global $indice_exemplaire;
548            $indice_exemplaire = 0;
549            $gtresultat = array();
550       
551            // Création du parseur XML
552            $parseurXML = xml_parser_create();
553
554            // Je précise le nom des fonctions à appeler
555            // lorsque des balises ouvrantes ou fermantes sont rencontrées
556            xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
557                                              , "fonctionBaliseFermante");
558
559            // Je précise le nom de la fonction à appeler
560            // lorsque du texte est rencontré
561            xml_set_character_data_handler($parseurXML, "fonctionTexte");
562
563           $gtresultat['tab_exemplaires'] = Array();
564         
565           $gtresultat['exemplaires'] = "<table cellpadding='2' class='exemplaires' width='100%'>
566                    <tr><th class='expl_header_expl_cb'>Code barre</th><th class='expl_header_expl_cote'>Cote</th><th class='expl_header_location_libelle'>Localisation</th><th class='expl_header_tdoc_libelle'>Support</th><th class='expl_header_section_libelle'>Section</th><th>Disponibilité</th></tr>";
567
568            // Ouverture du fichier
569            xml_parse($parseurXML, $value, true);
570         
571           $gtresultat['exemplaires'] .= "</table>";
572            // echo("<br/><br />version brute : <br/><br />".$value);
573            xml_parser_free($parseurXML);
574
575            if ($gtresultat['lesauteurs'] == "")
576                  $gtresultat['lesauteurs'] = $gtresultat['auteur'];
577             $gtresultat['logo_src'] = copie_locale(lire_config("spip_pmb/url","http://tence.bibli.fr/opac")."/getimage.php?url_image=http%3A%2F%2Fimages-eu.amazon.com%2Fimages%2FP%2F!!isbn!!.08.MZZZZZZZ.jpg&noticecode=".str_replace("-","",$gtresultat['isbn'])."&vigurl=");
578
579            //cas où il n'y a pas d'image pmb renvoie un carré de 1 par 1 transparent.
580            $tmp_img = image_reduire("<img src=\"".$gtresultat['logo_src']."\" />", 130, 0);
581            if (strpos($tmp_img, "L1xH1") !== false)  $gtresultat['logo_src'] = "";
582           
583
584            $gtresultat['id'] = $id_notice;
585           
586
587            $tresultat = $gtresultat;
588}
589
590//parsing d'une notice sérialisée
591function pmb_ws_parser_notice_serialisee($id_notice, $value, &$tresultat) {
592            global $gtresultat;
593            $gtresultat = array();
594       
595            $noticecontent = array();
596            $unserialized = $value; 
597            $unserialized = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $unserialized );
598
599            $noticecontent = unserialize($unserialized);
600            foreach ( $noticecontent as $c1=>$v1) {
601              //echo("<br />C1 -> ".$c1."=".$v1);
602              foreach ( $v1 as $c2=>$v2) {
603                    //echo("<br />C2 -> ".$c2."=".$v2);
604                    foreach ( $v2 as $c3=>$v3) {
605                           if ($c3=="c") $dernierTypeTrouve = $v3;
606                           if ($c3=="id") $dernierIdTrouve = $v3;
607                            foreach ( $v3 as $c4=>$v4) {
608                                //echo("<br />attr=".$dernierTypeTrouve.",".$v4['c'].",".$v4['value']);
609                                $dernierSousTypeTrouve = $v4['c'];
610                                $texte = $v4['value'];
611                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "a")) $gtresultat['isbn'] .= $texte;
612                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "b")) $gtresultat['reliure'] .= $texte;
613                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "d")) $gtresultat['prix'] .= $texte;
614                               
615                                if (($dernierTypeTrouve == "101") && ($dernierSousTypeTrouve == "a")) $gtresultat['langues'] .= $texte;
616                               
617                                if (($dernierTypeTrouve == "102") && ($dernierSousTypeTrouve == "a")) $gtresultat['pays'] .= $texte;
618                               
619                                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "a")) $gtresultat['titre'] .= $texte;
620                                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "f")) $gtresultat['auteur'] .= $texte;
621                               
622                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['editeur'] .= $texte;
623                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "a")) $gtresultat['editeur'] .= ' ('.$texte.')';
624                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['id_editeur'] = $dernierIdTrouve;
625                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "d")) $gtresultat['annee_publication'] .= $texte;
626                               
627                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "a")) $gtresultat['importance'] .= $texte;
628                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "c")) $gtresultat['presentation'] .= $texte;
629                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "d")) $gtresultat['format'] .= $texte;
630                               
631                                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['collection'] .= $texte;
632                                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_collection'] = $dernierIdTrouve;
633                               
634                                if (($dernierTypeTrouve == "330") && ($dernierSousTypeTrouve == "a")) $gtresultat['resume'] .= str_replace("œ","&oelig;", stripslashes(str_replace("\n","<br />", $texte)));
635                               
636                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['lesauteurs'] .= $texte;
637                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "b")) $gtresultat['lesauteurs'] .= " ".$texte;
638                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_auteur'] = $dernierIdTrouve;
639                               
640                               
641                            }
642                    }
643              }
644            }
645
646            if ($gtresultat['lesauteurs'] == "")
647                  $gtresultat['lesauteurs'] = $gtresultat['auteur'];
648             $gtresultat['logo_src'] = copie_locale(lire_config("spip_pmb/url","http://tence.bibli.fr/opac")."/getimage.php?url_image=http%3A%2F%2Fimages-eu.amazon.com%2Fimages%2FP%2F!!isbn!!.08.MZZZZZZZ.jpg&noticecode=".str_replace("-","",$gtresultat['isbn'])."&vigurl=");
649
650            //cas où il n'y a pas d'image pmb renvoie un carré de 1 par 1 transparent.
651            $tmp_img = image_reduire("<img src=\"".$gtresultat['logo_src']."\" />", 130, 0);
652            if (strpos($tmp_img, "L1xH1") !== false)  $gtresultat['logo_src'] = "";
653           
654            $gtresultat['id'] = $id_notice;
655           
656
657            $tresultat = $gtresultat ;
658}
659
660
661//récuperer une notice en xml via les webservices
662function pmb_ws_recuperer_notice ($id_notice, &$ws, &$tresultat) {
663       
664       
665        try {   
666        $listenotices = array(''.$id_notice);
667        $tresultat['id'] = $id_notice;
668                  $r=$ws->pmbesNotices_fetchNoticeList($listenotices,"pmb_xml_unimarc","utf8",true,true);
669                  foreach($r as $value) {
670                      pmb_ws_parser_notice_xml($id_notice, $value, $tresultat);
671                  }
672               
673
674        } catch (SoapFault $fault) {
675                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
676        } 
677
678       
679
680}
681//récuperer une notice en xml via les webservices
682function pmb_ws_recuperer_tab_notices ($listenotices, &$ws, &$tresultat) {
683       
684       
685        try {   
686       
687        $tresultat['id'] = $id_notice;
688                  $r=$ws->pmbesNotices_fetchNoticeList($listenotices,"pmb_xml_unimarc","utf8",true,true);
689                  $cpt=0;
690                  foreach($r as $value) {
691                      $tresultat[$cpt] = Array();
692                      pmb_ws_parser_notice_xml($id_notice, $value, $tresultat[$cpt]);
693                      $cpt++;
694                  }
695               
696
697        } catch (SoapFault $fault) {
698                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
699        } 
700
701       
702
703}
704
705//charger les webservices
706function pmb_ws_charger_wsdl(&$ws, $url_base) {
707        $ws=new SoapClient(lire_config("spip_pmb/wsdl","http://tence.bibli.fr/pmbws/PMBWsSOAP_1?wsdl"));
708       
709}
710
711
712// retourne un tableau associatif contenant tous les champs d'une notice
713function pmb_notice_extraire ($id_notice, $url_base, $mode='auto') {
714        $tableau_resultat = Array();
715       
716        pmb_ws_charger_wsdl($ws, $url_base);
717        pmb_ws_recuperer_notice($id_notice, $ws, $tableau_resultat);
718        return $tableau_resultat;
719                       
720}
721
722// retourne un tableau associatif contenant les prêts en cours
723function pmb_prets_extraire ($session_id, $url_base, $type_pret=0) {
724        $tableau_resultat = Array();
725        pmb_ws_charger_wsdl($ws, $url_base);
726        $loans = $ws->pmbesOPACEmpr_list_loans($session_id, $type_pret);
727        $cpt = 0;
728        foreach ($loans as $loan) {
729              $tableau_resultat[$cpt] = Array();
730              $tableau_resultat[$cpt]['empr_id'] = $loan->empr_id;
731              $tableau_resultat[$cpt]['notice_id'] = $loan->notice_id;
732              $tableau_resultat[$cpt]['bulletin_id'] = $loan->bulletin_id;
733              $tableau_resultat[$cpt]['expl_id'] = $loan->expl_id;
734              $tableau_resultat[$cpt]['expl_cb'] = $loan->expl_cb;
735              $tableau_resultat[$cpt]['expl_support'] = $loan->expl_support;
736              $tableau_resultat[$cpt]['expl_location_id'] = $loan->expl_location_id;
737              $tableau_resultat[$cpt]['expl_location_caption'] = $loan->expl_location_caption;
738              $tableau_resultat[$cpt]['expl_section_id'] = $loan->expl_section_id;
739              $tableau_resultat[$cpt]['expl_section_caption'] = $loan->expl_section_caption;
740              $tableau_resultat[$cpt]['expl_libelle'] = $loan->expl_libelle;
741              $tableau_resultat[$cpt]['loan_startdate'] = $loan->loan_startdate;
742              $tableau_resultat[$cpt]['loan_returndate'] = $loan->loan_returndate;
743              $cpt++;
744        }
745
746        return $tableau_resultat;
747                       
748}
749function pmb_reservations_extraire($pmb_session, $url_base) {
750        $tableau_resultat = Array();
751        pmb_ws_charger_wsdl($ws, $url_base);
752        $reservations = $ws->pmbesOPACEmpr_list_resas($pmb_session);
753
754        $cpt = 0;
755        foreach ($reservations as $reservation) {
756              $tableau_resultat[$cpt] = Array();
757              $tableau_resultat[$cpt]['resa_id'] = $reservation->resa_id;
758              $tableau_resultat[$cpt]['empr_id'] = $reservation->empr_id;
759              $tableau_resultat[$cpt]['notice_id'] = $reservation->notice_id;
760              $tableau_resultat[$cpt]['bulletin_id'] = $reservation->bulletin_id;
761              $tableau_resultat[$cpt]['resa_rank'] = $reservation->resa_rank;
762              $tableau_resultat[$cpt]['resa_dateend'] = $reservation->resa_dateend;
763              $tableau_resultat[$cpt]['resa_retrait_location_id '] = $reservation->resa_retrait_location_id ;
764              $tableau_resultat[$cpt]['resa_retrait_location'] = $reservation->resa_retrait_location;
765           
766              $cpt++;
767        }
768
769        return $tableau_resultat;
770
771}
772function pmb_tester_session($pmb_session, $id_auteur, $url_base) {
773       
774        //tester si la session pmb est toujours active
775        pmb_ws_charger_wsdl($ws, $url_base);
776       
777
778        try {
779              if ($ws->pmbesOPACEmpr_get_account_info($pmb_session)) {
780                return 1;
781              } else {
782                 $m = sql_updateq('spip_auteurs_pmb', array(
783                                      'pmb_session' => ''),
784                                      "id_auteur=".$id_auteur);
785                return 0;
786              }
787
788        } catch (SoapFault $fault) {
789                $m = sql_updateq('spip_auteurs_pmb', array(
790                                      'pmb_session' => ''),
791                                      "id_auteur=".$id_auteur);
792                return 0;
793        }
794}
795function pmb_reserver_ouvrage($session_id, $notice_id, $bulletin_id, $location, $url_base) {
796        pmb_ws_charger_wsdl($ws, $url_base);
797        return $ws->pmbesOPACEmpr_add_resa($session_id, $notice_id, $bulletin_id, $location);
798}
799
800function pmb_notice_champ ($tableau_resultat, $champ) {
801        return $tableau_resultat[$champ];
802}
803function pmb_tableau2_valeur ($tableau_resultat, $indice1, $indice2) {
804        return $tableau_resultat[$indice1][$indice2];
805}
806/*mettre le champ de recherche au format de pmb */
807function pmb_prepare_recherche ($recherche) {
808        $recherche = str_replace("+"," ",$recherche);
809        return $recherche;
810}
811
812/* fonction str_replace avec l'ordre des parametres compatible spip */
813function pmb_remplacer ($chaine, $p1, $p2) {
814        return str_replace($p1,$p2,$chaine);
815}
816function contient($texte, $findme) {
817        return (strpos($texte, $findme) !== false);
818}
819
820?>
Note: See TracBrowser for help on using the repository browser.