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

Last change on this file since 32210 was 32210, checked in by apachot@…, 11 years ago
  • afficher les données des éditeurs avec les webservices
  • et ajout de la pagination sur les ouvrages d'un auteur / éditeur
File size: 36.5 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, $debut=0, $nbresult=5, $id_session=0) {
190        $tableau_resultat = Array();
191       
192        pmb_ws_charger_wsdl($ws, $url_base);
193        try {
194              $result = $ws->pmbesPublishers_get_publisher_information_and_notices($id_editeur,$id_session);
195              if ($result) {
196                  $tableau_resultat['publisher_id'] = $result['information']->publisher_id;
197                  $tableau_resultat['publisher_name'] = $result['information']->publisher_name;
198                  $tableau_resultat['publisher_address1'] = $result['information']->publisher_address1;
199                  $tableau_resultat['publisher_address2'] = $result['information']->publisher_address2;
200                 
201
202                  $tableau_resultat['publisher_zipcode'] = $result['information']->publisher_zipcode;
203                  $tableau_resultat['publisher_city'] = $result['information']->publisher_city;
204                  $tableau_resultat['publisher_country'] = $result['information']->publisher_country;
205                  $tableau_resultat['publisher_web'] = $result['information']->publisher_web;
206                  $tableau_resultat['publisher_comment'] = $result['information']->publisher_comment;
207                   $tableau_resultat['notice_ids'] = Array();
208
209                  $liste_notices = Array();
210                  $cpt=0;
211                  foreach($result['notice_ids'] as $cle=>$valeur) {
212                    if (($cpt>=$debut) && ($cpt<$nbresult+$debut)) $liste_notices[] = $valeur;
213                    $cpt++;
214                  }
215                  pmb_ws_recuperer_tab_notices($liste_notices, $ws, $tableau_resultat['notice_ids']);
216                  $tableau_resultat['notice_ids'][0]['nb_resultats'] = $cpt;
217
218                  $cpt=0;
219                  foreach($liste_notices as $notice) {
220                    $tableau_resultat['notice_ids'][$cpt]['id'] = $notice;
221                    $cpt++;
222                  }
223                }
224        } catch (SoapFault $fault) {
225                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
226        } 
227        return $tableau_resultat;
228
229}
230
231function pmb_auteur_extraire($id_auteur, $debut=0, $nbresult=5, $id_session=0) {
232        $tableau_resultat = Array();
233       
234        pmb_ws_charger_wsdl($ws, $url_base);
235        try {
236              $result = $ws->pmbesAuthors_get_author_information_and_notices($id_auteur,$id_session);
237              if ($result) {
238                  $tableau_resultat['author_id'] = $result['information']->author_id;
239                  $tableau_resultat['author_type'] = $result['information']->author_type;
240                  $tableau_resultat['author_name'] = $result['information']->author_name;
241                  $tableau_resultat['author_rejete'] = $result['information']->author_rejete;
242                  if ($result['information']->author_rejete) {
243                      $tableau_resultat['author_nomcomplet'] =  $tableau_resultat['author_rejete'].' '.$tableau_resultat['author_name'];
244                  } else {
245                      $tableau_resultat['author_nomcomplet'] = $tableau_resultat['author_name'];
246                  }
247
248                  $tableau_resultat['author_see'] = $result['information']->author_see;
249                  $tableau_resultat['author_date'] = $result['information']->author_date;
250                  $tableau_resultat['author_web'] = $result['information']->author_web;
251                  $tableau_resultat['author_comment'] = $result['information']->author_comment;
252                  $tableau_resultat['author_lieu'] = $result['information']->author_lieu;
253                  $tableau_resultat['author_ville'] = $result['information']->author_ville;
254                  $tableau_resultat['author_pays'] = $result['information']->author_pays;
255                  $tableau_resultat['author_subdivision'] = $result['information']->author_subdivision;
256                  $tableau_resultat['author_numero'] = $result['information']->author_numero;
257                  $tableau_resultat['notice_ids'] = Array();
258
259                  $liste_notices = Array();
260                  $cpt=0;
261                  foreach($result['notice_ids'] as $cle=>$valeur) {
262                    if (($cpt>=$debut) && ($cpt<$nbresult+$debut)) $liste_notices[] = $valeur;
263                    $cpt++;
264                  }
265                  pmb_ws_recuperer_tab_notices($liste_notices, $ws, $tableau_resultat['notice_ids']);
266                   $tableau_resultat['notice_ids'][0]['nb_resultats'] = $cpt;
267                  $cpt=0;
268                  foreach($liste_notices as $notice) {
269                    $tableau_resultat['notice_ids'][$cpt]['id'] = $notice;
270                    $cpt++;
271                  }
272                }
273        } catch (SoapFault $fault) {
274                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
275        } 
276        return $tableau_resultat;
277
278}
279
280function 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) {
281        $tableau_resultat = Array();
282
283
284       
285        $search = array();
286       
287                       
288        if ($look_ALL) {
289                  $search[] = array("inter"=>"or","field"=>42,"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        if ($look_TITLE) {
294                  $search[] = array("inter"=>"or","field"=>1,"operator"=>"BOOLEAN", "value"=>$recherche);
295                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
296                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
297        }
298
299        if ($look_AUTHOR) {
300                  $search[] = array("inter"=>"or","field"=>2,"operator"=>"BOOLEAN", "value"=>$recherche);
301                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
302                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
303        }
304   
305        if ($look_PUBLISHER) {
306                  $search[] = array("inter"=>"or","field"=>3,"operator"=>"BOOLEAN", "value"=>$recherche);
307                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
308                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
309        }
310
311        if ($look_COLLECTION) {
312                  $search[] = array("inter"=>"or","field"=>4,"operator"=>"BOOLEAN", "value"=>$recherche);
313                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
314                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
315        }
316
317        if ($look_ABSTRACT) {
318                  $search[] = array("inter"=>"or","field"=>10,"operator"=>"BOOLEAN", "value"=>$recherche);
319                  if ($typdoc) $search[] = array("inter"=>"AND","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
320                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
321        }
322 
323        if ($look_CATEGORY) {
324                  $search[] = array("inter"=>"or","field"=>11,"operator"=>"BOOLEAN", "value"=>$recherche);
325                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
326                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
327        }
328
329        if ($look_INDEXINT) {
330                  $search[] = array("inter"=>"or","field"=>12,"operator"=>"BOOLEAN", "value"=>$recherche);
331                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
332                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
333        }
334
335        if ($look_KEYWORDS) {
336                  $search[] = array("inter"=>"","field"=>13,"operator"=>"BOOLEAN", "value"=>$recherche);
337                  if ($typdoc) $search[] = array("inter"=>"and","field"=>15,"operator"=>"EQ", "value"=>$typdoc);
338                  if ($id_section) $search[] = array("inter"=>"and","field"=>17,"operator"=>"EQ", "value"=>$id_section);
339        }
340       
341       
342                 
343        //récupérer le résultat d'une recherchevia les webservices
344       
345        global $gtresultat;
346        $gtresultat = array();
347       
348       
349       
350        pmb_ws_charger_wsdl($ws, $url_base);
351        try {   
352                        $tableau_resultat[0] = Array();
353                                       
354                        $r=$ws->pmbesOPACAnonymous_advancedSearch($search);
355                       
356                        $searchId=$r["searchId"];
357                        $tableau_resultat[0]['nb_resultats'] = $r["nbResults"];
358           
359                        //R�cup�ration des 10 premiers r�sultats
360                        /*Les formats peuvent-�tre :
361                                pmb_xml_unimarc pour du xml.
362                                json_unimarc pour du javascript.
363                                serialized_unimarc pour du php.
364                                header, isbd, isbd_suite pour du texte.
365                                dc, oai_dc pour du dublin core.
366                                convert:truc pour un passage pas admin/convert dans le format truc.
367                                autre: renvoi l'id de la notice.
368                        */ 
369                          $r=$ws->pmbesOPACAnonymous_fetchSearchRecords($searchId,$debut,$fin,"serialized_unimarc","utf8");
370                          $i = 1;
371                          foreach($r as $value) {
372                                    $tableau_resultat[$i] = Array();                           
373                               
374                                    pmb_ws_parser_notice_serialisee($value['noticeId'], $value['noticeContent'], $tableau_resultat[$i]);
375                                    $i++;
376                          }
377               
378
379        } catch (SoapFault $fault) {
380                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
381        } 
382
383        return $tableau_resultat;
384}
385
386
387function pmb_parser_notice_apercu ($localdom, &$tresultat) {
388        $tresultat['id'] = intval(substr($localdom->id,2));     
389        $tresultat['logo_src'] = $localdom->find('table td img',2)->src; 
390        $tablechamps = $localdom->find('table tr tr');
391        foreach($tablechamps as $tr) {
392                $libelle = htmlentities($tr->find('td',0)->innertext);
393                $valeur = $tr->find('td',1)->innertext;
394                if (strpos($libelle, 'Titre de s')) $tresultat['serie'] = $valeur; 
395                if (strpos($libelle, 'Titre')) $tresultat['titre'] = $valeur; 
396                else if (strpos($libelle, 'Type de document')) $tresultat['type'] = $valeur; 
397                else if (strpos($libelle, 'Editeur')) $tresultat['editeur'] = $valeur; 
398                else if (strpos($libelle, 'Auteurs')) $tresultat['lesauteurs'] = $valeur; 
399                else if (strpos($libelle, 'de publication')) $tresultat['annee_publication'] = $valeur; 
400                else if (strpos($libelle, 'Collection')) $tresultat['collection'] = $valeur; 
401                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur; 
402                else if (strpos($libelle, 'Présentation')) $tresultat['presentation'] = $valeur; 
403                else if (strpos($libelle, 'Format')) $tresultat['format'] = $valeur; 
404                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur; 
405                else if (strpos($libelle, 'ISBN')) $tresultat['isbn'] = $valeur; 
406                else if (strpos($libelle, 'Prix')) $tresultat['prix'] = $valeur; 
407                else if (strpos($libelle, 'Langues')) $tresultat['langues'] = $valeur; 
408                else if (strpos($libelle, 'sum')) $tresultat['resume'] = $valeur; 
409        }
410
411}
412
413
414
415//d�coupage d'une notice au d�part dans un div de class .parent
416/*function pmb_parser_notice ($id_notice, $localdom, &$tresultat) {
417        $tresultat['id'] = $id_notice; 
418        $tresultat['logo_src'] = $localdom->find('table td img',2)->src;
419        $tresultat['exemplaires'] = $localdom->find('.exemplaires',0)->outertext;
420        if ($tmp = $localdom->find('.autres_lectures',0)) {
421                        $tresultat['autres_lecteurs'] = $tmp->next_sibling()->outertext;
422        }                               
423        $tablechamps = $localdom->find('#div_public'.$id_notice.' tr');
424        foreach($tablechamps as $tr) {
425                $libelle = htmlentities($tr->find('td',0)->innertext);
426                $valeur = $tr->find('td',1)->innertext;
427                if (strpos($libelle, 'Titre de s')) $tresultat['serie'] = $valeur;
428                if (strpos($libelle, 'Titre')) $tresultat['titre'] = $valeur;
429                else if (strpos($libelle, 'Type de document')) $tresultat['type'] = $valeur;
430                else if (strpos($libelle, 'Editeur')) $tresultat['editeur'] = $valeur;
431                else if (strpos($libelle, 'Auteurs')) $tresultat['lesauteurs'] = $valeur;
432                else if (strpos($libelle, 'de publication')) $tresultat['annee_publication'] = $valeur;
433                else if (strpos($libelle, 'Collection')) $tresultat['collection'] = $valeur;
434                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur;
435                else if (strpos($libelle, 'Présentation')) $tresultat['presentation'] = $valeur;
436                else if (strpos($libelle, 'Format')) $tresultat['format'] = $valeur;
437                else if (strpos($libelle, 'Importance')) $tresultat['importance'] = $valeur;
438                else if (strpos($libelle, 'ISBN')) $tresultat['isbn'] = $valeur;
439                else if (strpos($libelle, 'Prix')) $tresultat['prix'] = $valeur;
440                else if (strpos($libelle, 'Langues')) $tresultat['langues'] = $valeur;
441                else if (strpos($libelle, 'sum')) $tresultat['resume'] = $valeur;
442        }
443
444}*/
445
446    // Traitement des balises ouvrantes
447    function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
448    {
449        // En fait... nous nous conteterons de mémoriser le nom de la balise
450        // afin d'en tenir compte dans la fonction "fonctionTexte"
451
452        global $derniereBaliseRencontree;
453         global $dernierAttributRencontre;
454       global $dernierTypeTrouve;
455       global $dernierIdTrouve;
456
457        $derniereBaliseRencontree = $nomBalise;
458 
459        $dernierAttributRencontre = $tableauAttributs;
460       
461    }
462   
463    // Rraitement des balises fermantes
464    function fonctionBaliseFermante($parseur, $nomBalise)
465    {
466        // On oublie la dernière balise rencontrée
467        global $derniereBaliseRencontree;
468         global $dernierAttributRencontre;
469       global $dernierTypeTrouve;
470       global $dernierIdTrouve;
471
472        $derniereBaliseRencontree = "";
473    }
474
475    // Traitement du texte
476    // qui est appelé par le "parseur"
477    function fonctionTexte($parseur, $texte)
478    {
479        global $derniereBaliseRencontree;
480         global $dernierAttributRencontre;
481       global $dernierTypeTrouve;
482       global $dernierIdTrouve;
483    global $gtresultat;
484    global $indice_exemplaire;
485
486        // Selon les cas, nous affichons le texte
487        // ou nous proposons un lien
488        // ATTENTION: Par défaut les noms des balises sont
489        //            mises en majuscules
490       //echo("<br />fonctionTexte=".$derniereBaliseRencontree);
491        switch ($derniereBaliseRencontree) {
492            case "F": 
493                   foreach($dernierAttributRencontre as $cle=>$attr) {
494                        if ($cle=="C") $dernierTypeTrouve = $attr;
495                        if ($cle=="ID") $dernierIdTrouve = $attr;
496                  }
497              break;
498
499            case "S":
500               foreach($dernierAttributRencontre as $cle=>$attr) {
501                        if ($cle=="C") $dernierSousTypeTrouve = $attr;
502                }
503
504                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "a")) $gtresultat['isbn'] .= $texte;
505                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "b")) $gtresultat['reliure'] .= $texte;
506                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "d")) $gtresultat['prix'] .= $texte;
507               
508                if (($dernierTypeTrouve == "101") && ($dernierSousTypeTrouve == "a")) $gtresultat['langues'] .= $texte;
509               
510                if (($dernierTypeTrouve == "102") && ($dernierSousTypeTrouve == "a")) $gtresultat['pays'] .= $texte;
511               
512                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "a")) $gtresultat['titre'] .= $texte;
513                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "f")) $gtresultat['auteur'] .= $texte;
514               
515                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['editeur'] .= $texte;
516                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "a")) $gtresultat['editeur'] .= ' ('.$texte.')';
517                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "d")) $gtresultat['annee_publication'] .= $texte;
518                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['id_editeur'] = $dernierIdTrouve;
519               
520                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "a")) $gtresultat['importance'] .= $texte;
521                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "c")) $gtresultat['presentation'] .= $texte;
522                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "d")) $gtresultat['format'] .= $texte;
523               
524                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['collection'] .= $texte;
525                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_collection'] = $dernierIdTrouve;
526               
527                if (($dernierTypeTrouve == "330") && ($dernierSousTypeTrouve == "a")) $gtresultat['resume'] .= str_replace("œ","&oelig;", str_replace("\n","<br />", $texte));
528               
529                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['lesauteurs'] .= $texte;
530                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "b")) $gtresultat['lesauteurs'] .= " ".$texte;
531                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_auteur'] = $dernierIdTrouve;
532               
533                //section996 mode html
534                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "f")) $gtresultat['exemplaires'] .= "<tr><td class='expl_cb'>".$texte."</td>";
535                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "k")) $gtresultat['exemplaires'] .= "<td class='expl_cote'>".$texte."</td>";
536                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "e")) $gtresultat['exemplaires'] .= "<td class='tdoc_libelle'>".$texte."</td>";
537                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "v")) $gtresultat['exemplaires'] .= "<td class='location_libelle'>".$texte."</td>";
538                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "x")) $gtresultat['exemplaires'] .= "<td class='section_libelle'>".$texte."</td>";
539                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "1")) $gtresultat['exemplaires'] .= "<td class='expl_situation'><strong>".$texte."</strong></td></tr>";
540
541                //section996 mode tableau
542                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "f")) {
543                        $indice_exemplaire++;
544                        $gtresultat['tab_exemplaires'][$indice_exemplaire-1] = Array();
545                        $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_cb'] .= $texte;
546                }
547
548                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "k")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_cote'] .= $texte;
549                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "e")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['tdoc_libelle'] .= $texte;
550                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "v")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['location_libelle'] .= $texte;
551                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "x")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['section_libelle'] .= $texte;
552                if (($dernierTypeTrouve == "996") && ($dernierSousTypeTrouve == "1")) $gtresultat['tab_exemplaires'][$indice_exemplaire-1]['expl_situation'] .= $texte;
553
554               
555                break;
556        }         
557    }
558
559//parsing xml d'une notice
560function pmb_ws_parser_notice_xml($id_notice, $value, &$tresultat) {
561
562            include_spip("/inc/filtres_images");
563            global $gtresultat;
564            global $indice_exemplaire;
565            $indice_exemplaire = 0;
566            $gtresultat = array();
567       
568            // Création du parseur XML
569            $parseurXML = xml_parser_create();
570
571            // Je précise le nom des fonctions à appeler
572            // lorsque des balises ouvrantes ou fermantes sont rencontrées
573            xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
574                                              , "fonctionBaliseFermante");
575
576            // Je précise le nom de la fonction à appeler
577            // lorsque du texte est rencontré
578            xml_set_character_data_handler($parseurXML, "fonctionTexte");
579
580           $gtresultat['tab_exemplaires'] = Array();
581         
582           $gtresultat['exemplaires'] = "<table cellpadding='2' class='exemplaires' width='100%'>
583                    <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>";
584
585            // Ouverture du fichier
586            xml_parse($parseurXML, $value, true);
587         
588           $gtresultat['exemplaires'] .= "</table>";
589            // echo("<br/><br />version brute : <br/><br />".$value);
590            xml_parser_free($parseurXML);
591
592            if ($gtresultat['lesauteurs'] == "")
593                  $gtresultat['lesauteurs'] = $gtresultat['auteur'];
594             $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=");
595
596            //cas où il n'y a pas d'image pmb renvoie un carré de 1 par 1 transparent.
597            $tmp_img = image_reduire("<img src=\"".$gtresultat['logo_src']."\" />", 130, 0);
598            if (strpos($tmp_img, "L1xH1") !== false)  $gtresultat['logo_src'] = "";
599           
600
601            $gtresultat['id'] = $id_notice;
602           
603
604            $tresultat = $gtresultat;
605}
606
607//parsing d'une notice sérialisée
608function pmb_ws_parser_notice_serialisee($id_notice, $value, &$tresultat) {
609            global $gtresultat;
610            $gtresultat = array();
611       
612            $noticecontent = array();
613            $unserialized = $value; 
614            $unserialized = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $unserialized );
615
616            $noticecontent = unserialize($unserialized);
617            foreach ( $noticecontent as $c1=>$v1) {
618              //echo("<br />C1 -> ".$c1."=".$v1);
619              foreach ( $v1 as $c2=>$v2) {
620                    //echo("<br />C2 -> ".$c2."=".$v2);
621                    foreach ( $v2 as $c3=>$v3) {
622                           if ($c3=="c") $dernierTypeTrouve = $v3;
623                           if ($c3=="id") $dernierIdTrouve = $v3;
624                            foreach ( $v3 as $c4=>$v4) {
625                                //echo("<br />attr=".$dernierTypeTrouve.",".$v4['c'].",".$v4['value']);
626                                $dernierSousTypeTrouve = $v4['c'];
627                                $texte = $v4['value'];
628                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "a")) $gtresultat['isbn'] .= $texte;
629                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "b")) $gtresultat['reliure'] .= $texte;
630                                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "d")) $gtresultat['prix'] .= $texte;
631                               
632                                if (($dernierTypeTrouve == "101") && ($dernierSousTypeTrouve == "a")) $gtresultat['langues'] .= $texte;
633                               
634                                if (($dernierTypeTrouve == "102") && ($dernierSousTypeTrouve == "a")) $gtresultat['pays'] .= $texte;
635                               
636                                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "a")) $gtresultat['titre'] .= $texte;
637                                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "f")) $gtresultat['auteur'] .= $texte;
638                               
639                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['editeur'] .= $texte;
640                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "a")) $gtresultat['editeur'] .= ' ('.$texte.')';
641                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['id_editeur'] = $dernierIdTrouve;
642                                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "d")) $gtresultat['annee_publication'] .= $texte;
643                               
644                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "a")) $gtresultat['importance'] .= $texte;
645                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "c")) $gtresultat['presentation'] .= $texte;
646                                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "d")) $gtresultat['format'] .= $texte;
647                               
648                                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['collection'] .= $texte;
649                                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_collection'] = $dernierIdTrouve;
650                               
651                                if (($dernierTypeTrouve == "330") && ($dernierSousTypeTrouve == "a")) $gtresultat['resume'] .= str_replace("œ","&oelig;", stripslashes(str_replace("\n","<br />", $texte)));
652                               
653                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['lesauteurs'] .= $texte;
654                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "b")) $gtresultat['lesauteurs'] .= " ".$texte;
655                                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['id_auteur'] = $dernierIdTrouve;
656                               
657                               
658                            }
659                    }
660              }
661            }
662
663            if ($gtresultat['lesauteurs'] == "")
664                  $gtresultat['lesauteurs'] = $gtresultat['auteur'];
665             $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=");
666
667            //cas où il n'y a pas d'image pmb renvoie un carré de 1 par 1 transparent.
668            $tmp_img = image_reduire("<img src=\"".$gtresultat['logo_src']."\" />", 130, 0);
669            if (strpos($tmp_img, "L1xH1") !== false)  $gtresultat['logo_src'] = "";
670           
671            $gtresultat['id'] = $id_notice;
672           
673
674            $tresultat = $gtresultat ;
675}
676
677
678//récuperer une notice en xml via les webservices
679function pmb_ws_recuperer_notice ($id_notice, &$ws, &$tresultat) {
680       
681       
682        try {   
683        $listenotices = array(''.$id_notice);
684        $tresultat['id'] = $id_notice;
685                  $r=$ws->pmbesNotices_fetchNoticeList($listenotices,"pmb_xml_unimarc","utf8",true,true);
686                  foreach($r as $value) {
687                      pmb_ws_parser_notice_xml($id_notice, $value, $tresultat);
688                  }
689               
690
691        } catch (SoapFault $fault) {
692                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
693        } 
694
695       
696
697}
698//récuperer une notice en xml via les webservices
699function pmb_ws_recuperer_tab_notices ($listenotices, &$ws, &$tresultat) {
700       
701       
702        try {   
703       
704        $tresultat['id'] = $id_notice;
705                  $r=$ws->pmbesNotices_fetchNoticeList($listenotices,"pmb_xml_unimarc","utf8",true,true);
706                  $cpt=0;
707                  foreach($r as $value) {
708                      $tresultat[$cpt] = Array();
709                      pmb_ws_parser_notice_xml($id_notice, $value, $tresultat[$cpt]);
710                      $cpt++;
711                  }
712               
713
714        } catch (SoapFault $fault) {
715                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
716        } 
717
718       
719
720}
721
722//charger les webservices
723function pmb_ws_charger_wsdl(&$ws, $url_base) {
724        $ws=new SoapClient(lire_config("spip_pmb/wsdl","http://tence.bibli.fr/pmbws/PMBWsSOAP_1?wsdl"));
725       
726}
727
728
729// retourne un tableau associatif contenant tous les champs d'une notice
730function pmb_notice_extraire ($id_notice, $url_base, $mode='auto') {
731        $tableau_resultat = Array();
732       
733        pmb_ws_charger_wsdl($ws, $url_base);
734        pmb_ws_recuperer_notice($id_notice, $ws, $tableau_resultat);
735        return $tableau_resultat;
736                       
737}
738
739// retourne un tableau associatif contenant les prêts en cours
740function pmb_prets_extraire ($session_id, $url_base, $type_pret=0) {
741        $tableau_resultat = Array();
742        pmb_ws_charger_wsdl($ws, $url_base);
743        $loans = $ws->pmbesOPACEmpr_list_loans($session_id, $type_pret);
744        $cpt = 0;
745        foreach ($loans as $loan) {
746              $tableau_resultat[$cpt] = Array();
747              $tableau_resultat[$cpt]['empr_id'] = $loan->empr_id;
748              $tableau_resultat[$cpt]['notice_id'] = $loan->notice_id;
749              $tableau_resultat[$cpt]['bulletin_id'] = $loan->bulletin_id;
750              $tableau_resultat[$cpt]['expl_id'] = $loan->expl_id;
751              $tableau_resultat[$cpt]['expl_cb'] = $loan->expl_cb;
752              $tableau_resultat[$cpt]['expl_support'] = $loan->expl_support;
753              $tableau_resultat[$cpt]['expl_location_id'] = $loan->expl_location_id;
754              $tableau_resultat[$cpt]['expl_location_caption'] = $loan->expl_location_caption;
755              $tableau_resultat[$cpt]['expl_section_id'] = $loan->expl_section_id;
756              $tableau_resultat[$cpt]['expl_section_caption'] = $loan->expl_section_caption;
757              $tableau_resultat[$cpt]['expl_libelle'] = $loan->expl_libelle;
758              $tableau_resultat[$cpt]['loan_startdate'] = $loan->loan_startdate;
759              $tableau_resultat[$cpt]['loan_returndate'] = $loan->loan_returndate;
760              $cpt++;
761        }
762
763        return $tableau_resultat;
764                       
765}
766function pmb_reservations_extraire($pmb_session, $url_base) {
767        $tableau_resultat = Array();
768        pmb_ws_charger_wsdl($ws, $url_base);
769        $reservations = $ws->pmbesOPACEmpr_list_resas($pmb_session);
770
771        $cpt = 0;
772        foreach ($reservations as $reservation) {
773              $tableau_resultat[$cpt] = Array();
774              $tableau_resultat[$cpt]['resa_id'] = $reservation->resa_id;
775              $tableau_resultat[$cpt]['empr_id'] = $reservation->empr_id;
776              $tableau_resultat[$cpt]['notice_id'] = $reservation->notice_id;
777              $tableau_resultat[$cpt]['bulletin_id'] = $reservation->bulletin_id;
778              $tableau_resultat[$cpt]['resa_rank'] = $reservation->resa_rank;
779              $tableau_resultat[$cpt]['resa_dateend'] = $reservation->resa_dateend;
780              $tableau_resultat[$cpt]['resa_retrait_location_id '] = $reservation->resa_retrait_location_id ;
781              $tableau_resultat[$cpt]['resa_retrait_location'] = $reservation->resa_retrait_location;
782           
783              $cpt++;
784        }
785
786        return $tableau_resultat;
787
788}
789function pmb_tester_session($pmb_session, $id_auteur, $url_base) {
790       
791        //tester si la session pmb est toujours active
792        pmb_ws_charger_wsdl($ws, $url_base);
793       
794
795        try {
796              if ($ws->pmbesOPACEmpr_get_account_info($pmb_session)) {
797                return 1;
798              } else {
799                 $m = sql_updateq('spip_auteurs_pmb', array(
800                                      'pmb_session' => ''),
801                                      "id_auteur=".$id_auteur);
802                return 0;
803              }
804
805        } catch (SoapFault $fault) {
806                $m = sql_updateq('spip_auteurs_pmb', array(
807                                      'pmb_session' => ''),
808                                      "id_auteur=".$id_auteur);
809                return 0;
810        }
811}
812function pmb_reserver_ouvrage($session_id, $notice_id, $bulletin_id, $location, $url_base) {
813        pmb_ws_charger_wsdl($ws, $url_base);
814        return $ws->pmbesOPACEmpr_add_resa($session_id, $notice_id, $bulletin_id, $location);
815}
816
817function pmb_notice_champ ($tableau_resultat, $champ) {
818        return $tableau_resultat[$champ];
819}
820function pmb_tableau2_valeur ($tableau_resultat, $indice1, $indice2) {
821        return $tableau_resultat[$indice1][$indice2];
822}
823/*mettre le champ de recherche au format de pmb */
824function pmb_prepare_recherche ($recherche) {
825        $recherche = str_replace("+"," ",$recherche);
826        return $recherche;
827}
828
829/* fonction str_replace avec l'ordre des parametres compatible spip */
830function pmb_remplacer ($chaine, $p1, $p2) {
831        return str_replace($p1,$p2,$chaine);
832}
833function contient($texte, $findme) {
834        return (strpos($texte, $findme) !== false);
835}
836
837?>
Note: See TracBrowser for help on using the repository browser.