source: pmb4.2/trunk/fuentes/pmb/classes/mono_display_expl.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: 16.7 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_expl.class.php,v 1.9 2015-04-16 11:39:22 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("$class_path/transfert.class.php");
20require_once($include_path."/notice_authors.inc.php");
21require_once($include_path."/notice_categories.inc.php");
22require_once($include_path."/explnum.inc.php");
23require_once($include_path."/isbn.inc.php");
24require_once($include_path."/resa_func.inc.php");
25require_once($class_path."/mono_display.class.php");
26require_once($class_path."/serial_display.class.php");
27require_once($include_path."/templates/expl.tpl.php");
28
29if (!sizeof($tdoc)) $tdoc = new marc_list('doctype');
30if (!count($fonction_auteur)) {
31        $fonction_auteur = new marc_list('function');
32        $fonction_auteur = $fonction_auteur->table;
33}
34if (!count($langue_doc)) {
35        $langue_doc = new marc_list('lang');
36        $langue_doc = $langue_doc->table;
37}
38// propriétés pour le selecteur de panier
39$selector_prop = "toolbar=no, dependent=yes, resizable=yes, scrollbars=yes";
40$cart_click = "onClick=\"openPopUp('./cart.php?object_type=NOTI&item=!!id!!&unq=!!unique!!', 'cart', 600, 700, -2, -2, '$selector_prop')\"";
41
42
43// définition de la classe d'affichage des monographies en liste
44class mono_display_expl {
45        var $notice_id          = 0;    // id de la notice à afficher
46        var $isbn               = 0;    // isbn ou code EAN de la notice à afficher
47        var $notice;                    // objet notice (tel que fetché dans la table 'notices'
48        var $langues = array();
49        var $languesorg = array();
50        var $action             = '';   // URL à associer au header
51        var $header             = '';   // chaine accueillant le chapeau de notice (peut-être cliquable)
52        var $tit_serie          = '';   // titre de série si applicable
53        var $tit1               = '';   // valeur du titre 1
54        var $result             = '';   // affichage final
55        var $level              = 1;    // niveau d'affichage
56        var $isbd               = '';   // isbd de la notice en fonction du level défini
57        var $expl               = 0;    // flag indiquant si on affiche les infos d'exemplaire
58        var $nb_expl    = 0;    //nombre d'exemplaires
59        var $link_expl          = '';   // lien associé à un exemplaire
60        var $responsabilites =  array("responsabilites" => array(),"auteurs" => array());  // les auteurs
61        var $categories =       array();// les categories
62        var $show_resa          = 0;    // flag indiquant si on affiche les infos de resa
63        var $p_perso;
64        var $print_mode=0;
65        var $show_explnum=1;
66        var $show_statut=0;
67        var $aff_statut = '' ; // carré de couleur pour signaler le statut de la notice
68        var $tit_serie_lien_gestion ;
69        var $childs=array(); //Filles de la notice
70        var $anti_loop="";
71        var $drag=""; //Notice draggable ?
72        var $no_link;
73        var $show_opac_hidden_fields=true;
74// constructeur------------------------------------------------------------
75function mono_display_expl($cb,$expl_id, $level=1, $action='', $expl=1, $expl_link='', $lien_suppr_cart="", $explnum_link='', $show_resa=0, $print=0, $show_explnum=1, $no_link=true,$ajax_mode=0 ) {
76        // $id = id de la notice à afficher
77        // $action       = URL associée au header
78        // $level :
79        //              0 : juste le header (titre  / auteur principal avec le lien si applicable)
80        //                      suppression des niveaux entre 1 et 6, seul reste level
81        //              1 : ISBD seul, pas de note, bouton modif, expl, explnum et résas
82        //              6 : cas général détaillé avec notes, categ, langues, indexation... + boutons
83        // $expl -> affiche ou non les exemplaires associés
84        // $expl_link -> lien associé à l'exemplaire avec !!expl_id!!, !!notice_id!! et !!expl_cb!! à mettre à jour
85        // $lien_suppr_cart -> lien de suppression de la notice d'un caddie
86        //
87        // $show_resa = affichage des resa ou pas
88        global $pmb_recherche_ajax_mode;
89        global $explr_visible_mod,$pmb_droits_explr_localises;
90       
91        $this->expl_data = $this->get_expl_info($cb,$expl_id);
92        $this->notice_id = $this->expl_data->expl_notice;
93        $this->id_bulletin = $this->expl_data->expl_bulletin;
94       
95        if($this->id_bulletin) {
96                $req="select num_notice from bulletins where bulletin_id=".$this->id_bulletin;
97                $result = pmb_mysql_query($req);
98                if(pmb_mysql_num_rows($result)) {
99                        $res = pmb_mysql_fetch_object($result);
100                        $this->num_notice = $res->num_notice;
101                }       
102        }
103        $this->header=$this->expl_titre_diplay()." / ";                 
104        $this->isbd=$this->expl_info_display();
105        // notice de monographie
106        if($this->notice_id) {
107                $display = new mono_display($this->notice_id,$level, "", $expl, $expl_link, '', $explnum_link,1, 0, 1, 0, "", 1   , $no_link,true,0);
108                $link_notice = str_replace("!!id!!", $this->notice_id, $action );
109        }
110        // notice de bulletin
111        if($this->num_notice) {
112                $display = new mono_display($this->num_notice, $level, "", $expl, $expl_link, '', $explnum_link,1, 0, 1, 0, "", 1   , $no_link,true,0);
113                $link_notice = str_replace("!!id!!", $this->id_bulletin, $action );                     
114        }       
115        // bulletin sans notice
116        if(!$this->num_notice && $this->id_bulletin) {
117                $display = new bulletinage_display($this->id_bulletin);
118                $link_notice = str_replace("!!id!!", $this->id_bulletin, $action );     
119        }
120       
121       
122               
123        $this->header.= $display->header;
124        $this->isbd.= "<a href='$link_notice'>".$display->header."</a>";
125        $this->isbd.= $display->isbd;
126
127        //visibilité des exemplaires
128        if ($pmb_droits_explr_localises) {
129                $explr_tab_modif=explode(",",$explr_visible_mod);
130                $as_modif = array_search($this->expl_data->idlocation,$explr_tab_modif);
131        } else {
132                $as_modif = true;
133        }
134        if (($expl_link) && ($as_modif!== FALSE && $as_modif!== NULL) ) {
135                $expl_link = str_replace("!!notice_id!!", $this->notice_id, $expl_link );
136                $expl_link = str_replace("!!expl_cb!!", $cb, $expl_link );
137                $expl_link = str_replace("!!expl_id!!", $expl_id, $expl_link );
138                $expl_link = str_replace("!!bulletin_id!!", $this->id_bulletin, $expl_link );
139               
140                $this->header= "<a href='".$expl_link."'>".$this->header."</a>";
141        }
142       
143        switch($level) {
144        case 0:
145                // là, c'est le niveau 0 : juste le header
146                $this->result = $this->header;
147                break;
148        default:
149                // niveau 1 et plus : header + isbd à générer
150                $this->init_javascript();
151                $this->finalize();
152                break;
153        }       
154        return;
155}
156
157function expl_titre_diplay() {
158        global $charset;
159        global $msg;
160        global $dbh;
161        global $pmb_expl_title_display_format,$p_perso;
162       
163        if(!$pmb_expl_title_display_format) return'';
164        $liste_format=explode(",",$pmb_expl_title_display_format);
165       
166        foreach($liste_format as $format) {
167                switch($format) {
168                        case "expl_cb":$liste_aff[]=htmlentities($this->expl_data->expl_cb,ENT_QUOTES,$charset);break;
169                        case "expl_notice":$liste_aff[]=htmlentities($this->expl_data->id_notice,ENT_QUOTES,$charset);break;   
170                        case "expl_bulletin":$liste_aff[]=htmlentities($this->expl_data->id_bulletin,ENT_QUOTES,$charset);break;               
171                        case "expl_typdoc":$liste_aff[]=htmlentities($this->expl_data->typdoc,ENT_QUOTES,$charset);break;
172                        case "expl_cote":$liste_aff[]=htmlentities($this->expl_data->expl_cote,ENT_QUOTES,$charset);break;
173                        case "expl_section":$liste_aff[]=htmlentities($this->expl_data->section_libelle,ENT_QUOTES,$charset);break;
174                        case "expl_statut":$liste_aff[]=htmlentities($this->expl_data->statut,ENT_QUOTES,$charset);break;
175                        case "expl_location":$liste_aff[]=htmlentities($this->expl_data->location_libelle,ENT_QUOTES,$charset);break;
176                        case "expl_codestat":$liste_aff[]=htmlentities($this->expl_data->codestat,ENT_QUOTES,$charset);break;
177                        case "expl_note":$liste_aff[]=htmlentities($this->expl_data->note,ENT_QUOTES,$charset);break;
178                        case "expl_prix":$liste_aff[]=htmlentities($this->expl_data->prix,ENT_QUOTES,$charset);break;
179                        case "expl_owner":$liste_aff[]=htmlentities($this->expl_data->lender_id,ENT_QUOTES,$charset);break;
180                        case "expl_lastempr":$liste_aff[]=htmlentities($this->expl_data->lastempr,ENT_QUOTES,$charset);break;
181                        case "last_loan_date":$liste_aff[]=htmlentities(format_date($this->expl_data->last_loan_date),ENT_QUOTES,$charset);break;
182                        case "create_date":$liste_aff[]=htmlentities(format_date($this->expl_data->create_date),ENT_QUOTES,$charset);break;
183                        case "update_date":$liste_aff[]=htmlentities(format_date($this->expl_data->update_date),ENT_QUOTES,$charset);break;
184                        case "expl_date_depot":$liste_aff[]=htmlentities(format_date($this->expl_data->expl_date_depot),ENT_QUOTES,$charset);break;
185                        case "expl_date_retour":$liste_aff[]=htmlentities(format_date($this->expl_data->expl_date_retour),ENT_QUOTES,$charset);break;
186                        case "type_antivol":$liste_aff[]=htmlentities($this->expl_data->type_antivol,ENT_QUOTES,$charset);break;
187                        case "transfert_location_origine":$liste_aff[]=htmlentities($this->expl_data->transfert_location_origine,ENT_QUOTES,$charset);break;
188                        case "transfert_statut_origine":$liste_aff[]=htmlentities($this->expl_data->transfert_statut_origine,ENT_QUOTES,$charset);break;                                               
189                        case "transfert_section_origine":$liste_aff[]=htmlentities($this->expl_data->transfert_section_origine,ENT_QUOTES,$charset);break;                                             
190                        default:
191                                if (is_numeric($format)) {
192                                        // c'est un id de champ perso                                           
193                                        if(!$p_perso) $p_perso=new parametres_perso("expl");
194                                        if (!$p_perso->no_special_fields) {
195                                                if(!$perso_) {                                                 
196                                                        $perso_=$p_perso->show_fields($this->expl_data->expl_id);               
197                                                        $nb_param=count($perso_["FIELDS"]);                                                     
198                                                }       
199                                                for ($i=0; $i<$nb_param; $i++) {       
200                                                        $p=$perso_["FIELDS"][$i];                                                               
201                                                        if($p["ID"]==$format) {                                                                                                                                                 
202                                                                if($p["AFF"]) $liste_aff[]=$p["AFF"];
203                                                        }       
204                                                }               
205                                        }                       
206                                }
207                        break;
208                }
209        }
210        if(!$liste_aff) return'';
211        return implode(", ", $liste_aff);       
212}
213       
214// récupération des infos exemplaires
215function get_expl_info($cb, $id, $lien_notice=1) {
216        global $dbh;
217        global $cart_link_non;
218
219        if ($cb && !$id) $clause_where = " WHERE expl_cb = '$cb' ";
220        if ( (!$cb && $id) || ($cb && $id) ) $clause_where = " WHERE expl_id = '$id' ";
221       
222        if ($cb || $id) {
223                $query = " select * from exemplaires expl, docs_location location, docs_codestat, lenders ";
224                $query .= ", docs_section section, docs_statut statut, docs_type dtype";
225                $query .=  $clause_where;
226                $query .= " and location.idlocation=expl.expl_location";
227                $query .= " and section.idsection=expl.expl_section";
228                $query .= " and statut.idstatut=expl.expl_statut";
229                $query .= " and dtype.idtyp_doc=expl.expl_typdoc";
230                $query .= " and idcode=expl.expl_codestat";
231                $query .= " and idlender=expl.expl_owner";
232                $result = pmb_mysql_query($query, $dbh);
233                if(pmb_mysql_num_rows($result)) {
234                        $expl = pmb_mysql_fetch_object($result);
235                        if ($expl->expl_lastempr) {
236                                $lastempr = new emprunteur($expl->expl_lastempr, '', FALSE, 0) ;
237                                $expl->lastempr_nom = $lastempr->nom;
238                                $expl->lastempr_prenom = $lastempr->prenom;
239                                $expl->lastempr_cb = $lastempr->cb;
240                        }
241                        return $expl;           
242                }
243        }       
244        return FALSE;   
245}
246
247function expl_info_display($affichage_emprunteurs=1,$affichage_zone_notes=1) {
248        global $msg,$expl_view_form,$pmb_expl_show_dates,$charset;
249        $expl_aff=$expl_view_form;
250       
251        $expl_aff=str_replace('!!code_barre!!', htmlentities($this->expl_data->expl_cb,ENT_QUOTES,$charset), $expl_aff);
252        $expl_aff=str_replace('!!cote!!', htmlentities($this->expl_data->expl_cote,ENT_QUOTES,$charset), $expl_aff);
253        $expl_aff=str_replace('!!type_doc!!', htmlentities($this->expl_data->tdoc_libelle,ENT_QUOTES,$charset), $expl_aff);
254        $expl_aff=str_replace('!!localisation!!', htmlentities($this->expl_data->location_libelle,ENT_QUOTES,$charset), $expl_aff);
255        $expl_aff=str_replace('!!section!!', htmlentities($this->expl_data->section_libelle,ENT_QUOTES,$charset), $expl_aff);
256        $expl_aff=str_replace('!!owner!!', htmlentities($this->expl_data->lender_libelle,ENT_QUOTES,$charset), $expl_aff);
257        $expl_aff=str_replace('!!statut!!', htmlentities($this->expl_data->statut_libelle,ENT_QUOTES,$charset), $expl_aff);
258        $expl_aff=str_replace('!!codestat!!', htmlentities($this->expl_data->codestat_libelle,ENT_QUOTES,$charset), $expl_aff);
259        $expl_aff=str_replace('!!note!!', htmlentities($this->expl_data->expl_note,ENT_QUOTES,$charset), $expl_aff);
260        $expl_aff=str_replace('!!comment!!', htmlentities($this->expl_data->expl_comment,ENT_QUOTES,$charset), $expl_aff);
261       
262        //on compte de nombre de prets pour cet exemplaire
263        $req = "select count(arc_expl_id) as nb_prets from pret_archive where arc_expl_id = ".$this->expl_data->expl_id;
264        $res = pmb_mysql_query($req);
265        if(pmb_mysql_num_rows($res)){   
266                $arch_pret = pmb_mysql_fetch_object($res);
267                $nb_prets = $arch_pret->nb_prets ;
268        }else $nb_prets = 0;
269        $expl_aff=str_replace('!!nb_prets!!', $nb_prets, $expl_aff);
270       
271        //Date de création / modification
272        if($pmb_expl_show_dates=='1' || $pmb_expl_show_dates=='3') {
273                $tmp="<tr>
274                        <td align='right'><label class='etiquette'>".htmlentities($msg['exp_cre_date'],ENT_QUOTES,$charset)."</label></td>
275                        <td align='left'>".htmlentities(format_date($this->expl_data->create_date),ENT_QUOTES,$charset)."</td>
276                        <td align='right'><label class='etiquette'>".htmlentities($msg['exp_upd_date'],ENT_QUOTES,$charset)."</label></td>
277                        <td align='left'>".htmlentities(format_date($this->expl_data->update_date),ENT_QUOTES,$charset)."</td>                                 
278                </tr>";
279                $expl_aff=str_replace('<!-- exp_date_admin -->', $tmp, $expl_aff);
280        }
281       
282        //Date de dépôt / retour
283        if($pmb_expl_show_dates=='2' || $pmb_expl_show_dates=='3') {
284                $tmp="<tr>
285                        <td align='right'><label class='etiquette'>".htmlentities($msg['filing_date'],ENT_QUOTES,$charset)."</label></td>
286                        <td align='left'>".htmlentities(format_date($this->expl_data->expl_date_depot),ENT_QUOTES,$charset)."</td>
287                        <td align='right'><label class='etiquette'>".htmlentities($msg['return_date'],ENT_QUOTES,$charset)."</label></td>
288                        <td align='left'>".htmlentities(format_date($this->expl_data->expl_date_retour),ENT_QUOTES,$charset)."</td>                                     
289                </tr>";
290                $expl_aff=str_replace('<!-- exp_date_filing -->', $tmp, $expl_aff);
291        }
292       
293        $p_perso=new parametres_perso("expl");
294        if (!$p_perso->no_special_fields) {
295                $c=0;
296                $perso="";
297                $perso_=$p_perso->show_fields($this->expl_data->expl_id);               
298                $nb_param=count($perso_["FIELDS"]);
299                $perso_aff='';
300                for ($i=0; $i<$nb_param; $i++) {                               
301                        $nb_colonne=2; 
302                        $perso_aff.="<tr>\n";
303                        for ($i; $i<$nb_param; $i++) { 
304                                $p=$perso_["FIELDS"][$i];                       
305                                $perso_aff.="<td align='right'><label class='etiquette'>".$p["TITRE"]."</label></td>";
306                                $perso_aff.="<td align='left'>".$p["AFF"]."</td>";
307                                if(!--$nb_colonne) break;
308                        }       
309                        $perso_aff.="</tr>\n";
310                }               
311        }               
312        $expl_aff=str_replace('!!champs_perso!!', $perso_aff, $expl_aff);
313       
314        return $expl_aff;
315
316}
317
318// finalisation du résultat (écriture de l'isbd)
319function finalize() {
320        $this->result = str_replace('!!ISBD!!', $this->isbd, $this->result);
321}
322
323// génération du template javascript---------------------------------------
324function init_javascript() {
325        global $msg,$pmb_recherche_ajax_mode;
326       
327        // propriétés pour le selecteur de panier
328        $selector_prop = "toolbar=no, dependent=yes, width=500, height=400, resizable=yes, scrollbars=yes";
329        $cart_click = "onClick=\"openPopUp('./cart.php?object_type=EXPL&item=!!id!!', 'cart', 600, 700, -2, -2, '$selector_prop')\"";
330        if($pmb_recherche_ajax_mode && $this->ajax_mode){
331                $javascript_template ="
332                <div id=\"el!!id!!Parent\" class=\"notice-parent\">
333                <img src=\"./images/plus.gif\" class=\"img_plus\" name=\"imEx\" id=\"el!!id!!Img\" param='".rawurlencode($this->mono_display_cmd)."' title=\"".$msg['admin_param_detail']."\" border=\"0\" onClick=\"expandBase_ajax('el!!id!!', true,this.getAttribute('param')); return false;\" hspace=\"3\">
334                <span class=\"notice-heada\">!!heada!!</span>
335                <br />
336                </div>
337                <div id=\"el!!id!!Child\" class=\"notice-child\" style=\"margin-bottom:6px;display:none;\">
338        <img src='./images/basket_small_20x20.gif' align='middle' alt='basket' title=\"${msg[400]}\" $cart_click>
339        !!ISBD!!
340                </div>";
341       
342        }else{
343                $javascript_template ="
344                <div id=\"el!!id!!Parent\" class=\"notice-parent\">
345                <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\">
346                <span class=\"notice-heada\">!!heada!!</span>
347                <br />
348                </div>
349                <div id=\"el!!id!!Child\" class=\"notice-child\" style=\"margin-bottom:6px;display:none;\">
350        <img src='./images/basket_small_20x20.gif' align='middle' alt='basket' title=\"${msg[400]}\" $cart_click>
351        !!ISBD!!
352                </div>";
353        }       
354        $this->result = str_replace('!!id!!', $this->expl_data->expl_id.($this->anti_loop?"_p".$this->anti_loop[count($this->anti_loop)-1]:""), $javascript_template);
355        $this->result = str_replace('!!heada!!', $this->lien_suppr_cart.$this->header, $this->result);
356}
357
358// fin class
359}
Note: See TracBrowser for help on using the repository browser.