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

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

récupérer les collections par les ws, exemple: http://www.risom.fr/spip.php?page=coll_see&id=4043

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