source: pmb4.2/trunk/fuentes/pmb/classes/mono_display_unimarc.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 36.8 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: mono_display_unimarc.class.php,v 1.39 2015-04-03 11:16:19 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once("$class_path/marc_table.class.php");
10require_once("$class_path/author.class.php");
11require_once("$class_path/editor.class.php");
12require_once("$class_path/collection.class.php");
13require_once("$class_path/subcollection.class.php");
14require_once("$class_path/indexint.class.php");
15require_once("$class_path/serie.class.php");
16require_once("$class_path/category.class.php");
17require_once($class_path."/parametres_perso.class.php");
18require_once($class_path."/emprunteur.class.php");
19require_once($include_path."/notice_authors.inc.php");
20require_once($include_path."/notice_categories.inc.php");
21require_once($include_path."/explnum.inc.php");
22require_once($include_path."/isbn.inc.php");
23require_once($include_path."/resa_func.inc.php");
24
25
26if (!sizeof($tdoc)) $tdoc = new marc_list('doctype');
27if (!count($fonction_auteur)) {
28        $fonction_auteur = new marc_list('function');
29        $fonction_auteur = $fonction_auteur->table;
30        }
31if (!count($langue_doc)) {
32        $langue_doc = new marc_list('lang');
33        $langue_doc = $langue_doc->table;
34        }
35// propriétés pour le selecteur de panier
36$selector_prop = "toolbar=no, dependent=yes, resizable=yes, scrollbars=yes";
37$cart_click = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item=!!id!!&unq=!!unique!!', 'cart', 600, 700, -2, -2, '$selector_prop')\"";
38
39
40function cmpexpl($a, $b)
41{
42        $c1 = isset($a["priority"]) ? $a["priority"] : "";
43        $c2 = isset($b["priority"]) ? $b["priority"] : "";
44        if ($c1 == $c2) {
45                $c1 = isset($a["content"]["v"]) ? $a["content"]["v"] : "";
46                $c2 = isset($b["content"]["v"]) ? $b["content"]["v"] : "";
47                return strcmp($c1, $c2);               
48        }
49        return $c2-$c1;
50}
51
52// définition de la classe d'affichage des monographies en liste
53class mono_display_unimarc {
54        var $notice_id          = 0;    // id de la notice à afficher
55        var $isbn               = 0;    // isbn ou code EAN de la notice à afficher
56        var $notice;                    // objet notice (tel que fetch� dans la table 'notices'
57        var $langues = array();
58        var $languesorg = array();
59        var $action             = '';   // URL à associer au header
60        var $header             = '';   // chaine accueillant le chapeau de notice (peut-être cliquable)
61        var $tit_serie          = '';   // titre de série si applicable
62        var $tit1               = '';   // valeur du titre 1
63        var $result             = '';   // affichage final
64        var $level              = 1;    // niveau d'affichage
65        var $isbd               = '';   // isbd de la notice en fonction du level défini
66        var $expl               = 0;    // flag indiquant si on affiche les infos d'exemplaire
67        var $nb_expl    = 0;    //nombre d'exemplaires
68        var $link_expl          = '';   // lien associé à un exemplaire
69        var $responsabilites =  array("responsabilites" => array(),"auteurs" => array());  // les auteurs
70        var $auteurs_principaux;
71        var $auteurs_tous;
72        var $categories_toutes;
73        var $collections;
74        var $publishers;
75        var $print_mode=0;
76        var $show_explnum=1;
77        var $no_link;
78        var $entrepots_localisations=array();
79        var $docnums;
80       
81// constructeur------------------------------------------------------------
82function mono_display_unimarc($id, $level=1, $expl=1, $print=0, $show_explnum=1, $no_link=false, $entrepots_localisations=array()) {
83        // $id = id de la notice à afficher
84        // $action       = URL associée au header
85        // $level :
86        //              0 : juste le header (titre  / auteur principal avec le lien si applicable)
87        //                      suppression des niveaux entre 1 et 6, seul reste level
88        //              1 : ISBD seul, pas de note, bouton modif, expl, explnum et r�sas
89        //              6 : cas général détaillé avec notes, categ, langues, indexation... + boutons
90        // $expl -> affiche ou non les exemplaires associés
91       
92        $this->notice_id = $id;
93        $this->mono_display_fetch_data();               
94        $this->fetch_auteurs();
95        $this->fetch_categories();
96        $this->level=$level;
97        $this->expl = $expl;
98        $this->entrepots_localisations = $entrepots_localisations;
99
100        // mise à jour des catégories
101        $this->categories = get_notice_categories($this->notice_id) ;
102                               
103        $this->do_header();
104
105        switch($level) {
106                case 0:
107                        // là, c'est le niveau 0 : juste le header
108                        $this->result = $this->header;
109                        break;
110                default:
111                        // niveau 1 et plus : header + isbd à générer
112                        $this->init_javascript();
113                        $this->do_isbd();
114                        $this->finalize();
115                        break;
116                }       
117        return;
118
119}
120
121function fetch_auteurs() {
122        global $fonction_auteur;
123        global $dbh ;
124
125        $this->responsabilites  = array() ;
126        $auteurs = array() ;
127       
128        $res["responsabilites"] = array() ;
129        $res["auteurs"] = array() ;
130       
131        $requete = "SELECT source_id FROM external_count WHERE rid=".addslashes($this->notice_id);
132        $myQuery = pmb_mysql_query($requete);
133        $source_id = pmb_mysql_result($myQuery, 0, 0); 
134       
135        $rqt = "select recid,ufield,field_order,usubfield,subfield_order,value from entrepot_source_$source_id where recid='".addslashes($this->notice_id)."' and ufield like '7%' group by ufield,usubfield,field_order,subfield_order,value order by recid,field_order,subfield_order";
136        $res_sql=pmb_mysql_query($rqt);
137       
138        $id_aut="";
139        $n_aut=-1;
140        while ($l=pmb_mysql_fetch_object($res_sql)) {
141                if ($l->field_order!=$id_aut) {
142                        $n_aut++;
143                        switch ($l->ufield) {
144                                case "700":
145                                case "710":
146                                        $responsabilites[$n_aut]=0;
147                                        break;
148                                case "701":
149                                case "711":
150                                        $responsabilites[$n_aut]=1;
151                                        break;
152                                case "702":
153                                case "712":
154                                        $responsabilites[$n_aut]=2;
155                                        break;
156                        }
157                        switch (substr($l->ufield,0,2)) {
158                                case "70":
159                                        $auteurs[$n_aut]["type"]=1;
160                                        break;
161                                case "71":
162                                        $auteurs[$n_aut]["type"]=2;
163                                        break;
164                        }
165                        $auteurs[$n_aut]["id"]=$l->recid.$l->field_order;
166                        $id_aut=$l->field_order;
167                }
168                switch ($l->usubfield) {
169                        case '4':
170                                $auteurs[$n_aut]['fonction']=$l->value;
171                                $auteurs[$n_aut]['fonction_aff']=$fonction_auteur[$l->value];
172                                break;
173                        case 'a':
174                                $auteurs[$n_aut]['name']=$l->value;
175                                break;
176                        case 'b':
177                                if ($auteurs[$n_aut]['type']==2) {
178                                        $auteurs[$n_aut]['subdivision']=$l->value;
179                                } else {
180                                        $auteurs[$n_aut]['rejete']=$l->value;
181                                }
182                                break;
183                        case 'd':
184                                if ($auteurs[$n_aut]['type']==2) {
185                                        $auteurs[$n_aut]['numero']=$l->value;
186                                }
187                                break;
188                        case 'e':
189                                if ($auteurs[$n_aut]['type']==2) {
190                                        $auteurs[$n_aut]['lieu'].=(($auteurs[$n_aut]['lieu'])?'; ':'').$l->value;
191                                }
192                                break;
193                        case 'f':
194                                $auteurs[$n_aut]['date']=$l->value;
195                                break;
196                        case 'g':
197                                if ($auteurs[$n_aut]['type']==2) {
198                                        $auteurs[$n_aut]['rejete']=$l->value;
199                                }
200                                break;
201                }
202        }
203       
204        foreach($auteurs as $n_aut=>$auteur) {
205                $auteurs[$n_aut]['auteur_titre']=$auteurs[$n_aut]['rejete'].($auteurs[$n_aut]['rejete']?' ':'').$auteurs[$n_aut]['name'];
206                if ($auteur['type']==2 && ($auteurs[$n_aut]['subdivision'] || $auteurs[$n_aut]['numero'] || $auteurs[$n_aut]['date'] || $auteurs[$n_aut]['lieu'])) {
207                        $c='';
208                        $c.=$auteurs[$n_aut]['subdivision'];
209                        $c.=($c && $auteurs[$n_aut]['numero'])?(', '.$auteurs[$n_aut]['numero']):($auteurs[$n_aut]['numero']);
210                        $c.=($c && $auteurs[$n_aut]['date'])?(', '.$auteurs[$n_aut]['date']):($auteurs[$n_aut]['date']);
211                        $c.=($c && $auteurs[$n_aut]['lieu'])?(', '.$auteurs[$n_aut]['lieu']):($auteurs[$n_aut]['lieu']);
212                        $auteurs[$n_aut]['auteur_titre'].=' ('.$c.')';
213                }
214                $auteurs[$n_aut]['auteur_isbd']=$auteurs[$n_aut]['auteur_titre'].($auteurs[$n_aut]['fonction_aff']?' ,':'').$auteurs[$n_aut]['fonction_aff'];
215        }
216       
217        if (!$responsabilites) $responsabilites = array();
218        if (!$auteurs) $auteurs = array();
219        $res["responsabilites"] = $responsabilites ;
220        $res["auteurs"] = $auteurs ;
221        $this->responsabilites = $res;
222       
223        // $this->auteurs_principaux
224        // on ne prend que le auteur_titre = "Prenom NOM"
225        $as = array_search ("0", $this->responsabilites["responsabilites"]) ;
226        if ($as!== FALSE && $as!== NULL) {
227                $auteur_0 = $this->responsabilites["auteurs"][$as] ;
228                $this->auteurs_principaux = $auteur_0["auteur_titre"];
229                } else {
230                        $as = array_keys ($this->responsabilites["responsabilites"], "1" ) ;
231                        $aut1_libelle = array();
232                        for ($i = 0 ; $i < count($as) ; $i++) {
233                                $indice = $as[$i] ;
234                                $auteur_1 = $this->responsabilites["auteurs"][$indice] ;
235                                $aut1_libelle[]= $auteur_1["auteur_titre"];
236                                }
237                        $auteurs_liste = implode ("; ",$aut1_libelle) ;
238                        if ($auteurs_liste) $this->auteurs_principaux = $auteurs_liste ;
239                        }
240       
241        // $this->auteurs_tous
242        $mention_resp = array() ;
243        $as = array_search ("0", $this->responsabilites["responsabilites"]) ;
244        if ($as!== FALSE && $as!== NULL) {
245                $auteur_0 = $this->responsabilites["auteurs"][$as] ;
246                $mention_resp_lib = $auteur_0["auteur_isbd"];
247                $mention_resp[] = $mention_resp_lib ;
248                }
249       
250        $as = array_keys ($this->responsabilites["responsabilites"], "1" ) ;
251        for ($i = 0 ; $i < count($as) ; $i++) {
252                $indice = $as[$i] ;
253                $auteur_1 = $this->responsabilites["auteurs"][$indice] ;
254                $mention_resp_lib = $auteur_1["auteur_isbd"];
255                $mention_resp[] = $mention_resp_lib ;
256                }
257       
258        $as = array_keys ($this->responsabilites["responsabilites"], "2" ) ;
259        for ($i = 0 ; $i < count($as) ; $i++) {
260                $indice = $as[$i] ;
261                $auteur_2 = $this->responsabilites["auteurs"][$indice] ;
262                $mention_resp_lib = $auteur_2["auteur_isbd"];
263                $mention_resp[] = $mention_resp_lib ;
264                }
265       
266        $libelle_mention_resp = implode ("; ",$mention_resp) ;
267        if ($libelle_mention_resp) $this->auteurs_tous = $libelle_mention_resp ;
268                else $this->auteurs_tous ="" ;
269} // fin fetch_auteurs
270
271// récupération des categories ------------------------------------------------------------------
272function fetch_categories() {
273        global $pmb_keyword_sep;
274        $this->categories_toutes="";
275        $requete = "SELECT source_id FROM external_count WHERE rid=".addslashes($this->notice_id);
276        $myQuery = pmb_mysql_query($requete);
277        $source_id = pmb_mysql_result($myQuery, 0, 0); 
278
279        $rqt = "select ufield,field_order,usubfield,subfield_order,value from entrepot_source_$source_id where recid='".addslashes($this->notice_id)."' and ufield like '60%' group by ufield,usubfield,field_order,subfield_order,value order by recid,field_order,subfield_order";
280        $res_sql=pmb_mysql_query($rqt);
281
282        $id_categ="";
283        $n_categ=-1;
284        $categ_l=array();
285        while ($l=pmb_mysql_fetch_object($res_sql)) {
286                if ($l->field_order!=$id_categ) {
287                        if ($n_categ!=-1) {
288                                $categ_libelle=$categ_l["a"].($categ_l["x"]?" - ".implode(" - ",$categ_l["x"]):"").($categ_l["y"]?" - ".implode(" - ",$categ_l["y"]):"").($categ_l["z"]?" - ".implode(" - ",$categ_l["z"]):"");
289                                $this->categories_toutes.=($this->categories_toutes?"<br />":"").$categ_libelle;
290                        }
291                        $categ_l=array();
292                        $n_categ++;
293                        $id_categ=$l->field_order;
294                }
295                $categ_l[$l->usubfield]=$l->value;
296        }
297        if ($n_categ>=0) {
298                $categ_libelle=$categ_l["a"].($categ_l["x"]?" - ".implode(" - ",$categ_l["x"]):"").($categ_l["y"]?" - ".implode(" - ",$categ_l["y"]):"").($categ_l["z"]?" - ".implode(" - ",$categ_l["z"]):"");
299                $this->categories_toutes.=($this->categories_toutes?"<br />":"").$categ_libelle;
300        }
301}
302
303function fetch_langues($quelle_langues=0) {
304        global $dbh;
305
306        global $marc_liste_langues ;
307        if (!$marc_liste_langues) $marc_liste_langues=new marc_list('lang');
308
309        $requete = "SELECT source_id FROM external_count WHERE rid=".addslashes($this->notice_id);
310        $myQuery = pmb_mysql_query($requete);
311        $source_id = pmb_mysql_result($myQuery, 0, 0); 
312
313        $rqt = "select ufield,field_order,usubfield,subfield_order,value from entrepot_source_$source_id where recid='".addslashes($this->notice_id)."' and ufield like '101' group by ufield,usubfield,field_order,subfield_order,value order by recid,field_order,subfield_order";
314        $res_sql=pmb_mysql_query($rqt);
315
316        $langues = array() ;
317
318        $subfield=array("0"=>"a","1"=>"c");
319
320        while ($l=pmb_mysql_fetch_object($res_sql)) {
321                if ($l->usubfield==$subfield[$quelle_langues]) {
322                        if ($marc_liste_langues->table[$l->value]) { 
323                                $langues[] = array( 
324                                        'lang_code' => $l->value,
325                                        'langue' => $marc_liste_langues->table[$l->value]
326                                ) ;
327                        }
328                }
329        }
330       
331        if (!$quelle_langues) $this->langues = $langues;
332                else $this->languesorg = $langues;
333}
334
335// finalisation du résultat (écriture de l'isbd)
336function finalize() {
337        $this->result = str_replace('!!ISBD!!', $this->isbd, $this->result);
338        }
339
340// génération du template javascript---------------------------------------
341function init_javascript() {
342        global $msg, $notice_id;
343       
344        if (isset($notice_id))
345                $notice_id_info = "&notice_id=".$notice_id;
346        else
347                $notice_id_info = "";
348       
349        // propriétés pour le selecteur de panier
350        //$selector_prop = "toolbar=no, dependent=yes, width=500, height=400, resizable=yes, scrollbars=yes";
351        $cart_click = "onClick=\"document.search_form.action='catalog.php?categ=search&mode=7&sub=integre".$notice_id_info."&item=!!id!!'; document.search_form.submit()\"";
352        $suppr_click = "onClick=\"if(confirm('".$msg['confirm_suppr_notice']."')){;document.search_form.action='catalog.php?categ=search&mode=7&sub=suppr".$notice_id_info."&item=!!id!!'; document.search_form.submit()}\"";
353       
354        $javascript_template ="
355                <div id=\"el!!id!!Parent\" class=\"notice-parent\">
356                <img src=\"./images/plus.gif\" class=\"img_plus\" name=\"imEx\" id=\"el!!id!!Img\" title=\"".$msg['admin_param_detail']."\" border=\"0\" onClick=\"expandBase('el!!id!!', true); return false;\" hspace=\"3\">
357                <span class=\"notice-heada\">!!heada!!</span>
358                <br />
359                </div>
360                <div id=\"el!!id!!Child\" class=\"notice-child\" style=\"margin-bottom:6px;display:none;\">
361        <img src='./images/sauv.gif' align='middle' alt='basket' title=\"".$msg["connecteurs_integre"]."\" alt=\"".$msg["connecteurs_integre"]."\" $cart_click>
362                &nbsp;&nbsp;<img src='./images/trash.png' align='middle' alt='basket' title=\"".$msg["connecteurs_suppr"]."\" alt=\"".$msg["connecteurs_suppr"]."\" $suppr_click>
363                         !!ISBD!!
364                </div>";
365               
366        $this->result = str_replace('!!id!!', $this->notice_id.($this->anti_loop?"_p".$this->anti_loop[count($this->anti_loop)-1]:""), $javascript_template);
367        $this->result = str_replace('!!heada!!', $this->lien_suppr_cart.$this->header, $this->result);
368        }
369
370// génération de l'isbd----------------------------------------------------
371function do_isbd() {
372        global $dbh;
373        global $langue_doc;
374        global $msg;
375        global $tdoc;
376        global $fonction_auteur;
377        global $charset;
378        global $thesaurus_mode_pmb, $thesaurus_categories_categ_in_line, $pmb_keyword_sep, $thesaurus_categories_affichage_ordre;
379        global $pmb_show_notice_id,$pmb_opac_url,$pmb_show_permalink;
380       
381       
382        // constitution de la mention de titre
383        if($this->tit_serie) {
384                $this->isbd = $this->tit_serie; 
385                if($this->notice->tnvol)
386                        $this->isbd .= ',&nbsp;'.$this->notice->tnvol;
387        }
388        $this->isbd ? $this->isbd .= '.&nbsp;'.$this->tit1 : $this->isbd = $this->tit1;
389
390        $this->isbd .= ' ['.$tdoc->table[$this->notice->typdoc].']';
391        $tit2 = $this->notice->tit2;
392        $tit3 = $this->notice->tit3;
393        $tit4 = $this->notice->tit4;
394        if($tit3) $this->isbd .= "&nbsp;= $tit3";
395        if($tit4) $this->isbd .= "&nbsp;: $tit4";
396        if($tit2) $this->isbd .= "&nbsp;; $tit2";
397       
398        $mention_resp = array() ;
399       
400        // constitution de la mention de responsabilité
401        //$this->responsabilites
402        $as = array_search ("0", $this->responsabilites["responsabilites"]) ;
403        if ($as!== FALSE && $as!== NULL) {
404                $auteur_0 = $this->responsabilites["auteurs"][$as] ;
405                $mention_resp_lib=$auteur_0["auteur_titre"];
406                if ($auteur_0["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_0["fonction"]];
407                $mention_resp[] = $mention_resp_lib ;
408        }
409       
410        $as = array_keys ($this->responsabilites["responsabilites"], "1" ) ;
411        for ($i = 0 ; $i < count($as) ; $i++) {
412                $indice = $as[$i] ;
413                $auteur_1 = $this->responsabilites["auteurs"][$indice] ;
414                $mention_resp_lib=$auteur_1["auteur_titre"];
415                if ($auteur_1["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_1["fonction"]];
416                $mention_resp[] = $mention_resp_lib ;
417        }
418       
419        $as = array_keys ($this->responsabilites["responsabilites"], "2" ) ;
420        for ($i = 0 ; $i < count($as) ; $i++) {
421                $indice = $as[$i] ;
422                $auteur_2 = $this->responsabilites["auteurs"][$indice] ;
423                $mention_resp_lib=$auteur_2["auteur_titre"];
424                if ($auteur_2["fonction"]) $mention_resp_lib .= ", ".$fonction_auteur[$auteur_2["fonction"]];
425                $mention_resp[] = $mention_resp_lib ;
426        }
427               
428        $libelle_mention_resp = implode ("; ",$mention_resp) ;
429        if($libelle_mention_resp) $this->isbd .= "&nbsp;/ $libelle_mention_resp" ;
430
431        // mention d'édition
432        if($this->notice->mention_edition) $this->isbd .= ".&nbsp;-&nbsp;".$this->notice->mention_edition;
433       
434        // zone de l'adresse
435        // on récupère la collection au passage, si besoin est
436        if ($this->collections) {
437                $collections = $this->collections[0]["name"];
438        }
439        $editeurs=array();
440        for ($i=0; $i<count($this->publishers); $i++) {
441                $editeurs[]=$this->publishers[$i]["name"].($this->publishers[$i]["city"]?" (".$this->publishers[$i]["city"].")":"");
442        }
443        $editeurs=implode("&nbsp;; ",$editeurs);
444       
445        if($this->notice->year) 
446                $editeurs ? $editeurs .= ', '.$this->notice->year : $editeurs = $this->notice->year;
447        else 
448                $editeurs ? $editeurs .= ', [s.d.]' : $editeurs = "[s.d.]";
449
450        $this->isbd .= ".&nbsp;-&nbsp;$editeurs";
451       
452        // zone de la collation (ne concerne que a2)
453        if($this->notice->npages)
454                $collation = $this->notice->npages;
455        if($this->notice->ill)
456                $collation .= ': '.$this->notice->ill;
457        if($this->notice->size)
458                $collation .= '; '.$this->notice->size;
459        if($this->notice->accomp)
460                $collation .= '+ '.$this->notice->accomp;
461               
462        if($collation)
463                $this->isbd .= ".&nbsp;-&nbsp;$collation";
464       
465       
466        if($collections) {
467                if($this->notice->nocoll)
468                        $collections .= '; '.$this->notice->nocoll;
469                $this->isbd .= ".&nbsp;-&nbsp;($collections)".' ';
470        }
471
472        $this->isbd .= '.';
473               
474        // note générale
475        if($this->notice->n_gen)
476                $zoneNote = nl2br(htmlentities($this->notice->n_gen,ENT_QUOTES, $charset)).' ';
477               
478        // ISBN ou NO. commercial
479        if($this->notice->code) {
480                if(isISBN($this->notice->code)) {
481                        if ($zoneNote) { $zoneNote .= '.&nbsp;-&nbsp;ISBN '; } else { $zoneNote = 'ISBN ';}
482                        } else {
483                                if($zoneNote) $zoneNote .= '.&nbsp;-&nbsp;';
484                                }
485                $zoneNote .= $this->notice->code;
486                }
487        if($this->notice->prix) {
488                if($this->notice->code) {$zoneNote .= '&nbsp;: '.$this->notice->prix;}
489                        else { 
490                                if ($zoneNote)  { $zoneNote .= '&nbsp; '.$this->notice->prix;}
491                                        else    { $zoneNote = $this->notice->prix;}
492                                }
493                }
494
495        if($zoneNote)
496                $this->isbd .= "<br /><br />$zoneNote.";
497       
498        if($pmb_show_notice_id || $pmb_show_permalink) $this->isbd .= "<br />";
499        if($pmb_show_notice_id){
500        $prefixe = explode(",",$pmb_show_notice_id);
501                $this->isbd .= "<b>".$msg['notice_id_libelle']."&nbsp;</b>".($prefixe[1] ? $prefixe[1] : '').$this->notice_id."<br />";
502        }
503        // Permalink OPAC
504        if ($pmb_show_permalink) {
505                $this->isbd .= "<b>".$msg["notice_permalink_opac"]."&nbsp;</b><a href='".$pmb_opac_url."index.php?lvl=notice_display&id=".$this->notice_id."' target=\"__LINK__\">".$pmb_opac_url."index.php?lvl=notice_display&id=".$this->notice_id."</a><br />";
506        }
507        // niveau 1
508        if($this->level == 1) {
509                $this->isbd .= "<!-- !!bouton_modif!! -->";
510                if ($this->expl) {
511                        $this->isbd .= "<br /><b>${msg[285]}</b>";
512                        $this->isbd .= $this->show_expl_per_notice($this->notice->notice_id, $this->link_expl);
513                        //if ($this->show_explnum) {
514                        //      $explnum_assoc = show_explnum_per_notice($this->notice->notice_id, 0,$this->link_explnum);
515                        //      if ($explnum_assoc) $this->isbd .= "<b>$msg[explnum_docs_associes]</b>".$explnum_assoc;
516                        //      }
517                        }
518                $this->do_image($this->isbd) ;
519                return;
520        }                       
521
522        // résumé
523        if($this->notice->n_resume)
524                // $this->isbd .= "<br /><b>${msg[267]}</b>&nbsp;: ".nl2br(htmlentities($this->notice->n_resume,ENT_QUOTES, $charset));
525                $this->isbd .= "<br /><b>${msg[267]}</b>&nbsp;: ".nl2br($this->notice->n_resume);
526
527        // note de contenu
528        if($this->notice->n_contenu) 
529                // $this->isbd .= "<br /><b>${msg[266]}</b>&nbsp;: ".nl2br(htmlentities($this->notice->n_contenu,ENT_QUOTES, $charset));
530                $this->isbd .= "<br /><b>${msg[266]}</b>&nbsp;: ".nl2br($this->notice->n_contenu);
531
532        // catégories
533        if ($this->categories_toutes) $this->isbd .= "<br /><b>${msg[23]}</b>&nbsp;: ".$this->categories_toutes;
534       
535        // langues
536        if(count($this->langues)) {
537                $langues = "<b>${msg[537]}</b>&nbsp;: ".construit_liste_langues($this->langues);
538                }
539        if(count($this->languesorg)) {
540                $langues .= " <b>${msg[711]}</b>&nbsp;: ".construit_liste_langues($this->languesorg);
541                }
542        if($langues)
543                $this->isbd .= "<br />$langues";
544                       
545        // indexation libre
546        if($this->notice->index_l)
547                $this->isbd .= "<br /><b>${msg[324]}</b>&nbsp;: ".$this->notice->index_l;
548       
549        // indexation interne
550        if($this->notice->indexint_name) {
551                $this->isbd .= "<br /><b>${msg[indexint_catal_title]}</b>&nbsp;: ".$this->notice->indexint_name;
552        }
553       
554        //lien vers la notice déjà existante dans le catalogue
555        if($this->permalink){
556                $this->isbd.="<br /><b>".$msg['catalog_link']."</b>&nbsp;: <a target='_blank' href='".$this->permalink."'>".$this->permalink."</a>";
557        }
558       
559        if ($this->docnums) {
560                $this->isbd .= "<br /><br />";
561                $this->isbd .= "<b>".$msg["entrepot_notice_docnum"]."</b>";
562                $nb_doc = 0;
563                $display .= "<table>
564                                                <tbody>";
565                $i=0;
566                foreach($this->docnums as $docnum) {
567                        if (!$docnum["a"])
568                                continue;
569                        $i++;
570                        $nb_doc++;
571                        if($nb_doc == 1) $display .= "<tr>";
572                        //$alt = htmlentities($docnum_tab[$i]['explnum_doc_nomfichier'],ENT_QUOTES,$charset).' - '.htmlentities($docnum_tab[$i]['explnum_doc_mimetype'],ENT_QUOTES,$charset);
573                        $display .= 
574                                "<td class='docnum' style='width:25%;border:0px solid #CCCCCC;padding : 5px 5px'>
575                                        <a target='_blank' alt='$alt' title='$alt' href=\"".htmlentities($docnum["a"],ENT_QUOTES,$charset)."\">
576                                                <img src='./images/mimetype/unknown.gif' alt='$alt' title='$alt' >
577                                        </a>
578                                        <br />";
579                        if($docnum["b"]){                       
580                                $display .= 
581                                        "<a href=\"".htmlentities($docnum["a"],ENT_QUOTES,$charset)."\">".htmlentities($docnum["b"],ENT_QUOTES,$charset)."</a>                                 
582                                </td>";
583                        }       
584                        if($nb_doc == 4) {
585                                $display .= "</tr>";
586                                $nb_doc=0;
587                        }
588                }
589                $display .= "</tbody></table>";
590                $this->isbd .=$display;
591        }
592
593        $this->do_image($this->isbd) ;
594        if($this->expl) {
595                $expl_aff = $this->show_expl_per_notice();
596                if ($expl_aff) {
597                        $this->isbd .= "<br /><br /><b>${msg[285]}</b>";
598                        $this->isbd .= $expl_aff;
599                } 
600        }
601        $this->isbd .= "<!-- !!bouton_modif!! -->";
602        //if ($this->show_explnum) {
603        //      $explnum_assoc = show_explnum_per_notice($this->notice->notice_id, 0, $this->link_explnum);
604        //      if ($explnum_assoc) $this->isbd .= "<b>$msg[explnum_docs_associes]</b>".$explnum_assoc;
605        //}
606        return;
607}       
608
609// génération du header----------------------------------------------------
610function do_header() {
611       
612        global $dbh;
613        global $charset;
614        global $pmb_notice_reduit_format;
615        global $base_path;
616        global $msg;
617       
618        $aut1_libelle = array() ;
619        // récupération du titre de série
620        if($this->notice->is_article){
621                $this->header = $this->notice->serie_name;
622                if($this->notice->bull_num && $this->notice->bull_periode){
623                        $this->header.= " (".$this->notice->bull_num." - ".$this->notice->bull_periode.")";
624                }elseif($this->notice->bull_num){
625                        $this->header.= " (".$this->notice->bull_num.")";
626                }elseif($this->notice->bull_periode){
627                        $this->header.= " (".$this->notice->bull_periode.")";
628                }
629        }elseif($this->notice->serie_name) {   
630                $this->tit_serie = $this->notice->serie_name;
631                $this->header = $this->tit_serie;
632                if($this->notice->tnvol)
633                        $this->header .= ',&nbsp;'.$this->notice->tnvol;
634        }
635       
636        $this->tit1 = $this->notice->tit1;             
637        $this->header ? $this->header .= '.&nbsp;'.$this->tit1 : $this->header = $this->tit1;
638       
639        if ($this->source_name) {
640                $this->header=$this->source_name." : ".$this->header;
641        }
642       
643        //on ajoute la checkbox pour l'intégration en lot...
644        //calcul de la checkbox
645        $checkbox = "<input type='checkbox' name='external_notice_to_integer[]' value='".$this->notice_id."'";
646       
647        //on commence par regarder si cette notice n'a pas déjà été intégrér
648        $query = "select rid from notices_externes join external_count on external_count.recid = notices_externes.recid where rid=".$this->notice_id;
649        $result = pmb_mysql_query($query);
650        if(pmb_mysql_num_rows($result)){
651                $checkbox.=" checked='checked' disabled='disabled'";
652        }
653        $checkbox.= "/>";
654        //ajout dans le header;
655        $this->header = $checkbox."&nbsp;".$this->header;
656       
657        //$this->responsabilites
658        $as = array_search ("0", $this->responsabilites["responsabilites"]) ;
659        if ($as!== FALSE && $as!== NULL) {
660                $auteur_0 = $this->responsabilites["auteurs"][$as] ;
661                //$auteur = new auteur($auteur_0["id"]);
662                if ($auteur_0["auteur_isbd"]) $this->header .= ' / '. $auteur_0["auteur_titre"];
663        } else {
664                $as = array_keys ($this->responsabilites["responsabilites"], "1" ) ;
665                for ($i = 0 ; $i < count($as) ; $i++) {
666                        $indice = $as[$i] ;
667                        $auteur_1 = $this->responsabilites["auteurs"][$indice] ;
668                        $aut1_libelle[]= $auteur_1["auteur_titre"];
669                }
670                $auteurs_liste = implode ("; ",$aut1_libelle) ;
671                if ($auteurs_liste) $this->header .= ' / '. $auteurs_liste ;
672        }
673       
674        switch ($pmb_notice_reduit_format) {
675                case "1":
676                        if ($this->notice->year != '') $this->header.=' ('.htmlentities($this->notice->year, ENT_QUOTES, $charset).')';
677                        break;
678                case "2":
679                        if ($this->notice->year != '') $this->header.=' ('.htmlentities($this->notice->year, ENT_QUOTES, $charset).')';
680                        if ($this->notice->code != '') $this->header.=' / '.htmlentities($this->notice->code, ENT_QUOTES, $charset);
681                        break;
682                default : 
683                        break;
684        }
685        if ($this->drag)
686                $drag="<span id=\"NOTI_drag_".$this->notice_id.($this->anti_loop?"_p".$this->anti_loop[count($this->anti_loop)-1]:"")."\"  dragicon=\"$base_path/images/icone_drag_notice.png\" dragtext=\"".$this->header."\" draggable=\"yes\" dragtype=\"notice\" callback_before=\"show_carts\" callback_after=\"\" style=\"padding-left:7px\"><img src=\"".$base_path."/images/notice_drag.png\"/></span>";
687        if($this->action) {
688                $this->header = "<a href=\"".$this->action."\">".$this->header.'</a>';
689        }
690        if ($this->notice->niveau_biblio=='b') {
691                $rqt="select tit1 from bulletins,notices where bulletins.num_notice='".$this->notice_id."' and notices.notice_id=bulletins.bulletin_notice";
692                $execute_query=pmb_mysql_query($rqt);
693                $row=pmb_mysql_fetch_object($execute_query);
694                $this->header.=" <i>".str_replace("%s",$row->tit1,$msg["bul_titre_perio"])."</i>";
695                pmb_mysql_free_result($execute_query);
696        }
697
698
699
700        if($this->notice->lien) {
701                // ajout du lien pour les ressourcenotice_parent_useds électroniques
702                $this->header .= "<a href=\"".$this->notice->lien."\" target=\"__LINK__\">";
703                global $use_opac_url_base, $opac_url_base ;
704                if (!$use_opac_url_base) $this->header .= "<img src=\"./images/globe.gif\" border=\"0\" align=\"middle\" hspace=\"3\"";
705                        else $this->header .= "<img src=\"".$opac_url_base."images/globe.gif\" border=\"0\" align=\"middle\" hspace=\"3\"";
706                $this->header .= " alt=\"";
707                $this->header .= $this->notice->eformat;
708                $this->header .= "\" title=\"";
709                $this->header .= $this->notice->eformat;
710                $this->header .= "\">";
711                $this->header .='</a>';
712        }
713}
714 
715// récupération des valeurs en table---------------------------------------
716function mono_display_fetch_data() {
717        global $dbh;
718        global $pmb_url_base;
719       
720        $requete = "SELECT source_id FROM external_count WHERE rid=".addslashes($this->notice_id);
721        $myQuery = pmb_mysql_query($requete, $dbh);
722        $source_id = pmb_mysql_result($myQuery, 0, 0);
723
724        $requete="select * from entrepot_source_".$source_id." where recid='".addslashes($this->notice_id)."' order by ufield,field_order,usubfield,subfield_order,value";
725        $myQuery = pmb_mysql_query($requete, $dbh);
726       
727        $notice="";
728        $lpfo="";
729        $n_ed=-1;
730        $n_coll=-1;
731        $exemplaires = array();
732        $doc_nums = array();
733       
734        if(pmb_mysql_num_rows($myQuery)) {
735                $notice = new stdClass();
736                $notice->notice_id=$this->notice_id;
737                while ($l=pmb_mysql_fetch_object($myQuery)) {
738                        if (!$this->source_id) {
739                                $this->source_id=$l->source_id;
740                                $requete="select name from connectors_sources where source_id=".$l->source_id;
741                                $rsname=pmb_mysql_query($requete);
742                                if (pmb_mysql_num_rows($rsname)) $this->source_name=pmb_mysql_result($rsname,0,0);
743                        }
744                        $this->unimarc[$l->ufield][$l->field_order][$l->usubfield][$l->subfield_order];
745                        switch ($l->ufield) {
746                                //dt
747                                case "dt":
748                                        $notice->typdoc=$l->value;
749                                        break;
750                                case "bl":
751//                                      $notice->niveau_biblio=$l->value;
752                                        $notice->niveau_biblio='m'; //On force le document au type monographie
753                                        break;
754                                case "hl":
755                                        $notice->niveau_hierar=0; //On force le niveau à zéro.
756//                                      $notice->niveau_hierar=$l->value;
757                                        break;
758                                //ISBN
759                                case "010":
760                                        if ($l->usubfield=="a") $notice->code=$l->value;
761                                        break;
762                                //Titres
763                                case "200":
764                                        switch ($l->usubfield) {
765                                                case "a":
766                                                        $notice->tit1.=($notice->tit1?" ":"").$l->value;
767                                                        break;
768                                                case "c":
769                                                        $notice->tit2.=($notice->tit2?" ":"").$l->value;
770                                                        break;
771                                                case "d":
772                                                        $notice->tit3.=($notice->tit3?" ":"").$l->value;
773                                                        break;
774                                                case "e":
775                                                        $notice->tit4.=($notice->tit4?" ":"").$l->value;
776                                                        break;
777                                        }
778                                        break;
779                                //Editeur
780                                case "210":
781                                        if($l->field_order!=$lpfo) {
782                                                $lpfo=$l->field_order;
783                                                $n_ed++;
784                                        }
785                                        switch ($l->usubfield) {
786                                                case "a":
787                                                        $this->publishers[$n_ed]["city"]=$l->value;
788                                                        break;
789                                                case "c":
790                                                        $this->publishers[$n_ed]["name"]=$l->value;
791                                                        break;
792                                                case "d":
793                                                        $this->publishers[$n_ed]["year"]=$l->value;
794                                                        $this->year=$l->value;
795                                                        $notice->year=$l->value;
796                                                        break;
797                                        }
798                                        break;
799                                //Collation
800                                case "215":
801                                        switch ($l->usubfield) {
802                                                case "a":
803                                                        $notice->npages=$l->value;
804                                                        break;
805                                                case "c":
806                                                        $notice->ill=$l->value;
807                                                        break;
808                                                case "d":
809                                                        $notice->size=$l->value;
810                                                        break;
811                                                case "e":
812                                                        $notice->accomp=$l->value;
813                                                        break;
814                                        }
815                                        break;
816                                case "225":
817                                        if($l->field_order!=$lpfo) {
818                                                $lpfo=$l->field_order;
819                                                $n_coll++;
820                                        }
821                                        switch ($l->usubfield) {
822                                                case "a":
823                                                        $this->collections[$n_coll]["name"]=$l->value;
824                                                        break;
825                                                case "x":
826                                                        $this->collections[$n_coll]["ISSN"]=$l->value;
827                                                        break;
828                                                case "i":
829                                                        $this->collections[$n_coll]["subcoll_name"]=$l->value;
830                                                        break;
831                                                case "v":
832                                                        $this->collections[$n_coll]["volume"]=$l->value;
833                                                        $notice->nocoll=$l->value;
834                                                        break;
835                                        }
836                                //Note générale
837                                case "300":
838                                        $notice->n_gen=$l->value;
839                                        break;
840                                //Note de contenu
841                                case "327":
842                                        $notice->n_contenu=$l->value;
843                                        break;
844                                //Note de résumé
845                                case "330":
846                                        $notice->n_resume=$l->value;
847                                        break;
848                                //Série
849                                case "461":
850                                        if ($l->usubfield=="t") $notice->serie_name=$l->value;
851                                        if ($l->usubfield=="v") $notice->tnvol=$l->value;
852                                        break;
853                                //bulletin
854                                case "463":
855                                        if ($l->usubfield=="9" && $l->value == "lnk:bull") $notice->is_article=true;
856                                        if ($l->usubfield=="v") $notice->bull_num=$l->value;
857                                        if ($l->usubfield=="e") $notice->bull_periode=$l->value;
858                                        if ($l->usubfield=="d") $notice->bull_date=$l->value;
859                                        if ($l->usubfield=="t") $notice->bull_titre=$l->value;
860                                        break;
861                                //Mots clés
862                                case "610":
863                                        switch ($l->usubfield) {
864                                                case "a":
865                                                        $notice->index_l.=($notice->index_l?" / ":"").$l->value;
866                                                        break;
867                                        }
868                                        break;
869                                case "676":
870                                        switch ($l->usubfield) {
871                                                case "a":
872                                                        $notice->indexint_name=$l->value;
873                                                        break;
874                                        }
875                                //URL
876                                case "856":
877                                        switch ($l->usubfield) {
878                                                case "u":
879                                                        $notice->lien=$l->value;
880                                                        break;
881                                                case "q":
882                                                        $notice->eformat=$l->value;
883                                                        break;
884                                                case "t":
885                                                        $notice->lien_texte=$l->value;
886                                                        break;
887                                        }
888                                        break;
889                                case "996":
890                                        $exemplaires[$l->field_order][$l->usubfield] = $l->value; 
891                                        break;
892                                //Thumbnail
893                                case "896":
894                                        switch ($l->usubfield) {
895                                                case "a":
896                                                        $notice->thumbnail_url=$l->value;
897                                        }
898                                        break;
899                                //Documents numériques
900                                case "897":
901                                        $doc_nums[$l->field_order][$l->usubfield] = $l->value;
902                                        break;
903                        }
904                }
905        }
906        $this->exemplaires = $exemplaires;
907        $this->docnums = $doc_nums;
908        $this->notice=$notice;
909        if (!$this->notice->typdoc) $this->notice->typdoc='a';
910       
911/*      $requete = "SELECT * FROM notices WHERE notice_id='".$this->notice_id."' ";
912        $myQuery = pmb_mysql_query($requete, $dbh);
913        if(pmb_mysql_num_rows($myQuery)) {
914                $this->notice = pmb_mysql_fetch_object($myQuery);
915                }
916        $this->langues  = get_notice_langues($this->notice_id, 0) ;     // langues de la publication
917        $this->languesorg       = get_notice_langues($this->notice_id, 1) ; // langues originales*/
918       
919        //on regarde si cette notice externe a déjà été intégrée dans le catalogue
920        $req = "select num_notice, niveau_biblio from external_count join notices_externes on external_count.recid = notices_externes.recid join notices on num_notice = notice_id where rid='".addslashes($this->notice_id)."'";
921        $result = pmb_mysql_query($req);
922        if(pmb_mysql_num_rows($result)>0){
923                $row = pmb_mysql_fetch_object($result);
924                $this->permalink = "";
925                switch($row->niveau_biblio){
926                        case "m":
927                                $this->permalink = $pmb_url_base."catalog.php?categ=isbd&id=".$row->num_notice;
928                                break;
929                        case "s" :
930                                $this->permalink = $pmb_url_base."catalog.php?categ=serials&sub=view=serial_id=".$row->num_notice;
931                                break;
932                        case "b" :
933                                //on va chercher le numéro de bulletin...
934                                $query = "select bulletin_id from bulletins where num_notice = ".$row->num_notice;
935                                $res = pmb_mysql_query($query);
936                                if(pmb_mysql_num_rows($res)){
937                                        $bull_row = pmb_mysql_fetch_object($res);
938                                        $this->permalink = $pmb_url_base."catalog.php?categ=serials&sub=view&bul_id=".$bull_row->bulletin_id;
939                                }
940                                break;
941                        case "a" :
942                                $query = "select analysis_bulletin from analysis where analysis_notice = ".$row->num_notice;
943                                $res = pmb_mysql_query($query);
944                                if(pmb_mysql_num_rows($res)){
945                                        $analysis_row = pmb_mysql_fetch_object($res);
946                                        $this->permalink = $pmb_url_base."catalog.php?categ=serials&sub=bulletinage&action=view&bul_id=".$analysis_row->analysis_bulletin."&art_to_show=".$row->num_notice;
947                                }
948                                break;
949                }
950        }
951
952        $this->isbn = $this->notice->code ; 
953        return pmb_mysql_num_rows($myQuery);
954}
955
956// fonction retournant les infos d'exemplaires pour une notice donnée
957function show_expl_per_notice() {
958        global $msg;
959        global $dbh;
960       
961        if (!$this->exemplaires)
962                return;
963       
964        $expl_output = "<table border='0' class='expl-list'>";
965        $count = 1;
966       
967        $expl996 = array(
968                "f" => $msg["extexpl_codebar"],
969                "k" => $msg["extexpl_cote"],
970                "v" => $msg["extexpl_location"],
971                "x" => $msg["extexpl_section"],
972                "1" => $msg["extexpl_statut"],
973                "a" => $msg["extexpl_emprunteur"],
974                "e" => $msg["extexpl_doctype"],
975                "u" => $msg["extexpl_note"]
976        );
977       
978        $final_location = array();
979        foreach ($this->exemplaires as $expl) {
980                $alocation = array();
981                //Si on trouve une localisation, on la convertie en libelle et on l'oublie si spécifié
982                if (isset($expl["v"]) && preg_match("/\d{9}/", $expl["v"]) && $this->entrepots_localisations) {
983                        if (isset($this->entrepots_localisations[$expl["v"]])) {
984                                if (!$this->entrepots_localisations[$expl["v"]]["visible"]) {
985                                        continue;
986                                }
987                                $alocation["priority"] = $this->entrepots_localisations[$expl["v"]]["visible"];
988
989                                $expl["v"] = $this->entrepots_localisations[$expl["v"]]["libelle"];
990                        }
991                }
992                if (!isset($alocation["priority"]))
993                        $alocation["priority"] = 1;
994                $alocation["content"] = $expl;                 
995                $final_location[] = $alocation;
996        }
997
998        if (!$final_location)
999                return;
1000
1001        $expl_output .= "<tr>";
1002        foreach ($expl996 as $caption996) {
1003                $expl_output .= "<th>".$caption996."</th>";
1004        }
1005        $expl_output .= "</tr>";
1006
1007        //trions
1008        usort($final_location, "cmpexpl");
1009
1010        foreach ($final_location as $expl) {
1011                $axepl_output = "<tr>";
1012                foreach ($expl996 as $key996 => $caption996) {
1013                        if (isset($expl["content"][$key996])) {
1014                                $axepl_output .= "<td>".$expl["content"][$key996]."</td>";                             
1015                        }
1016                        else {
1017                                $axepl_output .= "<td></td>";                           
1018                        }
1019                }
1020                $axepl_output .= "</tr>";
1021                $expl_output .= $axepl_output;
1022                $count++;
1023        }
1024        $expl_output .= "</table>";
1025       
1026        return $expl_output;
1027       
1028}
1029       
1030
1031function do_image(&$entree) {
1032        global $charset;
1033        global $pmb_book_pics_show ;
1034        global $pmb_book_pics_url ;
1035        global $pmb_book_pics_msg;
1036        // pour url OPAC en diff DSI
1037        global $prefix_url_image ;
1038       
1039        global $depliable ;
1040       
1041        if ($depliable!==0) $depliable=1 ;
1042       
1043        if ($this->notice->code || $this->notice->thumbnail_url) {
1044                if ($pmb_book_pics_show=='1' && ($pmb_book_pics_url || $this->notice->thumbnail_url)) {
1045                        $code_chiffre = pmb_preg_replace('/-|\.| /', '', $this->notice->code);
1046                        $url_image = $pmb_book_pics_url ;
1047                        $url_image = $prefix_url_image."getimage.php?url_image=".urlencode($url_image)."&noticecode=!!noticecode!!&vigurl=".urlencode($this->notice->thumbnail_url) ;
1048                        if ($depliable) $image = "<img id='PMBimagecover".$this->notice_id."' src='".$prefix_url_image."images/vide.png' align='right' hspace='4' vspace='2' isbn='".$code_chiffre."' url_image='".$url_image."'>";
1049                                else {
1050                                        $url_image_ok = str_replace("!!noticecode!!", $code_chiffre, $url_image) ;
1051                                        if ($this->notice->thumbnail_url) {
1052                                                $title_image_ok = "";
1053                                        } else {
1054                                                $title_image_ok = htmlentities($pmb_book_pics_msg, ENT_QUOTES, $charset);
1055                                        }
1056                                        $image = "<img src='".$url_image_ok."' title=\"".$title_image_ok."\" align='right' hspace='4' vspace='2'>";
1057                                        }
1058                        } else $image="" ;
1059                if ($image) {
1060                        $entree = "<table width='100%'><tr><td valign=top>$entree</td><td valign=top align=right>$image</td></tr></table>" ;
1061                        } else {
1062                                $entree = "<table width='100%'><tr><td valign=top>$entree</td></tr></table>" ;
1063                                }
1064                       
1065                } else {
1066                        $entree = "<table width='100%'><tr><td valign=top>$entree</td></tr></table>" ;
1067                        }
1068        }
1069
1070}
Note: See TracBrowser for help on using the repository browser.