source: pmb4.2/trunk/fuentes/pmb/classes/collstate.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: 18.2 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: collstate.class.php,v 1.17 2015-04-03 11:16:20 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9// classes de gestion des états de collection de périodique
10
11require_once($class_path."/parametres_perso.class.php");
12require_once($include_path."/templates/collstate.tpl.php");
13
14class collstate {
15
16// classe de la notice chapeau des périodiques
17var $id                          = 0;       // id de l'état de collection
18var $serial_id       = 0;         // id du périodique lié
19var $surloc_id          = 0;
20var $surloc_libelle = '';
21
22// constructeur
23function collstate($id=0,$serial_id=0) {
24        // si id, allez chercher les infos dans la base
25        if($id) {
26                $this->id = $id;
27                $this->fetch_data();
28        }
29        if($serial_id) {
30                $this->serial_id = $serial_id;
31        }
32        return $this->id;
33}
34
35// récupération des infos en base
36function fetch_data() {
37        global $dbh;
38        global $explr_invisible, $explr_visible_unmod, $explr_visible_mod, $pmb_droits_explr_localises ;
39        global $pmb_sur_location_activate;
40
41        $myQuery = pmb_mysql_query("SELECT * FROM collections_state WHERE collstate_id='".$this->id."' LIMIT 1", $dbh);
42        $mycoll= pmb_mysql_fetch_object($myQuery);
43
44        $this->serial_id=$mycoll->id_serial;
45        $this->location_id=$mycoll->location_id;
46        $this->state_collections=$mycoll->state_collections;
47        $this->emplacement=$mycoll->collstate_emplacement;
48        $this->type=$mycoll->collstate_type;
49        $this->origine=$mycoll->collstate_origine;
50        $this->note=$mycoll->collstate_note;
51        $this->cote=$mycoll->collstate_cote;
52        $this->archive=$mycoll->collstate_archive;
53        $this->lacune=$mycoll->collstate_lacune;
54        $this->statut=$mycoll->collstate_statut;
55
56        $myQuery = pmb_mysql_query("SELECT * FROM arch_emplacement WHERE archempla_id='".$this->emplacement."' LIMIT 1", $dbh);
57        $myempl= pmb_mysql_fetch_object($myQuery);
58        $this->emplacement_libelle=$myempl->archempla_libelle;
59
60        $myQuery = pmb_mysql_query("SELECT * FROM arch_type WHERE archtype_id='".$this->type."' LIMIT 1", $dbh);
61        $mytype= pmb_mysql_fetch_object($myQuery);
62        $this->type_libelle=$mytype->archtype_libelle;
63
64        // Lecture des statuts
65        $myQuery = pmb_mysql_query("SELECT * FROM arch_statut WHERE archstatut_id='".$this->statut."' LIMIT 1", $dbh);
66        $mystatut= pmb_mysql_fetch_object($myQuery);
67        $this->statut_gestion_libelle=$mystatut->archstatut_gestion_libelle;
68        $this->statut_opac_libelle=$mystatut->archstatut_opac_libelle;
69        $this->statut_visible_opac=$mystatut->archstatut_visible_opac;
70        $this->statut_visible_opac_abon=$mystatut->archstatut_visible_opac_abon;
71        $this->statut_visible_gestion=$mystatut->archstatut_visible_gestion;
72        $this->statut_class_html=$mystatut->archstatut_class_html;
73
74        $myQuery = pmb_mysql_query("select location_libelle, surloc_num from docs_location where idlocation='".$this->location_id."' LIMIT 1", $dbh);
75        $mylocation= pmb_mysql_fetch_object($myQuery);
76        $this->location_libelle=$mylocation->location_libelle;
77
78        if ($pmb_droits_explr_localises) {
79                $tab_invis=explode(",",$explr_invisible);
80                $tab_unmod=explode(",",$explr_visible_unmod);
81
82                $as_invis = array_search($this->location_id,$tab_invis);
83                $as_unmod = array_search($this->location_id,$tab_unmod);
84                if ($as_invis!== FALSE && $as_invis!== NULL) $this->explr_acces_autorise="INVIS" ;
85                elseif ($as_unmod!== FALSE && $as_unmod!== NULL) $this->explr_acces_autorise="UNMOD" ;
86                else $this->explr_acces_autorise="MODIF" ;
87        } else $this->explr_acces_autorise="MODIF" ;
88       
89        if ($pmb_sur_location_activate) {
90                $this->surloc_id = $mylocation->surloc_num;
91                $myQuery = pmb_mysql_query("select surloc_libelle from sur_location where surloc_id='".$this->surloc_id."' LIMIT 1", $dbh);
92                $mysurloc = pmb_mysql_fetch_object($myQuery);
93                $this->surloc_libelle=$mysurloc->surloc_libelle;
94        }
95}
96
97//Récupération de l'affichage dans l'isbd
98function get_callstate_isbd() {
99        global $msg, $pmb_etat_collections_localise,$pmb_droits_explr_localises,$explr_visible_mod;
100
101        if ($pmb_etat_collections_localise && $pmb_droits_explr_localises && $explr_visible_mod) {
102                $restrict_location=" and location_id in (".$explr_visible_mod.") and idlocation=location_id";
103                $table_location=",docs_location";
104                $select_location=",location_libelle";
105        }
106        $rqt="select state_collections $select_location from collections_state $table_location where id_serial=".$this->serial_id.$restrict_location;
107        $execute_query=pmb_mysql_query($rqt);
108        if (pmb_mysql_num_rows($execute_query)) {
109                $bool=false;
110                $affichage="<br /><strong>".$msg["4001"]."</strong><br />";
111                while (($r=pmb_mysql_fetch_object($execute_query))) {
112                        if ($r->state_collections) {
113                                if ($r->location_libelle) $affichage .= "<strong>".$r->location_libelle."</strong> : ";
114                                $affichage .= str_replace("\n","<br />",$r->state_collections)."<br />\n";
115                                $bool=true;
116                        }
117                }
118                if ($bool==true) return($affichage);
119        }
120        return "";
121}
122
123//Récupérer de l'affichage complet
124function get_display_list($base_url,$filtre,$debut=0,$page=0, $type=0,$form=1,$no_pagination=false) {
125        global $dbh, $msg,$nb_per_page_a_search,$tpl_collstate_liste,$tpl_collstate_liste_line,$tpl_collstate_liste_form, $tpl_collstate_surloc_liste, $tpl_collstate_surloc_liste_line;
126        global $explr_invisible,$pmb_droits_explr_localises,$pmb_etat_collections_localise,$deflt_docs_location;
127        global $pmb_sur_location_activate;
128
129        $location=$filtre->location;
130        if (!$pmb_etat_collections_localise) {
131                 $location="";
132        }
133        if (($pmb_droits_explr_localises)&&($explr_invisible)) $restrict_location=" location_id not in (".$explr_invisible.") and ";
134        else  $restrict_location="";
135
136        if ($pmb_sur_location_activate) {
137                $join_sur_loc=" left join sur_location on docs_location.surloc_num=sur_location.surloc_id ";
138                $order_sur_loc="surloc_libelle,";
139        }else{
140                $join_sur_loc="";
141                $order_sur_loc="";
142        }
143       
144        //On compte les bulletins à afficher
145        $rqt="SELECT count( collstate_id) FROM collections_state WHERE $restrict_location ".($location?"(location_id='$location') and ":"")." id_serial='".$this->serial_id."' ";
146        $myQuery = pmb_mysql_query($rqt, $dbh);
147        $nbr_lignes = pmb_mysql_result($myQuery,0,0);
148
149        $req="SELECT  collstate_id , location_id FROM collections_state LEFT JOIN docs_location ON location_id=idlocation ".$join_sur_loc." LEFT JOIN arch_emplacement ON collstate_emplacement=archempla_id WHERE $restrict_location ".($location?"(location_id='$location') and ":"")."
150        id_serial='".$this->serial_id."' ORDER BY ".$order_sur_loc." ".($pmb_etat_collections_localise?"location_libelle, ":"")."archempla_libelle, collstate_cote "
151        .(($no_pagination)?'':"LIMIT $debut,$nb_per_page_a_search");
152        $myQuery = pmb_mysql_query($req, $dbh);
153        if((pmb_mysql_num_rows($myQuery))) {
154               
155                if ($pmb_sur_location_activate) {
156                        $tpl_collstate_liste[$type] = str_replace('<!-- surloc -->',$tpl_collstate_surloc_liste,$tpl_collstate_liste[$type]);
157                        $tpl_collstate_liste_line[$type] = str_replace('<!-- surloc -->',$tpl_collstate_surloc_liste_line,$tpl_collstate_liste_line[$type]);
158                }
159               
160                $parity=1;
161                while(($coll = pmb_mysql_fetch_object($myQuery))) {
162                        $my_collstate=new collstate($coll->collstate_id);
163/*
164        Avoir comment gerer un + pour des grands etats de collections
165                        if (count($my_collstate->state_collections)>80 || count($my_collstate->lacune)>80) {
166                                $plus_statecollection="<img src='images/plus.gif' class='img_plus' onClick='if (event) e=event; else e=window.event; e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); show_sources(\"!!id!!\"); '/>";
167                                $texte_statecollection="<tr class='$pair_impair' style='display:none' id='".$coll->collstate_id."'><td>&nbsp;</td><td colspan='3'><table style='border:1px solid'>
168                                <td>".str_replace("\n","<br />",$my_collstate->state_collections)."</td>
169                                <td>".str_replace("\n","<br />",$my_collstate->lacune)."</td>";
170                        } else $plus_statecollection="<td>&nbsp;</td>";
171*/
172
173
174                        if ($parity++ % 2) $pair_impair = "even"; else $pair_impair = "odd";
175                        // Si modifiable, ajout du lien vers le formulaire
176                        if($my_collstate->explr_acces_autorise=="MODIF") {
177                        $tr_javascript="  onmousedown=\"document.location='./catalog.php?categ=serials&sub=collstate_form&id=".$coll->collstate_id."&serial_id=".$this->serial_id."';\" ";
178                        } else {
179                                $tr_javascript="";
180                        }
181                $tr_surbrillance = "onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='".$pair_impair."'\" ";
182                $line = str_replace('!!tr_javascript!!',$tr_javascript , $tpl_collstate_liste_line[$type]);
183                $line = str_replace('!!tr_surbrillance!!',$tr_surbrillance , $line);
184                $line = str_replace('!!pair_impair!!',$pair_impair , $line);
185                        if ($pmb_sur_location_activate) {
186                        $line = str_replace('!!surloc!!', $my_collstate->surloc_libelle, $line);
187                }
188                $line = str_replace('!!localisation!!', $my_collstate->location_libelle, $line);
189                $line = str_replace('!!cote!!', $my_collstate->cote, $line);
190                $line = str_replace('!!type_libelle!!', $my_collstate->type_libelle, $line);
191                $line = str_replace('!!emplacement_libelle!!', $my_collstate->emplacement_libelle, $line);
192                $line = str_replace('!!statut_libelle!!', "<span class='".$my_collstate->statut_class_html."'  style='margin-right: 3px;'><img src='./images/spacer.gif' width='10' height='10' /></span>".$my_collstate->statut_gestion_libelle, $line);
193                $line = str_replace('!!origine!!', $my_collstate->origine, $line);
194                $line = str_replace('!!state_collections!!',str_replace("\n","<br />",$my_collstate->state_collections), $line);
195                $line = str_replace('!!archive!!',$my_collstate->archive, $line);
196                $line = str_replace('!!lacune!!', str_replace("\n","<br />",$my_collstate->lacune), $line);
197                $liste.=$line;
198                }
199                $liste = str_replace('!!collstate_liste!!',$liste , $tpl_collstate_liste[$type]);
200        } else {
201                $liste= $msg["collstate_no_collstate"];
202        }
203
204        if($form)$liste = str_replace('!!collstate_table!!',$liste , $tpl_collstate_liste_form);
205        $liste = str_replace('!!base_url!!', $base_url, $liste);
206        $liste = str_replace('!!location!!', $location, $liste);
207
208        $this->liste=$liste;
209        $this->nbr=$nbr_lignes;
210        // barre de navigation par page
211        $this->pagination = aff_pagination ($base_url."&location=$location", $nbr_lignes, $nb_per_page_a_search, $page, 10, false, true) ;
212}
213
214// fonction de mise à jour ou de création d'état de collection
215function update($value) {
216        global $dbh,$msg;
217        $fields="";
218        $id_serial=0;
219        foreach($value as $key => $val) {
220                if($fields) $fields.=",";
221                $fields.=" $key='".addslashes($val)."' ";
222                if($key == "id_serial"){
223                        $id_serial=addslashes($val);
224                }
225        }
226        if($this->id) {
227                // modif
228                $no_erreur=pmb_mysql_query("UPDATE collections_state SET $fields WHERE collstate_id=".$this->id, $dbh);
229                if(!$no_erreur) {
230                        error_message($msg["collstate_add_collstate"], $msg["collstate_add_error"],1);
231                        exit;
232                }
233
234        } else {
235                // create
236                $no_erreur=pmb_mysql_query("INSERT INTO collections_state SET $fields ", $dbh);
237                $this->id = pmb_mysql_insert_id($dbh);
238                if(!$no_erreur) {
239                        error_message($msg["collstate_edit_collstate"], $msg["collstate_add_error"],1);
240                        exit;
241                }
242        }
243       
244        if($id_serial){
245                notice::majNoticesMotsGlobalIndex($id_serial,'collstate');
246        }
247        return $this->id;
248}
249
250function update_from_form() {
251        global $state_collections,$origine,$archive,$cote,$note,$lacune,$serial_id,$archstatut_id,$archtype_id,$location_id,$archempla_id;
252        global $deflt_docs_location;
253       
254        $value = new stdClass();
255        $value->id_serial=stripslashes($serial_id);
256        if(!$location_id) $location_id=$deflt_docs_location;
257        $value->location_id=stripslashes($location_id);
258        $value->state_collections=stripslashes($state_collections);
259        $value->collstate_emplacement=stripslashes($archempla_id);
260        $value->collstate_type=stripslashes($archtype_id);
261        $value->collstate_origine=stripslashes($origine);
262        $value->collstate_note=stripslashes($note);
263        $value->collstate_cote=stripslashes($cote);
264        $value->collstate_archive=stripslashes($archive);
265        $value->collstate_lacune=stripslashes($lacune);
266        if(!$archstatut_id)$archstatut_id=1;
267        $value->collstate_statut=stripslashes($archstatut_id);
268        $this->update($value);
269
270        //Traitement des champs perso
271        $p_perso=new parametres_perso("collstate");
272        $p_perso->check_submited_fields();
273        $p_perso->rec_fields_perso($this->id);
274       
275        if($value->id_serial){
276                notice::majNoticesMotsGlobalIndex($value->id_serial,'collstate');
277        }
278}
279// fonction générant le form de saisie de notice chapeau
280function do_form() {
281        global $msg;
282        global $collstate_form,$statut_field,$emplacement_field, $location_field, $support_field;
283        global $deflt_docs_location;
284        global  $deflt_arch_statut,$deflt_arch_emplacement,$deflt_arch_type;
285        global $charset;
286        global $pmb_etat_collections_localise;
287        // titre formulaire
288        if($this->id) {
289                $libelle=$libelle=$msg["collstate_edit_collstate"];
290                $link_delete="<input type='button' class='bouton' value='$msg[63]' onClick=\"confirm_delete();\" />";
291
292        } else {
293                $libelle=$msg["collstate_add_collstate"];
294                $link_delete="";
295        }
296        $collstate_form = str_replace('!!id!!', htmlentities($this->id,ENT_QUOTES,$charset), $collstate_form);
297        $collstate_form = str_replace('!!location_id!!', htmlentities($this->location_id,ENT_QUOTES,$charset), $collstate_form);
298        $collstate_form = str_replace('!!serial_id!!', htmlentities($this->serial_id,ENT_QUOTES,$charset), $collstate_form);
299        $action="./catalog.php?categ=serials&sub=collstate_update&serial_id=".rawurlencode($this->serial_id)."&id=".rawurlencode($this->id);
300        $collstate_form = str_replace('!!action!!', $action, $collstate_form);
301        $collstate_form = str_replace('!!delete!!', $link_delete, $collstate_form);
302        $collstate_form = str_replace('!!libelle!!',$libelle , $collstate_form);
303
304        $collstate_form = str_replace('!!origine!!',htmlentities($this->origine,ENT_QUOTES,$charset) , $collstate_form);
305        $collstate_form = str_replace('!!archive!!',htmlentities($this->archive,ENT_QUOTES,$charset) , $collstate_form);
306        $collstate_form = str_replace('!!cote!!',htmlentities($this->cote,ENT_QUOTES,$charset) , $collstate_form);
307        $collstate_form = str_replace('!!note!!',htmlentities($this->note,ENT_QUOTES,$charset) , $collstate_form);
308        $collstate_form = str_replace('!!lacune!!',htmlentities($this->lacune,ENT_QUOTES,$charset) , $collstate_form);
309        $collstate_form = str_replace('!!state_collections!!',htmlentities($this->state_collections,ENT_QUOTES,$charset) , $collstate_form);
310
311        // champs des localisations
312        if($pmb_etat_collections_localise) {
313                if(!$this->location_id) $this->location_id=$deflt_docs_location;
314                $select = gen_liste("select distinct idlocation, location_libelle from docs_location order by 2 ", "idlocation", "location_libelle", 'location_id', "", $this->location_id, "", "","","",0);
315                $field="";
316                if($select) $field = str_replace('!!location!!',$select, $location_field);
317                $collstate_form = str_replace('!!location_field!!',$field, $collstate_form);
318        }else{
319                $field="<input type='hidden' name='location_id' id='location_id' value=''/> ";
320                $collstate_form = str_replace('!!location_field!!',$field, $collstate_form);
321        }
322
323
324        // champs des emplacements
325        if(!$this->emplacement) $this->emplacement=$deflt_arch_emplacement;
326        $select = gen_liste("select archempla_id, archempla_libelle from arch_emplacement order by 2", "archempla_id", "archempla_libelle", "archempla_id", "",$this->emplacement, "",  "", "","","",0) ;
327        $field="";
328        if($select) $field = str_replace('!!emplacement!!',$select, $emplacement_field);
329        $collstate_form = str_replace('!!emplacement_field!!',$field, $collstate_form);
330
331        // champs des supports
332        if(!$this->type) $this->type=$deflt_arch_type;
333        $select = gen_liste("select archtype_id, archtype_libelle from arch_type order by 2", "archtype_id", "archtype_libelle", "archtype_id", "", $this->type, "", "","","",0) ;
334        $field="";
335        if($select) $field = str_replace('!!support!!',$select, $support_field);
336        $collstate_form = str_replace('!!support_field!!',$field, $collstate_form);
337
338        // champs des statuts
339        if(!$this->statut) $this->statut=$deflt_arch_statut;
340        $select = gen_liste("select archstatut_id, archstatut_gestion_libelle from arch_statut order by 2", "archstatut_id", "archstatut_gestion_libelle", "archstatut_id", "", $this->statut, "", "","","",0) ;
341        $field="";
342        if($select) $field = str_replace('!!statut!!',$select, $statut_field);
343        $collstate_form = str_replace('!!statut_field!!',$field, $collstate_form);
344
345        // Champs perso
346        $p_perso=new parametres_perso("collstate");
347        $parametres_perso="";
348        if (!$p_perso->no_special_fields) {
349                $perso_=$p_perso->show_editable_fields($this->id);
350                $perso="";
351                for ($i=0; $i<count($perso_["FIELDS"]); $i++) {
352                        $p=$perso_["FIELDS"][$i];
353                        $perso.="
354                                <div class='row'>
355                                        <label for='".$p["NAME"]."' class='etiquette'>".$p["TITRE"]."</label>
356                                </div>
357                                <div class='row'>
358                                        ".$p["AFF"]."
359                                </div>";
360                }
361                $perso.=$perso_["CHECK_SCRIPTS"];
362                $parametres_perso.=$perso;
363        }
364        $collstate_form = str_replace('!!parametres_perso!!',$parametres_perso , $collstate_form);
365
366        $link_annul = "onClick=\"unload_off();history.go(-1);\"";
367        $collstate_form = str_replace('!!annul!!', $link_annul, $collstate_form);
368
369        //vérification de la présence de champs perso
370        //si non, on confirme la soumission du formulaire
371        if($p_perso->no_special_fields)
372                $return_form = "return true";
373        //sinon, on vérifie leurs valeurs
374        else $return_form = "return check_form()";
375        $collstate_form = str_replace('!!return_form!!',$return_form, $collstate_form);
376
377        return $collstate_form;
378}
379
380// suppression d'une collection ou de toute les collections d'un périodique
381function delete() {
382        global $dbh;
383
384        if($this->id) {
385                //On nettoye l'index
386                if(!$this->serial_id){
387                        $req="SELECT id_serial FROM collections_state WHERE collstate_id='".$this->id."'";
388                        $res=pmb_mysql_query($req,$dbh);
389                        if($res && pmb_mysql_num_rows($res)){
390                                $this->serial_id=pmb_mysql_result($res,0,0);
391                        }
392                }
393                //elimination des champs persos
394                $p_perso=new parametres_perso("collstate");
395                $p_perso->delete_values($this->id);
396                pmb_mysql_query("DELETE from collections_state WHERE collstate_id='".$this->id."' ", $dbh);
397        } else if($this->serial_id) {
398                $myQuery = pmb_mysql_query("SELECT collstate_id FROM collections_state WHERE id_serial='".$this->serial_id."' ", $dbh);
399                if((pmb_mysql_num_rows($myQuery))) {
400                        while(($coll = pmb_mysql_fetch_object($myQuery))) {
401                                $my_collstate=new collstate($coll->collstate_id);
402                                $my_collstate->delete();
403                        }
404                }
405        }
406        //On nettoye l'index
407        notice::majNoticesMotsGlobalIndex($this->serial_id,'collstate');
408}
409
410} // fin définition classe
Note: See TracBrowser for help on using the repository browser.