source: pmb4.2/trunk/fuentes/pmb/classes/bannette.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: 75.3 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: bannette.class.php,v 1.152.2.4 2015-11-24 09:19:38 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once ("$class_path/search.class.php") ; 
10require_once ("$class_path/equation.class.php") ; 
11require_once ("$class_path/mono_display.class.php") ; 
12require_once ("$class_path/serial_display.class.php") ; 
13require_once ($include_path."/mail.inc.php") ;
14require_once ($include_path."/export_notices.inc.php");
15require_once($class_path."/export_param.class.php");
16require_once($class_path."/notice_tpl_gen.class.php");
17if($gestion_acces_active==1 && $gestion_acces_empr_notice==1) {
18        require_once ("$class_path/acces.class.php") ; 
19}
20require_once($class_path."/parametres_perso.class.php");
21require_once($class_path."/categories.class.php");
22require_once($class_path."/bannette_facettes.class.php");
23require_once($class_path."/bannette_tpl.class.php");
24
25// définition de la classe de gestion des 'bannettes'
26class bannette {
27
28        // ---------------------------------------------------------------
29        //              propriétés de la classe
30        // ---------------------------------------------------------------
31        var $id_bannette=0;     
32        var $num_classement=1; 
33        var $nom_classement=""; 
34        var     $nom_bannette="";
35        var     $comment_gestion="";
36        var     $comment_public="";
37        var     $entete_mail="";
38        var     $bannette_tpl_num=0;
39        var     $piedpage_mail="";
40        var     $notice_tpl="";
41        var     $date_last_remplissage="";
42        var     $date_last_envoi="";
43        var     $aff_date_last_remplissage="";
44        var     $aff_date_last_envoi="";
45        var $date_last_envoi_sql="";
46        var     $proprio_bannette=0;
47        var     $bannette_auto=0;
48        var     $periodicite=0;
49        var     $diffusion_email=0;
50        var $nb_notices_diff=0;
51        var     $categorie_lecteurs=0;
52        var $groupe_lecteurs=0;
53        var     $update_type="C";
54        var     $nb_notices=0;
55        var     $nb_abonnes=0;
56        var     $alert_diff=0;
57        var $texte_export ;
58        var $texte_diffuse ;
59        var $num_panier ;
60        var $limite_type; // D ou  I : Days ou Items
61        var $limite_nombre; // Nombre limite, = soit durée de vie d'une notice dans la bannette ou bien nombre maxi de notices dans le panier
62        var $liste_id_notice = array();
63        var $export_contenu = "";
64        var $typeexport = "pmbxml2marciso";
65        var $prefixe_fichier = "prefix_";
66        var $param_export = array();
67        var     $group_pperso=0;
68        var $display_notice_in_every_group=1;
69        var $archive_number=0;
70        var $group_type = 0;
71        var     $statut_not_account=0;
72        var $field_type='';
73        var $field_id=0;
74        var $group_pperso_order=array();
75        var $document_generate=0;
76        var $document_notice_tpl=0;
77        var $document_insert_docnum=0;
78        var $document_group=0;
79        var $document_add_summary=0;
80        var $aff_document="";
81        var $bannette_opac_accueil=0;
82        var $document_diffuse=""; //contenu html du document généré
83        var $descriptors = array();
84        var $id_bannette_origine = 0; //Utilisé en duplication de bannette
85       
86        // ---------------------------------------------------------------
87        //              constructeur
88        // ---------------------------------------------------------------
89        function bannette($id=0) {
90                if ($id) {
91                        // on cherche à atteindre une notice existante
92                        $this->id_bannette = $id;
93                        $this->getData();
94                } else {
95                        // la notice n'existe pas
96                        $this->id_bannette = 0;
97                        $this->getData();
98                }
99        }
100
101        // ---------------------------------------------------------------
102        //              getData() : récupération infos
103        // ---------------------------------------------------------------
104        function getData() {
105                global $dbh;
106                global $msg;
107                $this->p_perso=new parametres_perso("notices");
108                if (!$this->id_bannette) {
109                        // pas d'identifiant. on retourne un tableau vide
110                        $this->id_bannette=0;
111                        $this->num_classement = 1 ;
112                        $this->nom_classement = "" ;
113                        $this->nom_bannette="";
114                        $this->comment_gestion="";
115                        $this->comment_public="";
116                        $this->entete_mail="";
117                        $this->bannette_tpl_num=0;
118                        $this->piedpage_mail="";
119                        $this->notice_tpl="";
120                        $this->date_last_remplissage="";
121                        $this->date_last_envoi=today();
122                        $this->aff_date_last_remplissage="";
123                        $this->aff_date_last_envoi=formatdate($this->date_last_envoi);
124                        $this->date_last_envoi_sql=today();
125                        $this->proprio_bannette=0;
126                        $this->bannette_auto=0;
127                        $this->periodicite=0;
128                        $this->diffusion_email=0;
129                        $this->nb_notices_diff=0;
130                        $this->categorie_lecteurs="";
131                        $this->groupe_lecteurs="";
132                        $this->update_type="C";
133                        $this->nb_notices = 0 ;
134                        $this->nb_abonnes = 0 ;
135                        $this->alert_diff = 0 ;
136                        $this->num_panier = 0 ;
137                        $this->limite_type = '' ;
138                        $this->limite_nombre = 0 ;
139                        $this->typeexport = '';
140                        $this->group_pperso = 0;
141                        $this->group_type = 0;
142                        $this->display_notice_in_every_group=1;
143                        $this->statut_not_account = 0;
144                        $this->archive_number = 0;
145                        $this->document_generate=0;
146                        $this->document_notice_tpl=0;
147                        $this->document_insert_docnum=0;
148                        $this->document_group=0;
149                        $this->document_add_summary=0;
150                        $this->descriptor_num=0;
151                        $this->prefixe_fichier = "prefix_";
152                        $this->bannette_opac_accueil = 0;
153                } else {
154                        $requete = "SELECT id_bannette, num_classement, nom_bannette,comment_gestion,comment_public,statut_not_account, ";
155                        $requete .= "date_last_remplissage, date_format(date_last_remplissage, '".$msg["format_date_heure"]."') as aff_date_last_remplissage, ";
156                        $requete .= "date_last_envoi,date_last_envoi as date_last_envoi_sql, date_format(date_last_envoi, '".$msg["format_date_heure"]."') as aff_date_last_envoi, ";
157                        $requete .= "proprio_bannette,bannette_auto,periodicite,diffusion_email, nb_notices_diff, categorie_lecteurs, groupe_lecteurs, update_type, entete_mail, bannette_tpl_num, piedpage_mail, notice_tpl, num_panier, ";
158                        $requete .= "limite_type, limite_nombre, typeexport, prefixe_fichier, param_export, group_type, group_pperso, display_notice_in_every_group, archive_number, ";
159                        $requete .= "document_generate, document_notice_tpl, document_insert_docnum, document_group, document_add_summary, bannette_opac_accueil ";
160                        $requete .= "FROM bannettes WHERE id_bannette='".$this->id_bannette."' " ;
161                        $result = pmb_mysql_query($requete, $dbh) or die ($requete."<br /> in bannette.class.php : ".pmb_mysql_error());
162                        if(pmb_mysql_num_rows($result)) {
163                                $temp = pmb_mysql_fetch_object($result);
164                                $this->id_bannette                      = $temp->id_bannette ;
165                                $this->num_classement           = $temp->num_classement ;
166                                $this->nom_bannette                     = $temp->nom_bannette ;
167                                $this->comment_gestion          = $temp->comment_gestion ;     
168                                $this->comment_public           = $temp->comment_public ;
169                                $this->bannette_tpl_num                 = $temp->bannette_tpl_num ;
170                                $this->entete_mail                      = $temp->entete_mail ;
171                                $this->piedpage_mail            = $temp->piedpage_mail ;
172                                $this->notice_tpl                       = $temp->notice_tpl ;
173                                $this->date_last_remplissage= $temp->date_last_remplissage ;
174                                $this->date_last_envoi          = $temp->date_last_envoi ;     
175                                $this->aff_date_last_remplissage        = $temp->aff_date_last_remplissage ;
176                                $this->aff_date_last_envoi      = $temp->aff_date_last_envoi ; 
177                                $this->date_last_envoi_sql      = $temp->date_last_envoi_sql;
178                                $this->proprio_bannette         = $temp->proprio_bannette ;     
179                                $this->bannette_auto            = $temp->bannette_auto ;
180                                $this->periodicite                      = $temp->periodicite ;
181                                $this->diffusion_email          = $temp->diffusion_email ;     
182                                $this->nb_notices_diff          = $temp->nb_notices_diff;
183                                $this->categorie_lecteurs       = $temp->categorie_lecteurs ;
184                                $this->groupe_lecteurs          = $temp->groupe_lecteurs ;
185                                $this->update_type                      = $temp->update_type ;
186                                $this->num_panier                       = $temp->num_panier ;
187                                $this->limite_type                      = $temp->limite_type ;
188                                $this->limite_nombre            = $temp->limite_nombre ;
189                                $this->typeexport                       = $temp->typeexport ;
190                                $this->prefixe_fichier          = $temp->prefixe_fichier ;
191                                $this->group_pperso             = $temp->group_pperso ; 
192                                $this->group_type                       = $temp->group_type; 
193                                $this->display_notice_in_every_group=$temp->display_notice_in_every_group;
194                                $this->statut_not_account       = $temp->statut_not_account ; 
195                                $this->archive_number           = $temp->archive_number ; 
196                                $this->document_generate        = $temp->document_generate ;
197                                $this->document_notice_tpl      = $temp->document_notice_tpl;
198                                $this->document_insert_docnum= $temp->document_insert_docnum ;
199                                $this->document_group           = $temp->document_group ;
200                                $this->document_add_summary = $temp->document_add_summary ;
201                                $this->descriptor_num           = $temp->ban_descriptor_num ;
202                                $this->bannette_opac_accueil= $temp->bannette_opac_accueil ;
203         
204                                $this->param_export                     = unserialize($temp->param_export) ;
205                                $this->compte_elements();
206                                $requete = "SELECt nom_classement FROM classements WHERE id_classement='".$this->num_classement."'" ;
207                                $resultclass = pmb_mysql_query($requete, $dbh) or die ($requete."<br /> in bannette.class.php : ".pmb_mysql_error());
208                                if ($temp = pmb_mysql_fetch_object($resultclass)) $this->nom_classement = $temp->nom_classement ;
209                                else $this->nom_classement = "" ;
210                        } else {
211                                // pas de bannette avec cette clé
212                                $this->id_bannette=0;
213                                $this->num_classement = 1 ;
214                                $this->nom_classement = "" ;
215                                $this->nom_bannette="";
216                                $this->comment_gestion="";
217                                $this->comment_public="";
218                                $this->bannette_tpl_num=0;
219                                $this->entete_mail="";
220                                $this->piedpage_mail="";
221                                $this->notice_tpl="";
222                                $this->date_last_remplissage="";
223                                $this->date_last_envoi="";
224                                $this->date_last_envoi_sql="";
225                                $this->aff_date_last_remplissage="";
226                                $this->aff_date_last_envoi="";
227                                $this->proprio_bannette=0;
228                                $this->bannette_auto=0;
229                                $this->periodicite=0;
230                                $this->diffusion_email=0;
231                                $this->nb_notices_diff=0;
232                                $this->categorie_lecteurs="";
233                                $this->groupe_lecteurs="";
234                                $this->update_type="C";
235                                $this->nb_notices = 0 ;
236                                $this->nb_abonnes = 0 ;
237                                $this->num_panier = 0 ;
238                                $this->limite_type = '' ;
239                                $this->limite_nombre = 0 ;
240                                $this->typeexport = '' ;
241                                $this->prefixe_fichier = "prefix_";
242                                $this->group_pperso = 0;
243                                $this->group_type = 0;
244                                $this->display_notice_in_every_group=1;
245                                $this->statut_not_account = 0;
246                                $this->archive_number=0;
247                                $this->document_generate=0;
248                                $this->document_notice_tpl=0;
249                                $this->document_insert_docnum=0;
250                                $this->document_group=0;
251                                $this->document_add_summary=0;
252                                $this->descriptor_num=0;
253                                $this->bannette_opac_accueil=0;
254                        }
255                }
256                $this->get_descriptors();
257        }
258
259        function get_descriptors(){
260                global $lang;
261               
262                $this->descriptors=array();
263                // les descripteurs...
264                $rqt = "select num_noeud from bannettes_descriptors where num_bannette = '".$this->id_bannette."' order by bannette_descriptor_order";
265                $res = pmb_mysql_query($rqt);
266                if(pmb_mysql_num_rows($res)){
267                        while($row = pmb_mysql_fetch_object($res)){
268                                $categ = new categories($row->num_noeud, $lang);
269                                $this->descriptors[] = $categ->num_noeud;
270                        }
271                }
272                return $this->descriptors;
273        }
274
275        function build_sel_descriptor(){
276                global $msg, $charset,$lang;
277                global $dsi_desc_field;
278                global $dsi_desc_first_desc,$dsi_desc_other_desc;
279               
280                $categs = "";
281                if(count($this->descriptors)){
282                        for ($i=0 ; $i<count($this->descriptors) ; $i++){
283                                if($i==0) $categ=$dsi_desc_first_desc;
284                                else $categ = $dsi_desc_other_desc;
285                                //on y va
286                                $categ = str_replace('!!icateg!!', $i, $categ);
287                                $categ = str_replace('!!categ_id!!', $this->descriptors[$i], $categ);
288                                $categorie = new categories($this->descriptors[$i],$lang);
289                                $categ = str_replace('!!categ_libelle!!', htmlentities($categorie->libelle_categorie,ENT_QUOTES, $charset), $categ);
290                                $categs.=$categ;
291                        }
292                        $categs = str_replace("!!max_categ!!",count($this->descriptors),$categs);
293                }else{
294                        $categs=$dsi_desc_first_desc;
295                        $categs = str_replace('!!icateg!!', 0, $categs) ;
296                        $categs = str_replace('!!categ_id!!', "", $categs);
297                        $categs = str_replace('!!categ_libelle!!', "", $categs);
298                        $categs = str_replace('!!max_categ!!', 1, $categs);
299                }
300                return str_replace("!!cms_categs!!",$categs,$dsi_desc_field);
301        }
302
303        function gen_facette_selection(){
304                $facette = new bannette_facettes($this->id_bannette);
305                return $facette->gen_facette_selection();
306        }
307
308        // ---------------------------------------------------------------
309        //              show_form : affichage du formulaire de saisie
310        // ---------------------------------------------------------------
311        function show_form($type="pro") {
312       
313                global $msg, $charset;
314                global $dsi_bannette_form;
315                global $dsi_bannette_form_abo, $dsi_bannette_form_selvars;
316                global $nom_prenom_abo;
317                global $dsi_bannette_notices_template, $PMBuserid;
318                global $form_cb, $id_classement;
319                global $page, $nbr_lignes, $nb_per_page;
320               
321                if ($type=="abo") $dsi_bannette_form = $dsi_bannette_form_abo ;
322               
323                if($this->id_bannette) {
324                        $link_pagination = "";
325                        if($page > 1) {
326                                $link_pagination .= "&page=".$page."&nbr_lignes=".$nbr_lignes."&nb_per_page=".$nb_per_page;
327                        }
328                        $action = "./dsi.php?categ=bannettes&sub=$type&id_bannette=$this->id_bannette&suite=update&id_classement=$id_classement&form_cb=$form_cb$link_pagination";
329                        $link_duplicate =  "<input type='button' class='bouton' value='".$msg['bannette_duplicate_bouton']."' onclick='document.location=\"./dsi.php?categ=bannettes&sub=$type&id_bannette=$this->id_bannette&suite=duplicate&id_classement=$id_classement&form_cb=$form_cb$link_pagination\"' />";
330                        $link_annul = "<input type='button' class='bouton' value='$msg[76]' onClick=\"document.location='./dsi.php?categ=bannettes&sub=$type&id_bannette=&suite=search&id_classement=$id_classement&form_cb=$form_cb$link_pagination';\" />";
331                        $button_delete = "<input type='button' class='bouton' value='$msg[63]' onClick=\"confirm_delete();\">";
332                        $libelle = $msg['dsi_ban_form_modif'];
333                } else {
334                        $action = "./dsi.php?categ=bannettes&sub=$type&id_bannette=0&suite=update";
335                        $link_duplicate = "";
336                        $link_annul = "<input type='button' class='bouton' value='$msg[76]' onClick=\"history.go(-1);\" />";
337                        $libelle = $msg['dsi_ban_form_creat'];
338                        $button_delete ="";
339                        if ($this->id_bannette_origine) { //On vient d'une duplication
340                                $origine_bannette = new bannette($this->id_bannette_origine) ;
341                                $this->notice_tpl=$origine_bannette->notice_tpl;
342                        } else {
343                                $this->notice_tpl=$dsi_bannette_notices_template;
344                        }
345                }       
346               
347                $bannette_tpl_list=bannette_tpl::gen_tpl_select("bannette_tpl_num",$this->bannette_tpl_num);
348               
349                $dsi_bannette_form = str_replace('!!libelle!!', $libelle, $dsi_bannette_form);
350                $dsi_bannette_form = str_replace('!!type!!', $type, $dsi_bannette_form);
351       
352                $dsi_bannette_form = str_replace('!!id_bannette!!', $this->id_bannette, $dsi_bannette_form);
353                $dsi_bannette_form = str_replace('!!action!!', $action, $dsi_bannette_form);
354                $dsi_bannette_form = str_replace('!!link_duplicate!!', $link_duplicate, $dsi_bannette_form);
355                $dsi_bannette_form = str_replace('!!link_annul!!', $link_annul, $dsi_bannette_form);
356                $dsi_bannette_form = str_replace('!!nom_bannette!!', htmlentities($this->nom_bannette,ENT_QUOTES, $charset), $dsi_bannette_form);
357               
358                if ($type=="pro") $dsi_bannette_form = str_replace('!!num_classement!!', show_classement_utilise ('BAN', $this->num_classement, 0), $dsi_bannette_form);
359                else $dsi_bannette_form = str_replace('!!num_classement!!', "<input type=hidden name=num_classement value=0 />", $dsi_bannette_form);
360               
361                global $id_empr ;
362                $dsi_bannette_form = str_replace('!!id_empr!!', $id_empr, $dsi_bannette_form);
363               
364                $dsi_bannette_form = str_replace('!!comment_gestion!!', htmlentities($this->comment_gestion,ENT_QUOTES, $charset), $dsi_bannette_form);
365                $dsi_bannette_form = str_replace('!!comment_public!!', htmlentities($this->comment_public,ENT_QUOTES, $charset), $dsi_bannette_form);
366                $dsi_bannette_form = str_replace('!!bannette_tpl_list!!', $bannette_tpl_list, $dsi_bannette_form);
367                $dsi_bannette_form = str_replace('!!entete_mail!!', htmlentities($this->entete_mail,ENT_QUOTES, $charset), $dsi_bannette_form);
368                $dsi_bannette_form = str_replace('!!piedpage_mail!!', htmlentities($this->piedpage_mail,ENT_QUOTES, $charset), $dsi_bannette_form);
369                $dsi_bannette_form = str_replace('!!date_last_remplissage!!', htmlentities($this->aff_date_last_remplissage,ENT_QUOTES, $charset), $dsi_bannette_form);
370               
371                $date_clic   = "onClick=\"openPopUp('./select.php?what=calendrier&caller=saisie_bannette&date_caller=".substr(preg_replace('/-/', '', $this->date_last_envoi),0,8)."&param1=form_date_last_envoi&param2=form_aff_date_last_envoi&auto_submit=NO&date_anterieure=YES', 'date_last_envoi', 250, 300, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\"  ";
372                $date_last_envoi = "
373                                        <input type='hidden' name='form_date_last_envoi' value='".str_replace(' ', '', str_replace('-', '', str_replace(':', '', $this->date_last_envoi)))."' />
374                                        <input class='bouton' type='button' name='form_aff_date_last_envoi' value='".$this->aff_date_last_envoi."' ".$date_clic." />";
375                       
376                $dsi_bannette_form = str_replace('!!date_last_envoi!!', $date_last_envoi, $dsi_bannette_form);
377                $dsi_bannette_form = str_replace('!!archive_number!!', $this->archive_number, $dsi_bannette_form);
378                if ($type=="pro") $dsi_bannette_form = str_replace('!!proprio_bannette!!', htmlentities($msg['dsi_ban_no_proprio'],ENT_QUOTES, $charset), $dsi_bannette_form);
379                else $dsi_bannette_form = str_replace('!!proprio_bannette!!', htmlentities($nom_prenom_abo,ENT_QUOTES, $charset), $dsi_bannette_form);
380                               
381                if ($this->bannette_auto) $dsi_bannette_form = str_replace('!!bannette_auto!!', "checked", $dsi_bannette_form);
382                else $dsi_bannette_form = str_replace('!!bannette_auto!!', "", $dsi_bannette_form);
383                $dsi_bannette_form = str_replace('!!periodicite!!', htmlentities($this->periodicite,ENT_QUOTES, $charset), $dsi_bannette_form);
384                if ($this->diffusion_email) $dsi_bannette_form = str_replace('!!diffusion_email!!', "checked='checked'", $dsi_bannette_form);
385                else $dsi_bannette_form = str_replace('!!diffusion_email!!', "", $dsi_bannette_form);
386                $dsi_bannette_form = str_replace('!!nb_notices_diff!!', htmlentities($this->nb_notices_diff,ENT_QUOTES, $charset), $dsi_bannette_form);
387       
388                $dsi_bannette_form = str_replace('!!notice_tpl!!', notice_tpl_gen::gen_tpl_select("notice_tpl",$this->notice_tpl), $dsi_bannette_form);
389       
390                if ($this->statut_not_account) $dsi_bannette_form = str_replace('!!statut_not_account!!', "checked", $dsi_bannette_form);
391                else $dsi_bannette_form = str_replace('!!statut_not_account!!', "", $dsi_bannette_form);       
392                // group_type, group_pperso, group_facettes
393                if($this->group_type){
394                        $dsi_bannette_form = str_replace('!!checked_group_facette!!', " checked='checked' ", $dsi_bannette_form);
395                        $dsi_bannette_form = str_replace('!!checked_group_pperso!!', "", $dsi_bannette_form);
396                }else{
397                        $dsi_bannette_form = str_replace('!!checked_group_facette!!', "", $dsi_bannette_form);
398                        $dsi_bannette_form = str_replace('!!checked_group_pperso!!', " checked='checked' ", $dsi_bannette_form);               
399                }
400                $liste_p_perso = $this->p_perso->gen_liste_field("group_pperso",$this->group_pperso,$msg["dsi_ban_form_regroupe_pperso_no"]);                           
401                $dsi_bannette_form = str_replace('!!pperso_group!!', $liste_p_perso, $dsi_bannette_form);
402
403                if ($this->id_bannette_origine) { //On vient d'une duplication
404                        $origine_bannette = new bannette($this->id_bannette_origine) ;
405                        $dsi_bannette_form = str_replace('!!facette_group!!', $origine_bannette->gen_facette_selection(), $dsi_bannette_form);
406                } else {
407                        $dsi_bannette_form = str_replace('!!facette_group!!', $this->gen_facette_selection(), $dsi_bannette_form);
408                }
409                if($this->display_notice_in_every_group){
410                        $dsi_bannette_form = str_replace("!!display_notice_in_every_group!!", "checked", $dsi_bannette_form);
411                }else{
412                        $dsi_bannette_form = str_replace("!!display_notice_in_every_group!!", "", $dsi_bannette_form);
413                }
414               
415               
416                if ($type=="pro") {
417                        $requete = "SELECT id_categ_empr, libelle FROM empr_categ ORDER BY libelle ";
418                        $onchange="res=confirm('".htmlentities($msg['dsi_ban_confirm_modif_categ'],ENT_QUOTES, $charset)."'); if (res) this.form.majautocateg.value=1; else this.form.majautocateg.value=0;"; 
419                        $categ_lect_aff = gen_liste ($requete, "id_categ_empr", "libelle", "categorie_lecteurs", $onchange, $this->categorie_lecteurs, 0, $msg['dsi_ban_aucune_categ'], 0,$msg['dsi_ban_aucune_categ'], 0) ;
420                        $dsi_bannette_form = str_replace('!!categorie_lecteurs!!', $categ_lect_aff, $dsi_bannette_form);
421               
422                        $requete = "SELECT id_groupe, libelle_groupe FROM groupe ORDER BY libelle_groupe ";
423                        $onchange="res=confirm('".htmlentities($msg['dsi_ban_confirm_modif_groupe'],ENT_QUOTES, $charset)."'); if (res) this.form.majautogroupe.value=1; else this.form.majautogroupe.value=0;"; 
424                        $groupe_lect_aff = gen_liste ($requete, "id_groupe", "libelle_groupe", "groupe_lecteurs", $onchange, $this->groupe_lecteurs, 0, $msg['dsi_ban_aucun_groupe'], 0,$msg['dsi_ban_aucun_groupe'], 0) ;
425                        $dsi_bannette_form = str_replace('!!groupe_lecteurs!!', $groupe_lect_aff, $dsi_bannette_form);
426                } else {
427                        $dsi_bannette_form = str_replace('!!categorie_lecteurs!!', "<input type=hidden name=categorie_lecteurs value=0 />", $dsi_bannette_form);
428                        $dsi_bannette_form = str_replace('!!groupe_lecteurs!!', "<input type=hidden name=groupe_lecteurs value=0 />", $dsi_bannette_form);
429                }
430               
431                $dsi_bannette_form = str_replace('!!desc_fields!!', $this->build_sel_descriptor(), $dsi_bannette_form);
432               
433                $requete = "SELECT idcaddie, name FROM caddie where type='NOTI' "; 
434                if ($PMBuserid!=1) $requete.=" and (autorisations='$PMBuserid' or autorisations like '$PMBuserid %' or autorisations like '% $PMBuserid %' or autorisations like '% $PMBuserid') ";
435                $requete.=" ORDER BY name ";
436                $panier_bann_aff = gen_liste ($requete, "idcaddie", "name", "num_panier", "", $this->num_panier, 0, $msg['dsi_panier_aucun'], 0,$msg['dsi_panier_aucun'], 0) ;
437                $dsi_bannette_form = str_replace('!!num_panier!!', $panier_bann_aff, $dsi_bannette_form);
438               
439                switch ($this->limite_type) {
440                        case "D":
441                                $selectn = "" ;
442                                $selecti = "" ;
443                                $selectd = " SELECTED " ;
444                                break;
445                        case "I":
446                                $selectn = "" ;
447                                $selectd = "" ;
448                                $selecti = " SELECTED " ;
449                                break;
450                        default:
451                        case "":
452                                $selecti = "" ;
453                                $selectd = "" ;
454                                $selectn = " SELECTED " ;
455                                break;
456                        }
457                $limite_type = "<select name='limite_type' id='limite_type'>
458                                                <option value='' $selectn>".$msg['dsi_ban_non_cumul']."</option>
459                                                <option value='D' $selectd>".$msg['dsi_ban_cumul_jours']."</option>
460                                                <option value='I' $selecti>".$msg['dsi_ban_cumul_notice']."</option>
461                                                </select>";
462                $dsi_bannette_form = str_replace('!!limite_type!!', $limite_type, $dsi_bannette_form);
463                $dsi_bannette_form = str_replace('!!limite_nombre!!', $this->limite_nombre, $dsi_bannette_form);
464       
465                // update_type: se baser sur la date de création ou la date de mise à jour des notices ?
466                switch ($this->update_type) {
467                        case "C":
468                                $selectu = "" ;
469                                $selectc = " SELECTED " ;
470                                break;
471                        case "U":
472                                $selectc = "" ;
473                                $selectu = " SELECTED " ;
474                                break;
475                        default:
476                        case "":
477                                $selectu = "" ;
478                                $selectc = " SELECTED " ;
479                                break;
480                        }
481                $update_type = "<select name='update_type' id='update_type'>
482                                                <option value='C' $selectc>".$msg['dsi_ban_update_type_c']."</option>
483                                                <option value='U' $selectu>".$msg['dsi_ban_update_type_u']."</option>
484                                                </select>";
485                $dsi_bannette_form = str_replace('!!update_type!!', $update_type, $dsi_bannette_form);
486       
487                $exp = start_export::get_exports();
488                $liste_exports = "<select name='typeexport' onchange=\"if(this.selectedIndex==0) document.getElementById('liste_parametre').style.display='none'; else document.getElementById('liste_parametre').style.display=''; \">" ;
489                if (!$this->typeexport) $liste_exports .= "<option value='' selected>".$msg['dsi_ban_noexport']."</option>";
490                else $liste_exports .= "<option value=''>".$msg['dsi_ban_noexport']."</option>";
491                for ($i=0;$i<count($exp);$i++) {
492                        if ($this->typeexport==$exp[$i]["PATH"]) $liste_exports .= "<option value='".$exp[$i]["PATH"]."' selected>".$exp[$i]["NAME"]."</option>";
493                        else $liste_exports .= "<option value='".$exp[$i]["PATH"]."' >".$exp[$i]["NAME"]."</option>";
494                }
495                $liste_exports .= "</select>" ;
496                $dsi_bannette_form = str_replace('!!typeexport!!', $liste_exports,  $dsi_bannette_form);
497                $dsi_bannette_form = str_replace('!!prefixe_fichier!!', $this->prefixe_fichier,  $dsi_bannette_form);
498               
499                if($this->bannette_opac_accueil)$bannette_opac_accueil_check=" checked ";
500                else $bannette_opac_accueil_check="";
501                $dsi_bannette_form = str_replace('!!bannette_opac_accueil_check!!', $bannette_opac_accueil_check,  $dsi_bannette_form);
502               
503                if ($this->document_generate) $dsi_bannette_form = str_replace('!!document_generate!!', "checked=checked", $dsi_bannette_form);
504                else $dsi_bannette_form = str_replace('!!document_generate!!', "", $dsi_bannette_form);         
505                $dsi_bannette_form = str_replace('!!document_notice_tpl!!', notice_tpl_gen::gen_tpl_select("document_notice_tpl",$this->document_notice_tpl), $dsi_bannette_form);
506                if ($this->document_insert_docnum) $dsi_bannette_form = str_replace('!!document_insert_docnum!!', "checked=checked", $dsi_bannette_form);
507                else $dsi_bannette_form = str_replace('!!document_insert_docnum!!', "", $dsi_bannette_form);   
508                if ($this->document_group) $dsi_bannette_form = str_replace('!!document_group!!', "checked=checked", $dsi_bannette_form);
509                else $dsi_bannette_form = str_replace('!!document_group!!', "", $dsi_bannette_form);   
510                if ($this->document_add_summary) $dsi_bannette_form = str_replace('!!document_add_summary!!', "checked=checked", $dsi_bannette_form);
511                else $dsi_bannette_form = str_replace('!!document_add_summary!!', "", $dsi_bannette_form);
512               
513                $dsi_bannette_form = str_replace('!!delete!!', $button_delete,  $dsi_bannette_form);
514               
515                // afin de revenir où on était : $form_cb, le critère de recherche
516                $dsi_bannette_form = str_replace('!!form_cb!!', $form_cb,  $dsi_bannette_form);
517                if($this->param_export)
518                        $param=new export_param(EXP_DSI_CONTEXT, $this->param_export);
519                else $param=new export_param(EXP_DEFAULT_GESTION);
520                if(!$this->typeexport)
521                        $dsi_bannette_form = str_replace('!!display_liste_param!!', 'display:none',  $dsi_bannette_form);
522                else $dsi_bannette_form = str_replace('!!display_liste_param!!', '',  $dsi_bannette_form);
523                $dsi_bannette_form = str_replace('!!form_param!!', $param->check_default_param(),  $dsi_bannette_form); 
524               
525                //ajout champs emprunteur
526                $dsi_bannette_form = str_replace('!!info_empr!!', $dsi_bannette_form_selvars,  $dsi_bannette_form);
527               
528                print $dsi_bannette_form;
529        }
530
531        // ---------------------------------------------------------------
532        //              delete() : suppression
533        // ---------------------------------------------------------------
534        function delete() {
535                global $dbh;
536                global $msg;
537               
538                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
539       
540                $requete = "delete from bannette_abon WHERE num_bannette='$this->id_bannette'";
541                $res = pmb_mysql_query($requete, $dbh);
542                if ($this->proprio_bannette) {
543                        $requete = "select num_equation from bannette_equation WHERE num_bannette='$this->id_bannette'";
544                        $res = pmb_mysql_query($requete, $dbh);
545                        $temp = @pmb_mysql_fetch_object($res);
546                        $requete = "delete from equations WHERE id_equation='$temp->num_equation'";
547                        $res = pmb_mysql_query($requete, $dbh);
548                        }
549                       
550                $requete = "delete from bannette_equation WHERE num_bannette='$this->id_bannette'";
551                $res = pmb_mysql_query($requete, $dbh);
552                $requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette'";
553                $res = pmb_mysql_query($requete, $dbh);
554                $requete = "delete from bannettes WHERE id_bannette='$this->id_bannette'";
555                $res = pmb_mysql_query($requete, $dbh);
556       
557                $query = pmb_mysql_query("DELETE bannettes FROM bannettes LEFT JOIN empr ON proprio_bannette = id_empr WHERE id_empr IS NULL AND proprio_bannette !=0");
558                $query = pmb_mysql_query("DELETE equations FROM equations LEFT JOIN empr ON proprio_equation = id_empr WHERE id_empr IS NULL AND proprio_equation !=0 ");
559                $query = pmb_mysql_query("DELETE bannette_equation FROM bannette_equation LEFT JOIN bannettes ON num_bannette = id_bannette WHERE id_bannette IS NULL ");
560                $query = pmb_mysql_query("DELETE bannette_equation FROM bannette_equation LEFT JOIN equations on num_equation=id_equation WHERE id_equation is null");
561                $query = pmb_mysql_query("DELETE bannette_abon FROM bannette_abon LEFT JOIN empr on num_empr=id_empr WHERE id_empr is null");
562                $query = pmb_mysql_query("DELETE bannette_abon FROM bannette_abon LEFT JOIN bannettes ON num_bannette=id_bannette WHERE id_bannette IS NULL ");
563                $del = "delete from bannettes_descriptors where num_bannette = '".$this->id_bannette."'";
564                pmb_mysql_query($del);
565                $facette = new bannette_facettes($this->id_bannette);
566                $facette->delete();
567        }
568
569
570        // ---------------------------------------------------------------
571        //              update
572        // ---------------------------------------------------------------
573        function update($temp) {
574       
575                global $dbh;
576                global $msg;
577                global $max_categ;
578                global $group_type;
579               
580                if ($this->id_bannette) {
581                        // update
582                        $req = "UPDATE bannettes set ";
583                        $clause = " WHERE id_bannette='".$this->id_bannette."'";
584                } else {
585                        $req = "insert into bannettes set date_last_remplissage=sysdate(), ";
586                        $clause = "";
587                }       
588                $req.="num_classement='$temp->num_classement',";
589                $req.="nom_bannette='$temp->nom_bannette',";
590                $req.="comment_gestion='$temp->comment_gestion',";     
591                $req.="comment_public='$temp->comment_public',"; 
592                $req.="bannette_tpl_num='$temp->bannette_tpl_num',"; 
593                $req.="entete_mail='$temp->entete_mail',"; 
594                $req.="piedpage_mail='$temp->piedpage_mail',"; 
595                $req.="notice_tpl='$temp->notice_tpl',"; 
596                $req.="proprio_bannette='$temp->proprio_bannette',";   
597                $req.="bannette_auto='$temp->bannette_auto',";
598                $req.="periodicite='$temp->periodicite',";
599                $req.="diffusion_email='$temp->diffusion_email',";     
600                $req.="statut_not_account='$temp->statut_not_account',";       
601                $req.="nb_notices_diff='$temp->nb_notices_diff',";     
602                $req.="categorie_lecteurs='$temp->categorie_lecteurs',";
603                $req.="groupe_lecteurs='$temp->groupe_lecteurs',";
604                $req.="update_type='$temp->update_type',";
605                $req.="num_panier='$temp->num_panier',";
606                $req.="limite_type='$temp->limite_type',";
607                $req.="limite_nombre='$temp->limite_nombre',";
608                $req.="typeexport='$temp->typeexport',";
609                $req.="prefixe_fichier='$temp->prefixe_fichier',";
610                $req.="group_type='$group_type',";
611                $req.="group_pperso='$temp->group_pperso',";
612                $req.="display_notice_in_every_group='$temp->display_notice_in_every_group',";
613                $req.="archive_number='$temp->archive_number',";
614                $req.="param_export='".addslashes(serialize($temp->param_export))."',";
615                $req.="document_generate='$temp->document_generate',";
616                $req.="document_notice_tpl='$temp->document_notice_tpl',";
617                $req.="document_insert_docnum='$temp->document_insert_docnum',";
618                $req.="document_group='$temp->document_group',";
619                $req.="document_add_summary='$temp->document_add_summary',";
620                $req.="bannette_opac_accueil='$temp->bannette_opac_accueil',";
621                if (!$temp->date_last_envoi) $req.="date_last_envoi=sysdate() ";
622                        else $req.="date_last_envoi='".construitdateheuremysql($temp->date_last_envoi)."' ";
623                $req.=$clause ;
624                $res = pmb_mysql_query($req, $dbh);
625                if (!$this->id_bannette) $this->id_bannette = pmb_mysql_insert_id() ;
626               
627                $this->descriptors=array();
628                for ($i=0 ; $i<$max_categ ; $i++){
629                        $categ_id = 'f_categ_id'.$i;
630                        global $$categ_id;
631                        if($$categ_id > 0){
632                                $this->descriptors[] = $$categ_id;
633                        }
634                }
635                $del = "delete from bannettes_descriptors where num_bannette = '".$this->id_bannette."'";
636                pmb_mysql_query($del);
637                for($i=0 ; $i<count($this->descriptors) ; $i++){
638                        $rqt = "insert into bannettes_descriptors set num_bannette = '".$this->id_bannette."', num_noeud = '".$this->descriptors[$i]."', bannette_descriptor_order='".$i."'";
639                        pmb_mysql_query($rqt);
640                }
641                $facette = new bannette_facettes($this->id_bannette);
642                $facette->save();
643        }
644
645        // ---------------------------------------------------------------
646        //              purger() : après remplissage, vider ce qui dépasse selon le type de cumul de la bannette
647        // ---------------------------------------------------------------
648        function purger() {
649                global $dbh;
650                global $msg;
651                global $gestion_acces_active,$gestion_acces_empr_notice;
652               
653                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
654       
655                //purge pour les bannettes privees des notices ne devant pas etre diffusees
656                if ($this->proprio_bannette && $gestion_acces_active==1 && $gestion_acces_empr_notice==1){
657                        $ac = new acces();
658                        $dom_2 = $ac->setDomain(2);
659                        $acces_j = $dom_2->getJoin($this->proprio_bannette,'4=0','num_notice');
660                       
661                        $q="delete from bannette_contenu using bannette_contenu $acces_j WHERE num_bannette='$this->id_bannette' ";
662                        pmb_mysql_query($q,$dbh);
663                }
664                       
665               
666                switch ($this->limite_type) {
667                        case "D":
668                                $requete = "select num_notice from bannette_contenu WHERE num_bannette='$this->id_bannette' and ";
669                                $requete .= " date_add(date_ajout, INTERVAL ".$this->limite_nombre." DAY)<sysdate() ";
670                                $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
671                                $tab = array();
672                                while ($obj=pmb_mysql_fetch_object($res)) $tab[]=$obj->num_notice ;
673                                $notice_suppr=implode(",",$tab);
674                                if ($notice_suppr) {
675                                        if ($this->num_panier) {
676                                                $requete = "delete from caddie_content WHERE caddie_id='$this->num_panier' and object_id in (".$notice_suppr.") ";
677                                                $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
678                                        }
679                                        $requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette' and num_notice in (".$notice_suppr.") ";
680                                        $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
681                                }
682                                break;
683                        case "I":
684                                $tab = array();
685                                // selection des ## dernières notices, celles qu'il faut absolument garder
686                                $requete = "select num_notice from bannette_contenu, notices WHERE num_bannette='$this->id_bannette' and notice_id=num_notice order by date_ajout DESC, update_date DESC ";
687                                $requete .= " limit $this->limite_nombre ";
688                                $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
689                                while ($obj=pmb_mysql_fetch_object($res)) $tab[]=$obj->num_notice ;
690                               
691                                // selection des notices ajoutées depuis moins d'un jour
692                                $requete = "select num_notice from bannette_contenu WHERE num_bannette='$this->id_bannette' and ";
693                                $requete .= " date_add(date_ajout, INTERVAL 1 DAY)>=sysdate() ";
694                                $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
695                                while ($obj=pmb_mysql_fetch_object($res)) $tab[]=$obj->num_notice ;
696       
697                                // suppression de tout ce qui dépasse
698                                $notice_suppr=implode(",",$tab);
699                                if ($notice_suppr) {
700                                        if ($this->num_panier) {
701                                                $requete = "delete from caddie_content WHERE caddie_id='$this->num_panier' and object_id not in (".$notice_suppr.") ";
702                                                $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
703                                        }
704                                        $requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette' and num_notice not in (".$notice_suppr.") ";
705                                        $res = pmb_mysql_query($requete, $dbh) or die(pmb_mysql_error()."<br />$requete");
706                                }
707                                break;
708                        default:
709                        case "":
710                                break;
711                }
712                $this->compte_elements() ;
713        }
714
715        // ---------------------------------------------------------------
716        //              vider() : vider le contenu de la bannette
717        // ---------------------------------------------------------------
718        function vider() {
719                global $dbh;
720                global $msg;
721       
722                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
723       
724                $requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette'";
725                pmb_mysql_query($requete, $dbh);
726                $requete = "delete from caddie_content WHERE caddie_id='$this->num_panier'";
727                pmb_mysql_query($requete, $dbh);
728       
729                $this->compte_elements() ;
730        }
731
732        // ---------------------------------------------------------------
733        //              remplir() : remplir la bannette à partir des équations
734        // ---------------------------------------------------------------
735        function remplir() {
736                global $dbh;
737                global $msg;
738                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
739               
740                // récupérer les équations associées à la bannette
741                $equations = $this->get_equations() ;
742                $res_affichage = "<ul>" ;
743                if ($this->update_type=="C") $colonne_update_create="create_date";
744                        else $colonne_update_create="update_date";
745                for ($i=0 ; $i < sizeof($equations) ; $i++) {
746                        // pour chaque équation ajouter les notices trouvées au contenu de la bannette
747                        $equ = new equation ($equations[$i]) ;
748                        $search = new search() ;
749                        $search->unserialize_search($equ->requete) ;
750                       
751                        $table = $search->make_search() ;
752                        if($this->statut_not_account) 
753                                $temp_requete = "insert ignore into bannette_contenu (num_bannette, num_notice) (select ".$this->id_bannette." , notices.notice_id from $table , notices where notices.$colonne_update_create>='".$this->date_last_envoi."' and $table.notice_id=notices.notice_id )" ;
754                        else 
755                                $temp_requete = "insert ignore into bannette_contenu (num_bannette, num_notice) (select ".$this->id_bannette." , notices.notice_id from $table , notices, notice_statut where notices.$colonne_update_create>='".$this->date_last_envoi."' and $table.notice_id=notices.notice_id and statut=id_notice_statut and ((notice_visible_opac=1 and notice_visible_opac_abon=0) or (notice_visible_opac_abon=1 and notice_visible_opac=1))) " ;
756                        @pmb_mysql_query($temp_requete, $dbh);
757       
758                        $res_affichage .= "<li>".$equ->human_query."</li>" ;
759                       
760                    $temp_requete = "drop table $table " ;
761                        @pmb_mysql_query($temp_requete, $dbh);
762                }
763                // remplissage du panier avec le contenu de la bannette
764                if ($this->num_panier) {
765                        $temp_requete = "delete from caddie_content where caddie_id='".$this->num_panier."'" ;
766                        pmb_mysql_query($temp_requete, $dbh);
767                        $temp_requete = "insert into caddie_content (caddie_id, object_id) (select ".$this->num_panier.", num_notice from bannette_contenu where num_bannette=".$this->id_bannette.")" ;
768                        pmb_mysql_query($temp_requete, $dbh) or die (pmb_mysql_error().$temp_requete);
769                }
770               
771                $res_affichage .= "</ul>" ;
772                $this->compte_elements() ;
773                $temp_requete = "update bannettes set date_last_remplissage=sysdate() where id_bannette='".$this->id_bannette."' " ;
774                pmb_mysql_query($temp_requete, $dbh);
775                $this->purger();
776                return $res_affichage ;
777        }
778
779        // ---------------------------------------------------------------
780        //              construit_diff() :   
781        // ---------------------------------------------------------------
782        function construit_diff() {
783                global $base_path,$opac_url_base,$opac_default_style,$charset;
784               
785                $contenu = $this->construit_contenu_HTML() ;
786                $data_document=$this->data_document;
787                $contenu_total = $this->construit_contenu_HTML(0);
788                $data_document_total=$this->data_document;
789                $titre = $this->construit_liens_HTML() ;
790               
791                // récupération des fichiers de style commun
792                $css_path= $base_path."/opac_css/styles/common/dsi";
793                if (is_dir($css_path)) {
794                        if (($dh = opendir($css_path))) {
795                                while (($css_file = readdir($dh)) !== false) {
796                                        if(filetype($css_path."/".$css_file) =='file') {
797                                                if( substr($css_file, -4) == ".css" ) {
798                                                        $css.="<link rel='stylesheet' type='text/css' href='".$opac_url_base."styles/common/dsi/".$css_file."' title='lefttoright' />\n";
799                                                }
800                                        }
801                                }
802                                closedir($dh);
803                        }
804                }
805                // récupération des fichiers de style personnalisé
806                $css_path= $base_path."/opac_css/styles/".$opac_default_style."/dsi";
807                if (is_dir($css_path)) {
808                    if (($dh = opendir($css_path))) {
809                        while (($css_file = readdir($dh)) !== false) {         
810                            if(filetype($css_path."/".$css_file) =='file') {           
811                                if( substr($css_file, -4) == ".css" ) {
812                                        $css.="<link rel='stylesheet' type='text/css' href='".$opac_url_base."styles/".$opac_default_style."/dsi/".$css_file."' title='lefttoright' />\n";
813                                }       
814                            }   
815                        }
816                        closedir($dh);
817                    }
818                } 
819               
820                if($this->bannette_tpl_num){   
821                       
822                        $data_document['info']['header']=$titre;
823                        $data_document['info']['footer']=$this->piedpage_mail;
824                        $data_document['info']['opac_name']=$this->comment_public;
825                        $data_document['info']['name']=$this->nom_bannette;
826                       
827                        $data_document_total['info']['header']=$titre;
828                        $data_document_total['info']['footer']=$this->piedpage_mail;
829                        $data_document_total['info']['opac_name']=$this->comment_public;
830                        $data_document_total['info']['name']=$this->nom_bannette;
831                       
832                        $document_diffuse=bannette_tpl::render($this->bannette_tpl_num,$data_document);
833                        $document_diffuse_total=bannette_tpl::render($this->bannette_tpl_num,$data_document_total);
834                       
835                        $this->document_diffuse=$document_diffuse_total;
836                        if($this->document_generate && $this->aff_document){
837                                $this->document_diffuse = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>".$document_diffuse. "</body></html>";
838                        }               
839                        $this->texte_diffuse = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>";
840                        if ($this->diffusion_email) $this->texte_diffuse .= $document_diffuse;
841                        $this->texte_diffuse .= "</body></html>";
842                        $this->texte_diffuse = str_replace ("!!nb_notice!!",$this->nb_notices,$this->texte_diffuse) ;
843                        $this->texte_export = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>".$document_diffuse_total."</body></html>";
844                        return;
845                }
846               
847                if($this->document_generate && $this->aff_document){
848                        $this->document_diffuse = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>".$titre . $this->aff_document . $this->piedpage_mail. "</body></html>";
849                }
850       
851                $this->texte_diffuse = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>". $titre;
852                if ($this->diffusion_email) $this->texte_diffuse .= $contenu; 
853                $this->texte_diffuse .= $this->piedpage_mail;
854                $this->texte_diffuse .= "</body></html>";
855                $this->texte_diffuse = str_replace ("!!nb_notice!!",$this->nb_notices,$this->texte_diffuse) ;
856                $this->texte_export = "<html><head><META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=".$charset."'>$css</head><body>".$titre . $contenu_total. $this->piedpage_mail . "</body></html>";
857        }       
858
859        function get_empr_mail($id_empr){
860                global $dbh;
861               
862                $requete = "select empr_mail, bannette_mail from empr,  bannette_abon, bannettes ";
863                $requete .= "where num_bannette='".$this->id_bannette."' and num_empr=$id_empr and num_bannette=id_bannette and num_empr=id_empr";
864               
865                $res = pmb_mysql_query($requete, $dbh);
866                $emaildest="";
867                if($empr=pmb_mysql_fetch_object($res)) {
868                        $emaildest = $empr->empr_mail;
869                        if ($empr->bannette_mail && $emaildest){
870                                $destinataires = explode(";",$emaildest);
871                                $found=0;
872                                foreach($destinataires as $mail){
873                                        if($mail == $empr->bannette_mail){
874                                                $found=1;
875                                                break;                                 
876                                        }
877                                }
878                                if($found)$emaildest=$empr->bannette_mail;
879                        }               
880                }
881                return $emaildest;
882        }
883       
884        // ---------------------------------------------------------------
885        //              diffuser() : diffuser le contenu de la bannette 
886        // ---------------------------------------------------------------
887       
888        function diffuser() {
889                global $dbh;
890                global $msg, $charset, $base_path, $opac_connexion_phrase, $pmb_mail_delay;
891               
892                global $PMBusernom;
893                global $PMBuserprenom;
894                global $PMBuseremail;
895       
896                if (!$this->id_bannette) return $msg['dsi_ban_no_access']."<br />"; // impossible d'accéder à cette bannette
897                if (!$this->nb_notices && $this->diffusion_email) return $msg['dsi_ban_empty']."<br />"; // On demande à diffuser le contenu et la bannette vide : pas question d'envoyer du vide
898               
899                mysql_set_wait_timeout(3600);
900               
901                $this->construit_diff();
902                $texte_base = $this->texte_diffuse ;
903                if ($this->export_contenu) {
904                        $fic_params = $base_path."/admin/convert/imports/".$this->typeexport."/params.xml";
905                        $temppar = file_get_contents($fic_params);
906                        $params = _parser_text_no_function_($temppar,"PARAMS");
907                        if ($params["OUTPUT"][0]["SUFFIX"]) $ext=$params["OUTPUT"][0]["SUFFIX"];
908                        else $ext="fic";
909                        $pieces_jointes[0]["nomfichier"] = $this->prefixe_fichier.today().".".$ext ;
910                        $pieces_jointes[0]["contenu"] = $this->export_contenu ;
911                }
912                $nb_dest=0;
913                $nb_echec=0;
914                $nb_no_email=0;
915               
916                $headers  = "MIME-Version: 1.0\n";
917                $headers .= "Content-type: text/html; charset=".$charset."\n";
918               
919                $requete = "select id_empr, empr_cb, empr_mail, empr_nom, empr_prenom, empr_login, empr_password, if(empr_sexe=2,'".$msg["civilite_madame"]."',";
920                $requete .= "if(empr_sexe=1,'".$msg["civilite_monsieur"]."','".$msg["civilite_unknown"]."')) as empr_sexe, empr_adr1, empr_adr2, empr_cp, empr_ville,";
921                $requete .= "empr_pays, empr_tel1, empr_tel2, date_format(empr_date_adhesion, '".$msg["format_date"]."') as aff_empr_date_adhesion, date_format(empr_date_expiration, '".$msg["format_date"]."') as aff_empr_date_expiration,";
922                $requete .= "statut_libelle, allow_dsi, allow_dsi_priv, proprio_bannette, bannette_mail from empr, empr_statut, bannette_abon, bannettes ";
923                $requete .= "where num_bannette='".$this->id_bannette."' and num_empr=id_empr and empr_statut=idstatut and num_bannette=id_bannette ";
924                $requete .= "order by empr_nom, empr_prenom ";
925                $res = pmb_mysql_query($requete, $dbh);
926       
927                while(($empr=pmb_mysql_fetch_object($res))) {
928                        $emaildest = $empr->empr_mail;         
929                        if ($empr->bannette_mail && $emaildest){
930                                $destinataires = explode(";",$emaildest);
931                                $found=0;
932                                foreach($destinataires as $mail){
933                                        if($mail == $empr->bannette_mail){
934                                                $found=1;                                       
935                                                break;
936                                        }
937                                }
938                                if($found)$emaildest=$empr->bannette_mail;
939                        }
940                        $texte = $texte_base ;
941                        if ($emaildest) {
942                                if ((!$empr->allow_dsi && !$empr->proprio_bannette) || (!$empr->allow_dsi_priv && $empr->proprio_bannette)) {
943                                        //si la dsi n'est pas autorisée pour ce lecteur, affichage de l'info mais pas d'envoi
944                                        $nb_echec++;
945                                        $echec_email .= "- ".$empr->empr_nom." ".$empr->empr_prenom." (".$msg["statut_empr"]."' ".$empr->statut_libelle."')<br />" ;
946                                } else {       
947                                        //function mailpmb($to_nom="", $to_mail, $obj="", $corps="", $from_name="", $from_mail, $headers, $copie_CC="", $copie_BCC="", $faire_nl2br=0, $pieces_jointes=array()) {
948                                        $dates = time();
949                                        $login = $empr->empr_login;
950                                        $code=md5($opac_connexion_phrase.$login.$dates);       
951                                        $texte = str_replace('!!code!!',$code,$texte);
952                                        $texte = str_replace('!!login!!',$login,$texte);
953                                        $texte = str_replace('!!empr_login!!',$login,$texte);
954                                        $texte = str_replace('!!date_conex!!',$dates,$texte);
955                                        $texte = str_replace('!!empr_name!!',$empr->empr_nom,$texte);
956                                        $texte = str_replace('!!empr_first_name!!',$empr->empr_prenom,$texte);
957                                        $texte = str_replace('!!empr_sexe!!',$empr->empr_sexe,$texte);
958                                        $texte = str_replace('!!empr_cb!!',$empr->empr_cb,$texte);
959                                        $texte = str_replace('!!empr_mail!!',$empr->empr_mail,$texte);
960                                        if (strpos($texte,"!!empr_name_and_adress!!")) $texte=str_replace("!!empr_name_and_adress!!", nl2br($this->m_lecteur_adresse($empr)),$texte);
961                                        if (strpos($texte,"!!empr_all_information!!")) $texte=str_replace("!!empr_all_information!!", nl2br($this->m_lecteur_info($empr)),$texte);
962                                        $res_envoi=@mailpmb($empr->empr_prenom." ".$empr->empr_nom, $emaildest,$this->comment_public,$texte,$PMBuserprenom." ".$PMBusernom, $PMBuseremail, $headers, "", "", 0, $pieces_jointes);
963                                        if ($pmb_mail_delay*1) sleep((int)$pmb_mail_delay*1/1000);
964                                        if ($res_envoi) { 
965                                                $nb_dest++;
966                                        } else {
967                                                $nb_echec++;
968                                                $echec_email .= "- ".$empr->empr_nom." ".$empr->empr_prenom."<br />" ;
969                                        }
970                                }
971                        } else {
972                                $nb_no_email++;
973                                $no_email .= "- ".$empr->empr_nom." ".$empr->empr_prenom."<br />" ;
974                        }
975                }
976               
977                // remplissage du panier avec le contenu de la bannette
978                if ($this->num_panier) {
979                        $temp_requete = "delete from caddie_content where caddie_id='".$this->num_panier."'" ;
980                        pmb_mysql_query($temp_requete, $dbh);
981                        $temp_requete = "insert into caddie_content (caddie_id, object_id) (select ".$this->num_panier.", num_notice from bannette_contenu where num_bannette=".$this->id_bannette.")" ;
982                        pmb_mysql_query($temp_requete, $dbh) or die (pmb_mysql_error().$temp_requete);
983                }
984               
985                /* A commenter pour tests */ 
986                $temp_requete = "update bannettes set date_last_envoi=sysdate() where id_bannette='".$this->id_bannette."' " ;
987                $res = pmb_mysql_query($temp_requete, $dbh);
988       
989                $res_envoi = $msg["dsi_dif_res_dif"]."<ul><li>".$msg["dsi_dif_res_dif_mail_ok"].": $nb_dest </li>";
990                if ($nb_echec) 
991                        $res_envoi .= "<li>".$msg["dsi_dif_res_dif_mail_echec"].": $nb_echec <blockquote>$echec_email</blockquote></li>" ;
992                if ($nb_no_email) 
993                        $res_envoi .= "<li>".$msg["dsi_dif_res_dif_no_mail"].": $nb_no_email <blockquote>$no_email</blockquote></li>" ;
994                $res_envoi .= "</ul>" ;
995                if ($nb_echec || $nb_no_email) 
996                        $res_envoi .= "<script>openPopUp('./print_dsi.php?id_bannette=$this->id_bannette', 'Impression de DSI', 500, 400, -2, -2, 'toolbar=no, infobar=no, resizable=yes, scrollbars=yes')</script>" ;
997               
998                return $res_envoi ;
999        }
1000
1001        // ---------------------------------------------------------------
1002        //              get_equations() : construire un tableau des équations associées 
1003        // ---------------------------------------------------------------
1004        function get_equations() {
1005                global $dbh;
1006                global $msg;
1007               
1008                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
1009       
1010                $requete = "select num_equation from bannette_equation, equations WHERE num_bannette='$this->id_bannette' and id_equation=num_equation ";
1011                $res = pmb_mysql_query($requete, $dbh);
1012                while($equ=pmb_mysql_fetch_object($res)) {
1013                        $tab_equ[] = $equ->num_equation ;
1014                }
1015                return $tab_equ ;
1016        }
1017
1018        // ---------------------------------------------------------------
1019        // affichage du contenu complet d'une bannette
1020        // ---------------------------------------------------------------
1021        function aff_contenu_bannette ($url_base="", $no_del=false ) {
1022                global $msg;
1023                global $dbh;
1024                global $begin_result_liste, $end_result_liste;
1025                global $end_result_list;
1026                global $url_base_suppr_bannette ;
1027       
1028                $return_affichage = "";
1029                $url_base_suppr_bannette = $url_base ;
1030       
1031                $cb_display = "
1032                        <div id=\"el!!id!!Parent\" class=\"notice-parent\">
1033                        <span class=\"notice-heada\">!!heada!!</span>
1034                        <br />
1035                        </div>
1036                        ";
1037       
1038                $requete = "SELECT num_notice FROM bannette_contenu where num_bannette='".$this->id_bannette."' ";
1039       
1040                $liste=array();
1041                $result = @pmb_mysql_query($requete, $dbh);
1042                if(pmb_mysql_num_rows($result)) {
1043                        while ($temp = pmb_mysql_fetch_object($result)) {
1044                                if($this->group_pperso) {                       
1045                                        $this->p_perso->get_values($temp->num_notice);
1046                                        $values = $this->p_perso->values;
1047                                        foreach ( $values as $field_id => $vals ) {
1048                                                if ($this->group_pperso==$field_id) {   
1049                                                        break;
1050                                                }
1051                                        }                               
1052                                        $liste_group[$vals[0]][] = $temp->num_notice; 
1053                                }
1054                                else $liste[] = array('num_notice' => $temp->num_notice) ; 
1055                        }       
1056                }
1057                if(count($liste_group)) {
1058                        foreach($liste_group as $list_notice) {
1059                                foreach($list_notice as $num_notice) {
1060                                        $liste[] = array('num_notice' => $num_notice) ;         
1061                                }                       
1062                        }
1063                }
1064       
1065                if(!sizeof($liste) || !is_array($liste)) {
1066                        return $msg['dsi_ban_empty'];
1067                } else {
1068                        // boucle de parcours des notices trouvées
1069                        // inclusion du javascript de gestion des listes dépliables
1070                        // début de liste
1071                        $return_affichage .= $begin_result_liste;
1072                        //Affichage du lien impression et panier
1073                       
1074                        while(list($cle, $object) = each($liste)) {
1075                               
1076                                // affichage de la liste des notices sous la forme 'expandable'
1077                                $requete = "SELECT * FROM notices WHERE notice_id='".$object['num_notice']."' ";
1078                                $fetch = pmb_mysql_query($requete, $dbh);
1079                                if (pmb_mysql_num_rows($fetch)) {
1080                                        $notice = pmb_mysql_fetch_object($fetch);
1081                                        if($notice->niveau_biblio != 's' && $notice->niveau_biblio != 'a') {
1082                                                // notice de monographie
1083                                                $link = './catalog.php?categ=isbd&id=!!id!!';
1084                                                $link_expl = './catalog.php?categ=edit_expl&id=!!notice_id!!&cb=!!expl_cb!!&expl_id=!!expl_id!!'; 
1085                                                $link_explnum = './catalog.php?categ=edit_explnum&id=!!notice_id!!&explnum_id=!!explnum_id!!';
1086                                                if (!$no_del) 
1087                                                        $lien_suppr_cart = "<a href='$url_base&suite=suppr_notice&num_notice=$notice->notice_id&id_bannette=$this->id_bannette'><img src='./images/basket_empty_20x20.gif' alt='basket' title=\"".$msg['caddie_icone_suppr_elt']."\" /></a> $marque_flag";
1088                                                else 
1089                                                        $lien_suppr_cart = "" ;
1090                                                $display = new mono_display($notice, 6, $link, 1, $link_expl, $lien_suppr_cart, $link_explnum );
1091                                                $return_affichage .= $display->result;
1092                                        } else {
1093                                                // on a affaire à un périodique
1094                                                // préparation des liens pour lui
1095                                                $link_serial = './catalog.php?categ=serials&sub=view&serial_id=!!id!!';
1096                                                $link_analysis = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id=!!bul_id!!&art_to_show=!!id!!';
1097                                                $link_bulletin = './catalog.php?categ=serials&sub=bulletinage&action=view&bul_id=!!id!!';
1098                                                if (!$no_del) 
1099                                                        $lien_suppr_cart = "<a href='$url_base&suite=suppr_notice&num_notice=$notice->notice_id&id_bannette=$this->id_bannette'><img src='./images/basket_empty_20x20.gif' alt='basket' title=\"".$msg['caddie_icone_suppr_elt']."\" /></a> $marque_flag";
1100                                                else 
1101                                                        $lien_suppr_cart = "" ;
1102                                                $link_explnum = "./catalog.php?categ=serials&sub=analysis&action=explnum_form&bul_id=!!bul_id!!&analysis_id=!!analysis_id!!&explnum_id=!!explnum_id!!";
1103                                                $serial = new serial_display($notice, 6, $link_serial, $link_analysis, $link_bulletin, $lien_suppr_cart, $link_explnum, 0);
1104                                                $return_affichage .= $serial->result;
1105                                        }
1106                                }
1107                        } // fin de liste
1108                        $return_affichage .= $end_result_liste;
1109                }
1110                $return_affichage .= "<br />" ;
1111                return $return_affichage ;
1112        }
1113
1114        // ---------------------------------------------------------------
1115        //              suppr_notice() : suppression d'une notice d'une bannette
1116        // ---------------------------------------------------------------
1117        function suppr_notice($num_notice) {
1118                global $dbh, $msg;
1119       
1120                if (!$this->id_bannette) return $msg['dsi_ban_no_access']; // impossible d'accéder à cette bannette
1121       
1122                $requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette' and num_notice='$num_notice'";
1123                $res = pmb_mysql_query($requete, $dbh);
1124        }
1125       
1126        function clean_archive(){
1127                global $dbh;
1128                // purge des archives au dela de $this->archive_number ou si a 0
1129                if(!$this->archive_number){
1130                        $req="delete from dsi_archive where num_banette_arc='".$this->id_bannette."' ";
1131                        pmb_mysql_query($req, $dbh);
1132                }else{
1133                        $date_arc_list_to_delete=array();
1134                        $nb=0;
1135                        $req="select distinct date_diff_arc from dsi_archive where num_banette_arc='".$this->id_bannette."' order by date_diff_arc desc";
1136                        $res_arc=pmb_mysql_query($req, $dbh);
1137                        while (($r = pmb_mysql_fetch_object($res_arc))){
1138                                if($nb++ >= $this->archive_number){
1139                                        $date_arc_list_to_delete[]=$r->date_diff_arc;
1140                                }
1141                        }
1142                        foreach($date_arc_list_to_delete as $date_arc){
1143                                $req="delete from dsi_archive where num_banette_arc='".$this->id_bannette."' and date_diff_arc='".$date_arc."'";
1144                                pmb_mysql_query($req, $dbh);                   
1145                        }
1146                }       
1147        }
1148
1149        // ---------------------------------------------------------------
1150        //              construit_contenu_HTML() : Préparation du contenu du mail ou du bulletin
1151        // ---------------------------------------------------------------
1152        function construit_contenu_HTML ($use_limit=1) {
1153                global $dbh;
1154                global $msg;
1155                global $opac_url_base, $use_opac_url_base ;
1156                global $deflt2docs_location;
1157                global $suite;
1158               
1159                global $url_base_opac;
1160                $url_base_opac = $opac_url_base."index.php?database=".DATA_BASE."&lvl=notice_display&id=";
1161                $use_opac_url_base=true;
1162                // pour URL image vue de l'extérieur
1163                global $prefix_url_image ;
1164                global $depliable ;
1165                $depliable = 0 ;
1166                $prefix_url_image = $opac_url_base ;
1167       
1168                global $dsi_bannette_notices_order ;
1169                $this->data_document=array();
1170               
1171                if (!$dsi_bannette_notices_order) $dsi_bannette_notices_order="index_serie, tnvol, index_sew";
1172                if ($this->nb_notices_diff && $use_limit) $limitation = " LIMIT $this->nb_notices_diff " ;
1173               
1174                // purge des archives au dela de $this->archive_number ou si a 0
1175                $this->clean_archive();
1176               
1177                $requete = "select num_notice from bannette_contenu, notices where num_bannette='".$this->id_bannette."' and notice_id=num_notice order by $dsi_bannette_notices_order $limitation ";
1178                $resultat = pmb_mysql_query($requete, $dbh) or die($requete." ".pmb_mysql_error());
1179                // paramétrage :
1180                $environement["short"] = 6 ;
1181                $environement["ex"] = 0 ;
1182                $environement["exnum"] = 1 ;
1183               
1184                if (($this->nb_notices_diff >= $this->nb_notices) || (!$this->nb_notices_diff)) $nb_envoyees = $this->nb_notices ;
1185                else $nb_envoyees = $this->nb_notices_diff ;
1186       
1187                $resultat_aff .= "<span class=\"dsi_hide_for_emails\"><hr />";
1188                $resultat_aff .= sprintf($msg["dsi_diff_n_notices"],$nb_envoyees, $this->nb_notices);
1189                $resultat_aff .= "<hr /></span>";
1190               
1191                if($this->notice_tpl){
1192                        $noti_tpl=new notice_tpl_gen($this->notice_tpl);
1193                }
1194                $liste=array();
1195                $liste_group=array();
1196                $notice_group=array();
1197                if(pmb_mysql_num_rows($resultat)) {
1198                        while (($temp = pmb_mysql_fetch_object($resultat))) {
1199                                // Si un champ perso est donné comme critère de regroupement
1200                                if($this->group_pperso && $this->group_type!=1) {
1201                                        $this->p_perso->get_values($temp->num_notice);
1202                                        $values = $this->p_perso->values;
1203                                        $trouve = false;
1204                                        foreach ( $values as $field_id => $vals ) {
1205                                                if ($this->group_pperso==$field_id) {           
1206                                                       
1207                                                        foreach($vals as $cpVal){
1208                                                                $notice_group[$temp->num_notice][] = $this->p_perso->get_formatted_output(array($cpVal),$field_id);
1209                                                                if (!$cpVal) {
1210                                                                        $cpVal = "_no_value_";
1211                                                                }
1212                                                                $liste_group[$cpVal][] = $temp;
1213                                                                $trouve = true;
1214                                                        }
1215                                                       
1216                                                        $this->field_type = $this->p_perso->t_fields[$field_id]["TYPE"];
1217                                                        $this->field_id = $field_id;
1218                                                }
1219                                        }
1220                                        if (!$trouve) {
1221                                                $liste_group["_no_value_"][] = $temp;
1222                                                $notice_group[$temp->num_notice][] = $this->p_perso->get_formatted_output(array(),$field_id);
1223                                        }
1224                                }
1225                                else $liste[] = $temp ; 
1226                                // archivage
1227                                if($this->archive_number){
1228                                        $req="insert into dsi_archive set num_banette_arc='".$this->id_bannette."', num_notice_arc='".$temp->num_notice."', date_diff_arc=CURDATE()    ";
1229                                        pmb_mysql_query($req, $dbh);
1230                                }       
1231                        }
1232                }
1233               
1234                // groupement par facettes
1235                if (count($liste) && $this->group_type==1) {
1236                        $notice_ids=array();
1237                        foreach($liste as $r) $notice_ids[]=$r->num_notice;
1238                        $facette = new bannette_facettes($this->id_bannette);
1239                        if ($suite == "gen_document") {
1240                                if($this->bannette_tpl_num){
1241                                        $this->data_document['sommaires']=$facette->build_document_data($notice_ids,$this->document_notice_tpl);
1242                                        return;
1243                                } else {
1244                                        $this->aff_document=$facette->build_document($notice_ids,$this->document_notice_tpl,$this->document_add_summary,1);
1245                                }
1246                        } else {
1247                                if($this->bannette_tpl_num){
1248                                        $this->data_document['sommaires']=$facette->build_document_data($notice_ids,$this->document_notice_tpl);
1249                                        return;
1250                                } else {
1251                                        $this->aff_document=$facette->build_document($notice_ids,$this->document_notice_tpl,$this->document_add_summary);
1252                                }
1253                        }
1254                        if ($this->typeexport && !$use_limit) {
1255                                $this->export_contenu=cree_export_notices($this->liste_id_notice, start_export::get_id_by_path($this->typeexport), 1,$this->param_export) ;
1256                        }
1257                        return $resultat_aff.$this->aff_document ;
1258                }
1259                if(count($liste_group)) {
1260                        foreach($liste_group as $list_notice) {
1261                                $req_list=array();
1262                                foreach($list_notice as $r) {
1263                                        $req_list[]=$r->num_notice;                                     
1264                                }
1265                                $requete = "select notice_id as num_notice from  notices where  notice_id in(".implode(",",$req_list).") order by $dsi_bannette_notices_order ";
1266                                $res_tri = pmb_mysql_query($requete, $dbh) ;
1267                                while (($r = pmb_mysql_fetch_object($res_tri))) {
1268                                        $liste[] = $r; 
1269                                }                       
1270                        }
1271                }
1272                $group_printed=$tri_tpl=array();
1273                $memo_resultat_aff=$resultat_aff;       
1274               
1275                $group_printed_document=$tri_tpl_document=array();
1276                $aff_document="";
1277                if($this->document_notice_tpl && $this->document_generate){
1278                        $noti_tpl_document=new notice_tpl_gen($this->document_notice_tpl);
1279                }
1280                if ($liste) { 
1281                        $already_printed=array();
1282                        $already_printed_document=array();
1283                       
1284                        foreach($liste as $r) {                 
1285                                if($this->document_generate){                           
1286                                        $tpl_document="";
1287                                        if($this->document_notice_tpl) {
1288                                                $tpl_document=$noti_tpl_document->build_notice($r->num_notice,$deflt2docs_location);                                   
1289                                        }
1290                                        if(!$tpl_document) {
1291                                                $n=pmb_mysql_fetch_object(@pmb_mysql_query("select * from notices where notice_id=".$r->num_notice));
1292                                                global $use_opac_url_base; $use_opac_url_base=1;
1293                                                global $use_dsi_diff_mode; $use_dsi_diff_mode=1;
1294                                                if($this->statut_not_account)  $use_dsi_diff_mode=2;//On ne tient pas compte des statuts de notice pour la diffusion
1295                                                if ($n->niveau_biblio == 'm'|| $n->niveau_biblio == 'b') {
1296                                                        $mono=new mono_display($n,$environement["short"],"",$environement["ex"],"","","",0,1,$environement["exnum"],0,"",0,true,false);
1297                                                        $tpl_document.= "<a href='".$url_base_opac.$n->notice_id."&code=!!code!!&emprlogin=!!login!!&date_conex=!!date_conex!!'><b>".$mono->header."</b></a><br /><br />\r\n";
1298                                                        $tpl_document.= $mono->isbd;
1299                                                } elseif ($n->niveau_biblio == 's' || $n->niveau_biblio == 'a') {                                               
1300                                                        $serial = new serial_display($n, 6, "", "", "", "", "", 0,1,$environement["exnum"],0, false );
1301                                                        $tpl_document.= "<a href='".$url_base_opac.$n->notice_id."&code=!!code!!&emprlogin=!!login!!&date_conex=!!date_conex!!'><b>".$serial->header."</b></a><br /><br />\r\n";
1302                                                        $tpl_document.= $serial->isbd;
1303                                                }
1304                                                $tpl_document=str_replace('<!-- !!avis_notice!! -->', "", $tpl_document);
1305                                        }                               
1306                                        if($this->document_group) {
1307                                                if($notice_group[$r->num_notice]) {
1308                                                        foreach($notice_group[$r->num_notice] as $id=>$cpDisplay){
1309                                                       
1310                                                                if($this->display_notice_in_every_group){
1311                                                                        $already_printed_document=array();
1312                                                                }
1313                                                       
1314                                                                if(!$tri_tpl_document[$notice_group[$r->num_notice][$id]] || !in_array($tpl_document, $tri_tpl_document[$notice_group[$r->num_notice][$id]])){
1315                                                                        if(!in_array($r->num_notice, $already_printed_document)){
1316                                                                                $tri_tpl_document[$notice_group[$r->num_notice][$id]][]= $tpl_document;
1317                                                                                $already_printed_document[]=$r->num_notice;
1318                                                                        }
1319                                                                }
1320                                                       
1321                                                                if($cpDisplay && !in_array($cpDisplay, $group_printed_document)) {
1322                                                                        $group_printed_document[]=$cpDisplay;
1323                                                                }
1324                                                       
1325                                                        }
1326                                                }
1327                                        }else{
1328                                               
1329                                                if(!in_array($r->num_notice, $already_printed_document)){
1330                                                        if (!$this->notice_tpl) {
1331                                                                $aff_document.= $tpl_document."<hr />\r\n";
1332                                                        } else {
1333                                                                $aff_document.= $tpl_document."\r\n";
1334                                                        }
1335                                                        $already_printed_document[]=$r->num_notice;
1336                                                        if($this->bannette_tpl_num){
1337                                                                $this->data_document['sommaires'][0]['records'][]['render']=$tpl_document;
1338                                                        }
1339                                                }
1340                                        }       
1341                                }
1342                                // DSI classique par mail...
1343                                $tpl="";
1344                                if($this->notice_tpl) {
1345                                        $tpl=$noti_tpl->build_notice($r->num_notice,$deflt2docs_location);                             
1346                                }                       
1347                                if(!$tpl) {
1348                                        $n=pmb_mysql_fetch_object(@pmb_mysql_query("select * from notices where notice_id=".$r->num_notice));
1349                                        global $use_opac_url_base; $use_opac_url_base=1;
1350                                        global $use_dsi_diff_mode; $use_dsi_diff_mode=1;
1351                                        if($this->statut_not_account)  $use_dsi_diff_mode=2;//On ne tient pas compte des statuts de notice pour la diffusion
1352                                        if ($n->niveau_biblio == 'm'|| $n->niveau_biblio == 'b') {
1353                                                //function mono_display($id, $level=1,      $action='', $expl=1,    $expl_link='', $lien_suppr_cart="", $explnum_link='', $show_resa=0, $print=0, $show_explnum=1, $show_statut=0, $anti_loop='', $draggable=0, $no_link=false, $show_opac_hidden_fields=true )
1354                                                $mono=new mono_display($n,$environement["short"],"",$environement["ex"],"","","",0,1,$environement["exnum"],0,"",0,true,false);
1355                                                $tpl .= "<a href='".$url_base_opac.$n->notice_id."&code=!!code!!&emprlogin=!!login!!&date_conex=!!date_conex!!'><b>".$mono->header."</b></a><br /><br />\r\n";
1356                                                $tpl .= $mono->isbd;
1357                                        } elseif ($n->niveau_biblio == 's' || $n->niveau_biblio == 'a') {
1358                                                // level=2 pour ne pas rajouter le "in ..." sur le titre de la notice de dépouillement
1359                                                // function serial_display ($id, $level='1', $action_serial='', $action_analysis='', $action_bulletin='', $lien_suppr_cart="", $lien_explnum="", $bouton_explnum=1,$print=0,$show_explnum=1, $show_statut=0, $show_opac_hidden_fields=true ) {
1360                                                $serial = new serial_display($n, 6, "", "", "", "", "", 0,1,$environement["exnum"],0, false );
1361                                                $tpl .= "<a href='".$url_base_opac.$n->notice_id."&code=!!code!!&emprlogin=!!login!!&date_conex=!!date_conex!!'><b>".$serial->header."</b></a><br /><br />\r\n";
1362                                                $tpl .= $serial->isbd;
1363                                        }
1364                                        $tpl=str_replace('<!-- !!avis_notice!! -->', "", $tpl);
1365                                }
1366                                if($this->group_pperso) {
1367                                       
1368                                        foreach($notice_group[$r->num_notice] as $id=>$cpDisplay){
1369                                               
1370                                                if($this->display_notice_in_every_group){
1371                                                        $already_printed=array();
1372                                                }
1373                                               
1374                                                if(!$tri_tpl[$notice_group[$r->num_notice][$id]] || !in_array($tpl, $tri_tpl[$notice_group[$r->num_notice][$id]])){
1375                                                        if(!in_array($r->num_notice, $already_printed)){
1376                                                                $tri_tpl[$notice_group[$r->num_notice][$id]][]= $tpl;
1377                                                                $already_printed[]=$r->num_notice;
1378                                                        }
1379                                                }
1380                                               
1381                                                if($cpDisplay && !in_array($cpDisplay, $group_printed)) {
1382                                                        $group_printed[]=$cpDisplay;
1383                                                }
1384                                        }
1385                                }else{
1386                                        $resultat_aff.= $tpl;   
1387                                        if($this->bannette_tpl_num){
1388                                                $this->data_document['sommaires'][0]['records'][]['render']=$tpl;
1389                                        }               
1390                                        if(!$this->notice_tpl) $resultat_aff .= "<div class='hr'><hr /></div>\r\n";
1391                                        else $resultat_aff .= "<br />";
1392                                }       
1393                        }       
1394                }       
1395                // on retrie chaque goupe de notice selon le critère de tri de la DSI
1396               
1397                // il faut trier les regroupements par ordre alphabétique (si document à générer et groupement)
1398                $this->aff_document="";
1399                if($this->document_generate ){
1400                        if($this->document_group){
1401                                $aff_document="";
1402                       
1403                                $this->pmb_ksort($tri_tpl_document);   
1404                                $index=0;
1405                                $summary="";
1406                                global $group_separator;                       
1407                                global $notice_separator;
1408                                foreach ($tri_tpl_document as $titre => $liste) {                       
1409                                if($group_separator)$aff_document.=$group_separator;
1410                                else $aff_document.= "<div class='hr_group'><hr /></div>";                     
1411                                $index++;
1412                                if($this->bannette_tpl_num){
1413                                        $this->data_document['sommaires'][$index]['level']=1;
1414                                        $this->data_document['sommaires'][$index]['title']=$titre;
1415                                }
1416                                        $aff_document.= "<a name='[$index]'></a><h1>".$index." - ".$titre."</h1>";     
1417                                        $summary.="<a href='#[$index]' class='summary_elt'>".$index." - ".$titre."</a><br />"; 
1418                                       
1419                                        $nb=0; 
1420                                        foreach ($liste as $val) {
1421                                            $aff_document.=$val;
1422                                        if($this->bannette_tpl_num){
1423                                                $this->data_document['sommaires'][$index]['records'][$nb]['render']=$val;
1424                                        }
1425                                            if(++$nb < count($liste)){
1426                                                if(!$this->notice_tpl) {
1427                                                        if($notice_separator)$aff_document.=$notice_separator;
1428                                                        else $aff_document.="<div class='hr'><hr /></div>";
1429                                                } else {
1430                                                        $aff_document.="<br />";
1431                                                }       
1432                                            }
1433                                        }                       
1434                                        $aff_document.= "\r\n";                 
1435                                }
1436                                //$summary.="</div>";
1437                                if($this->document_add_summary){
1438                                        $aff_document="<a name='summary'></a><div class='summary'><br />".$summary."</div>".$aff_document;
1439                                }       
1440                                $this->aff_document=$aff_document;                             
1441                        }else{
1442                                $this->aff_document=$aff_document;                             
1443                        }
1444                }       
1445               
1446                // il faut trier les regroupements par ordre alphabétique
1447                if($this->group_pperso) {       
1448                        $resultat_aff=$memo_resultat_aff;
1449                        //ksort($tri_tpl);
1450                        $this->pmb_ksort($tri_tpl);     
1451                        $index=0;
1452                        $summary="";
1453                        foreach ($tri_tpl as $titre => $liste) {
1454                                global $group_separator;
1455                                global $notice_separator;
1456                        if($group_separator)$resultat_aff.=$group_separator;
1457                        else $resultat_aff.= "<div class='hr_group'><hr /></div>";     
1458                        $index++;
1459                        if($this->bannette_tpl_num){
1460                                $this->data_document['sommaires'][$index]['level']=1;
1461                                $this->data_document['sommaires'][$index]['title']=$titre;
1462                        }
1463                                $resultat_aff.= "<a name='[$index]'></a><h1>".$index." - ".$titre."</h1>";     
1464                                $summary.="<a href='#[$index]' class='summary_elt'>".$index." - ".$titre."</a><br />";         
1465                                $nb=0; 
1466                                foreach ($liste as $val) {
1467                                    $resultat_aff.=$val;
1468                                if($this->bannette_tpl_num){
1469                                        $this->data_document['sommaires'][$index]['records'][$nb]['render']=$val;
1470                                }
1471                                if(++$nb < count($liste)){
1472                                        if(!$this->notice_tpl) {
1473                                                if($notice_separator)$resultat_aff.=$notice_separator;
1474                                                else $resultat_aff.="<div class='hr'><hr /></div>";
1475                                        } else {
1476                                                $resultat_aff.="<br />";
1477                                        }
1478                                    }
1479                                }
1480                                $resultat_aff.= "\r\n";
1481                        }
1482                        if($this->document_add_summary){
1483                                $resultat_aff="<a name='summary'></a><div class='summary'><br />".$summary."</div>".$resultat_aff;
1484                        }               
1485                }
1486               
1487                if ($this->typeexport && !$use_limit) {
1488                        $this->export_contenu=cree_export_notices($this->liste_id_notice, start_export::get_id_by_path($this->typeexport), 1,$this->param_export) ;
1489                }
1490       
1491                // DEBUG
1492                if (false && $this->export_contenu) {
1493                        $fp = fopen ("$base_path/temp/exp_bannette_".$this->id_bannette.".exp","wb");
1494                        fwrite ($fp, $this->export_contenu);
1495                        fclose ($fp);
1496                }
1497       
1498                return $resultat_aff ;
1499        }
1500
1501        function pmb_ksort(&$table){
1502                $table_final=array();
1503                if ($this->field_type == 'list') {
1504                        if (is_array($table)) {
1505                                reset($table);
1506                                $tmp=array();
1507                                $requete = "select ordre, notices_custom_list_lib from notices_custom_lists";
1508                                $requete .= " where notices_custom_champ=".$this->field_id;
1509                                $res = pmb_mysql_query($requete);
1510                                while ($row = pmb_mysql_fetch_object($res)) {
1511                                        $this->group_pperso_order[$row->notices_custom_list_lib] = $row->ordre;
1512                                }
1513                                uksort($table, array(&$this,"cmp_pperso"));
1514                        }
1515                } else {
1516                        if (is_array($table)) {
1517                                reset($table);
1518                                $tmp=array();
1519                                foreach ($table as $key => $value ) {
1520                                $tmp[]=strtoupper(convert_diacrit($key));
1521                                $tmp_key[]=$key;
1522                                $tmp_contens[]=$value;
1523                                }       
1524                                asort($tmp);   
1525                                foreach ($tmp as $key=>$value ) {
1526                                $table_final[$tmp_key[$key]]=$tmp_contens[$key];
1527                                }
1528                                $table=$table_final;
1529                        }
1530                }               
1531        }
1532
1533        function cmp_pperso($a,$b) {
1534                if ($this->group_pperso_order[$a]>$this->group_pperso_order[$b]) return 1;
1535                if ($this->group_pperso_order[$a]<$this->group_pperso_order[$b]) return -1;
1536                return 0;
1537               
1538        }
1539       
1540        // ---------------------------------------------------------------
1541        //              construit_contenu_HTML() : Préparation du contenu du mail ou du bulletin
1542        // ---------------------------------------------------------------
1543        function construit_liens_HTML() {
1544                global $dbh;
1545                global $opac_url_base ;
1546                global $msg ;
1547               
1548                // $url_base_opac = $opac_url_base."empr.php?lvl=bannette!!empr_info_login!!";
1549                $url_base_opac = $opac_url_base."empr.php?lvl=bannette";
1550                $resultat_aff .= "<style type='text/css'>
1551                        body { 
1552                        font-size: 10pt;
1553                        font-family: verdana, geneva, helvetica, arial;
1554                        color:#000000;
1555                        background:#FFFFFF;
1556                        }
1557                        td {
1558                        font-size: 10pt;
1559                        font-family: verdana, geneva, helvetica, arial;
1560                        color:#000000;
1561                        }
1562                        th {
1563                        font-size: 10pt;
1564                        font-family: verdana, geneva, helvetica, arial;
1565                        font-weight:bold;
1566                        color:#000000;
1567                        background:#DDDDDD;
1568                        text-align:left;
1569                        }
1570                        hr {
1571                        border:none;
1572                        border-bottom:1px solid #000000;
1573                        }
1574                        h3 {
1575                        font-size: 12pt;
1576                        color:#000000;
1577                        }
1578                        </style>";
1579               
1580                $date_today = formatdate(today()) ;
1581                $public  = "<a href='$url_base_opac&id_bannette=".$this->id_bannette."&code=!!code!!&emprlogin=!!login!!&date_conex=!!date_conex!!'>";
1582                $public .= $this->comment_public." : &nbsp;".sprintf($msg["print_n_notices"],$this->nb_notices) ;
1583                $public .= "</a>";
1584       
1585                $entete = str_replace ("!!public!!",$public,$this->entete_mail) ;
1586                // pour le template de bannette privées
1587                if ($this->proprio_bannette) {
1588                        $equations = $this->get_equations();
1589                        if ($equations[0]) {
1590                                $equa = new equation($equations[0]);
1591                                $entete = str_replace ("!!equation!!",$equa->nom_equation,$entete) ;   
1592                        }
1593                } else {
1594                        $equations = $this->get_equations();
1595                        $equationTexte = "";
1596                        if($countEquations = count($equations)){
1597                                foreach($equations as $key=>$id){
1598                                        $equa = new equation($id);
1599                                        $equationTexte .= $equa->human_query;
1600                                        if($key != ($countEquations-1)){
1601                                                $equationTexte .= "<br>";
1602                                        }
1603                                }
1604                        }
1605                        $entete = str_replace ("!!equation!!",$equationTexte,$entete) ;
1606                }
1607                $entete = str_replace ("!!date!!",$date_today,$entete) ;
1608               
1609                return $entete ;
1610        }
1611
1612        // ---------------------------------------------------------------
1613        //              compte_elements() : méthode pour pouvoir recompter en dehors !
1614        // ---------------------------------------------------------------
1615        function compte_elements() {
1616                global $dbh ;
1617               
1618                $req_nb = "SELECT num_notice from bannette_contenu WHERE num_bannette='".$this->id_bannette."' " ;
1619                $res_nb = pmb_mysql_query($req_nb, $dbh) or die ($req_nb."<br /> in bannette.class.php : ".pmb_mysql_error());
1620                $this->nb_notices = pmb_mysql_num_rows($res_nb);
1621                //initialisation du tableau à chaque fois que cette fonction est appelée pour éviter un mauvais cumul
1622                $this->liste_id_notice = array();
1623                while ($res = pmb_mysql_fetch_object($res_nb)) {
1624                        $this->liste_id_notice[]=$res->num_notice ;
1625                }
1626               
1627                $req_nb = "SELECT count(1) as nb_abonnes from bannette_abon WHERE num_bannette='".$this->id_bannette."' " ;
1628                $res_nb = pmb_mysql_query($req_nb, $dbh) or die ($req_nb."<br /> in bannette.class.php : ".pmb_mysql_error());
1629                $res = pmb_mysql_fetch_object($res_nb);
1630                $this->nb_abonnes = $res->nb_abonnes ;
1631                $requete = "SELECt if(date_last_remplissage>date_last_envoi,1,0) as alert_diff ";
1632                $requete .= "FROM bannettes WHERE id_bannette='".$this->id_bannette."' " ;
1633                $result = pmb_mysql_query($requete, $dbh) or die ($requete."<br /> in bannette.class.php : ".pmb_mysql_error());
1634                $temp = pmb_mysql_fetch_object($result);
1635                $this->alert_diff = $temp->alert_diff ; 
1636                       
1637        }
1638       
1639        function m_lecteur_adresse($empr) {
1640       
1641                global $msg;
1642       
1643                $res_final=array();
1644       
1645                if ($empr->empr_prenom) $empr->empr_nom=$empr->empr_prenom." ".$empr->empr_nom;
1646                $res_final[]=$empr->empr_nom;
1647       
1648                if ($empr->empr_adr2 != "") $empr->empr_adr1 = $empr->empr_adr1."\n" ;
1649                if (($empr->empr_cp != "") || ($empr->empr_ville != "")) $empr->empr_adr2 = $empr->empr_adr2."\n" ;
1650                $adr = $empr->empr_adr1.$empr->empr_adr2.$empr->empr_cp." ".$empr->empr_ville ;
1651                if ($empr->empr_pays != "") $adr = $adr."\n".$empr->empr_pays ;
1652                $res_final[]=$adr;
1653       
1654                if ($empr->empr_tel1 != "") {
1655                        $tel = $tel.$msg['fpdf_tel1']." ".$empr->empr_tel1." " ;
1656                }
1657                if ($empr->empr_tel2 != "") {
1658                        $tel = $tel.$msg['fpdf_tel2']." ".$empr->empr_tel2;
1659                }
1660                if ($empr->empr_mail != "") {
1661                        if ($tel) $tel = $tel."\n" ;
1662                        $mail = $msg['fpdf_email']." ".$empr->empr_mail;
1663                }
1664       
1665                $res_final[]="\n".$tel.$mail;
1666       
1667                return implode("\n",$res_final);
1668        }
1669       
1670        function m_lecteur_info($empr) {
1671       
1672                global $msg;
1673       
1674                $res_final=array();
1675       
1676                $requete = "SELECT group_concat(libelle_groupe SEPARATOR ', ') as_all_groupes, 1 as rien from groupe join empr_groupe on groupe_id=id_groupe WHERE lettre_rappel_show_nomgroup=1 and empr_id='".$empr->id_empr."' group by rien ";
1677                $lib_all_groupes=pmb_sql_value($requete);
1678                if ($lib_all_groupes) $lib_all_groupes="\n".$lib_all_groupes;
1679       
1680                if ($empr->empr_prenom) $empr->empr_nom=$empr->empr_prenom." ".$empr->empr_nom;
1681                $res_final[]=$empr->empr_nom;
1682       
1683                if ($empr->empr_adr2 != "") $empr->empr_adr1 = $empr->empr_adr1."\n" ;
1684                if (($empr->empr_cp != "") || ($empr->empr_ville != "")) $empr->empr_adr2 = $empr->empr_adr2."\n" ;
1685                $adr = $empr->empr_adr1.$empr->empr_adr2.$empr->empr_cp." ".$empr->empr_ville ;
1686                if ($empr->empr_pays != "") $adr = $adr."\n".$empr->empr_pays ;
1687                $res_final[]=$adr;
1688       
1689                if ($empr->empr_tel1 != "") {
1690                        $tel = $tel.$msg['fpdf_tel1']." ".$empr->empr_tel1." " ;
1691                }
1692                if ($empr->empr_tel2 != "") {
1693                        $tel = $tel.$msg['fpdf_tel2']." ".$empr->empr_tel2;
1694                }
1695                if ($empr->empr_mail != "") {
1696                        if ($tel) $tel = $tel."\n" ;
1697                        $mail = $msg['fpdf_email']." ".$empr->empr_mail;
1698                }
1699       
1700                $res_final[]="\n".$tel.$mail.$lib_all_groupes;
1701                $res_final[]="";
1702                $res_final[]=$msg['fpdf_carte']." ".$empr->empr_cb;
1703                $res_final[]=$msg['fpdf_adherent']." ".$empr->aff_empr_date_adhesion." ".$msg['fpdf_adherent_au']." ".$empr->aff_empr_date_expiration ;
1704       
1705                return implode("\n",$res_final);
1706       
1707        }
1708} # fin de définition de la classe bannette
Note: See TracBrowser for help on using the repository browser.