id_bannette = $id;
$this->getData();
} else {
// la notice n'existe pas
$this->id_bannette = 0;
$this->getData();
}
}
// ---------------------------------------------------------------
// getData() : récupération infos
// ---------------------------------------------------------------
function getData() {
global $dbh;
global $msg;
if (!$this->id_bannette) {
// pas d'identifiant. on retourne un tableau vide
$this->id_bannette=0;
$this->num_classement = 1 ;
$this->nom_classement = "" ;
$this->nom_bannette="";
$this->comment_gestion="";
$this->comment_public="";
$this->entete_mail="";
$this->date_last_remplissage="";
$this->date_last_envoi=today();
$this->aff_date_last_remplissage="";
$this->aff_date_last_envoi=formatdate($this->date_last_envoi);
$this->proprio_bannette=0;
$this->bannette_auto=0;
$this->periodicite=0;
$this->diffusion_email=0;
$this->nb_notices_diff=0;
$this->categorie_lecteurs="";
$this->groupe_lecteurs="";
$this->update_type="C";
$this->nb_notices = 0 ;
$this->nb_abonnes = 0 ;
$this->alert_diff = 0 ;
$this->num_panier = 0 ;
$this->limite_type = '' ;
$this->limite_nombre = 0 ;
$this->typeexport = '';
$this->prefixe_fichier = "prefix_";
} else {
$requete = "SELECT id_bannette, num_classement, nom_bannette,comment_gestion,comment_public, ";
$requete .= "date_last_remplissage, date_format(date_last_remplissage, '".$msg["format_date_heure"]."') as aff_date_last_remplissage, ";
$requete .= "date_last_envoi, date_format(date_last_envoi, '".$msg["format_date_heure"]."') as aff_date_last_envoi, ";
$requete .= "proprio_bannette,bannette_auto,periodicite,diffusion_email, nb_notices_diff, categorie_lecteurs, groupe_lecteurs, update_type, entete_mail, num_panier, ";
$requete .= "limite_type, limite_nombre, typeexport, prefixe_fichier ";
$requete .= "FROM bannettes WHERE id_bannette='".$this->id_bannette."' " ;
$result = mysql_query($requete, $dbh) or die ($requete."
in bannette.class.php : ".mysql_error());
if(mysql_num_rows($result)) {
$temp = mysql_fetch_object($result);
$this->id_bannette = $temp->id_bannette ;
$this->num_classement = $temp->num_classement ;
$this->nom_bannette = $temp->nom_bannette ;
$this->comment_gestion = $temp->comment_gestion ;
$this->comment_public = $temp->comment_public ;
$this->entete_mail = $temp->entete_mail ;
$this->date_last_remplissage= $temp->date_last_remplissage ;
$this->date_last_envoi = $temp->date_last_envoi ;
$this->aff_date_last_remplissage = $temp->aff_date_last_remplissage ;
$this->aff_date_last_envoi = $temp->aff_date_last_envoi ;
$this->proprio_bannette = $temp->proprio_bannette ;
$this->bannette_auto = $temp->bannette_auto ;
$this->periodicite = $temp->periodicite ;
$this->diffusion_email = $temp->diffusion_email ;
$this->nb_notices_diff = $temp->nb_notices_diff;
$this->categorie_lecteurs = $temp->categorie_lecteurs ;
$this->groupe_lecteurs = $temp->groupe_lecteurs ;
$this->update_type = $temp->update_type ;
$this->num_panier = $temp->num_panier ;
$this->limite_type = $temp->limite_type ;
$this->limite_nombre = $temp->limite_nombre ;
$this->typeexport = $temp->typeexport ;
$this->prefixe_fichier = $temp->prefixe_fichier ;
$this->compte_elements();
$requete = "SELECt nom_classement FROM classements WHERE id_classement='".$this->num_classement."'" ;
$resultclass = mysql_query($requete, $dbh) or die ($requete."
in bannette.class.php : ".mysql_error());
if ($temp = mysql_fetch_object($resultclass)) $this->nom_classement = $temp->nom_classement ;
else $this->nom_classement = "" ;
} else {
// pas de bannette avec cette clé
$this->id_bannette=0;
$this->num_classement = 1 ;
$this->nom_classement = "" ;
$this->nom_bannette="";
$this->comment_gestion="";
$this->comment_public="";
$this->entete_mail="";
$this->date_last_remplissage="";
$this->date_last_envoi="";
$this->aff_date_last_remplissage="";
$this->aff_date_last_envoi="";
$this->proprio_bannette=0;
$this->bannette_auto=0;
$this->periodicite=0;
$this->diffusion_email=0;
$this->nb_notices_diff=0;
$this->categorie_lecteurs="";
$this->groupe_lecteurs="";
$this->update_type="C";
$this->nb_notices = 0 ;
$this->nb_abonnes = 0 ;
$this->num_panier = 0 ;
$this->limite_type = '' ;
$this->limite_nombre = 0 ;
$this->typeexport = '' ;
$this->prefixe_fichier = "prefix_";
}
}
}
// ---------------------------------------------------------------
// vider() : vider le contenu de la bannette
// ---------------------------------------------------------------
function vider() {
global $dbh;
global $msg;
if (!$this->id_bannette) return $msg[dsi_ban_no_access]; // impossible d'accéder à cette bannette
$requete = "delete from bannette_contenu WHERE num_bannette='$this->id_bannette'";
$res = mysql_query($requete, $dbh);
$this->compte_elements() ;
return $requete ;
}
// ---------------------------------------------------------------
// remplir() : remplir la bannette à partir des équations
// ---------------------------------------------------------------
function remplir() {
global $dbh;
global $msg;
global $gestion_acces_active,$gestion_acces_empr_notice;
if (!$this->id_bannette) return $msg[dsi_ban_no_access]; // impossible d'accéder à cette bannette
// récupérer les équations associées à la bannette
$equations = $this->get_equations() ;
$res_affichage = "
" ;
if ($this->update_type=="C") $colonne_update_create="create_date";
else $colonne_update_create="update_date";
for ($i=0 ; $i < sizeof($equations) ; $i++) {
// pour chaque équation ajouter les notices trouvées au contenu de la bannette
$equ = new equation ($equations[$i]) ;
$search = new search() ;
$search->unserialize_search($equ->requete) ;
$table = $search->make_search() ;
$temp_requete = "insert 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)) limit 300) " ;
$res = @mysql_query($temp_requete, $dbh);
$res_affichage .= "- ".$equ->human_query."
" ;
$temp_requete = "drop table $table " ;
$res = @mysql_query($temp_requete, $dbh);
}
$res_affichage .= "
" ;
$this->compte_elements() ;
$temp_requete = "update bannettes set date_last_remplissage=sysdate() where id_bannette='".$this->id_bannette."' " ;
$res = @mysql_query($temp_requete, $dbh);
//purge pour les bannettes privees des notices ne devant pas etre diffusees
if ($this->proprio_bannette && $gestion_acces_active==1 && $gestion_acces_empr_notice==1){
$ac = new acces();
$dom_2 = $ac->setDomain(2);
$acces_j = $dom_2->getJoin($this->proprio_bannette,'4=0','num_notice');
$q="delete from bannette_contenu using bannette_contenu $acces_j WHERE num_bannette='$this->id_bannette' ";
mysql_query($q,$dbh);
}
return $res_affichage ;
}
// ---------------------------------------------------------------
// construit_diff() :
// ---------------------------------------------------------------
function construit_diff($texte="") {
global $charset;
$contenu = $this->construit_contenu_HTML() ;
$contenu_total = $this->construit_contenu_HTML(0) ;
$titre = $this->construit_liens_HTML($texte) ;
$this->texte_diffuse = "". $titre;
if ($this->diffusion_email) $this->texte_diffuse .= $contenu ;
$this->texte_diffuse .= "";
$this->texte_export = "".$titre . $contenu_total . "";
}
// ---------------------------------------------------------------
// diffuser() : diffuser le contenu de la bannette
// ---------------------------------------------------------------
function diffuser($texte="") {
global $dbh;
global $msg, $charset, $base_path;
global $PMBusernom, $opac_biblio_email , $opac_biblio_name ;
global $PMBuserprenom;
global $PMBuseremail;
global $id_empr ;
// paramétrage OPAC: choix du nom de la bibliothèque comme expéditeur
$requete = "select location_libelle, email from empr, docs_location where empr_location=idlocation and id_empr='$id_empr' ";
$res = mysql_query($requete, $dbh);
$loc=mysql_fetch_object($res) ;
$PMBusernom = $loc->location_libelle ;
$PMBuserprenom = "" ;
$PMBuseremail = $loc->email ;
$this->construit_diff($texte);
$texte_base = $this->texte_diffuse ;
$res_envoi = false;
if($this->nb_notices > 0){
if ($this->export_contenu) {
$fic_params = $base_path."/admin/convert/imports/".$this->typeexport."/params.xml";
$temppar = file_get_contents($fic_params);
$params = _parser_text_no_function_($temppar,"PARAMS");
if ($params["OUTPUT"][0]["SUFFIX"]) $ext=$params["OUTPUT"][0]["SUFFIX"];
else $ext="fic";
$pieces_jointes[0][nomfichier] = $this->prefixe_fichier.today().".".$ext ;
$pieces_jointes[0][contenu] = $this->export_contenu ;
}
$nb_dest=0;
$nb_echec=0;
$nb_no_email=0;
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=".$charset."\n";
$requete = "select id_empr, empr_mail, empr_nom, empr_prenom, empr_login, empr_password from empr, bannette_abon ";
$requete .= "where num_bannette='".$this->id_bannette."' and empr_date_expiration>=sysdate() and num_empr=id_empr ";
$requete .= "order by empr_nom, empr_prenom ";
$res = mysql_query($requete, $dbh);
while($empr=mysql_fetch_object($res)) {
$emaildest = $empr->empr_mail;
$texte = $texte_base ;
if ($emaildest) // $res_envoi=@mail("$emaildest",$this->comment_public,$texte." ","From: ".$PMBuserprenom." ".$PMBusernom." <".$PMBuseremail.">\r\n".$headers);
$res_envoi=@mailpmb($empr->empr_prenom." ".$empr->empr_nom, $emaildest,$this->comment_public,$texte,$PMBuserprenom." ".$PMBusernom, $PMBuseremail, $headers, "", "", 0, $pieces_jointes);
}
/* A commenter pour tests */
$temp_requete = "update bannettes set date_last_envoi=sysdate() where id_bannette='".$this->id_bannette."' " ;
$res = mysql_query($temp_requete, $dbh);
}
return $res_envoi ;
}
// ---------------------------------------------------------------
// get_equations() : construire un tableau des équations associées
// ---------------------------------------------------------------
function get_equations() {
global $dbh;
global $msg;
if (!$this->id_bannette) return $msg[dsi_ban_no_access]; // impossible d'accéder à cette bannette
$requete = "select num_equation from bannette_equation, equations WHERE num_bannette='$this->id_bannette' and id_equation=num_equation ";
$res = mysql_query($requete, $dbh);
while($equ=mysql_fetch_object($res)) {
$tab_equ[] = $equ->num_equation ;
}
return $tab_equ ;
}
// ---------------------------------------------------------------
// construit_contenu_HTML() : Préparation du contenu du mail ou du bulletin
// ---------------------------------------------------------------
function construit_contenu_HTML ($use_limit=1) {
global $dbh;
global $msg;
global $opac_url_base ;
global $liens_opac ;
$url_base_opac = $opac_url_base."index.php?database=".DATA_BASE."&lvl=notice_display&id=";
if ($this->nb_notices_diff && $use_limit) $limitation = " LIMIT $this->nb_notices_diff " ;
$requete = "select num_notice from bannette_contenu, notices where num_bannette='".$this->id_bannette."' and notice_id=num_notice order by index_serie, tnvol, index_sew $limitation ";
$resultat = mysql_query($requete, $dbh);
// paramétrage :
$environement["short"] = 6 ;
$environement["ex"] = 0 ;
$environement["exnum"] = 0 ;
if (($this->nb_notices_diff >= $this->nb_notices) || (!$this->nb_notices_diff)) $nb_envoyees = $this->nb_notices ;
else $nb_envoyees = $this->nb_notices_diff ;
$resultat_aff .= "
";
$resultat_aff .= sprintf($msg["dsi_diff_n_notices"],$nb_envoyees, $this->nb_notices);
$resultat_aff .= "
";
while ($r=mysql_fetch_object($resultat)) {
// afin de ne pas afficher les liens pour réservation de doc dans le mail :
global $opac_resa ;
$opac_resa = 0 ;
$depliable = 0 ;
$notice = new notice_affichage($r->num_notice, $liens_opac) ;
$notice->do_header();
$notice->do_isbd();
$notice->genere_simple($depliable, 'ISBD') ;
$resultat_aff .= "".$notice->notice_header."
\r\n";
$resultat_aff .= $notice->notice_isbd;
$resultat_aff .= "
\r\n";
}
if ($this->typeexport) {
$this->export_contenu=cree_export_notices($this->liste_id_notice, start_export::get_id_by_path($this->typeexport), 1) ;
}
return $resultat_aff ;
}
// ---------------------------------------------------------------
// construit_liens_HTML()
// ---------------------------------------------------------------
function construit_liens_HTML($texte="") {
global $dbh;
global $opac_url_base, $opac_connexion_phrase ;
global $msg;
global $charset ;
$url_base_opac = $opac_url_base."empr.php?lvl=bannette";
$resultat_aff .= "";
$req = "select empr_login from empr where id_empr=$this->proprio_bannette";
$res = mysql_query($req,$dbh);
$empr = mysql_fetch_object($res);
$date_today = formatdate(today()) ;
$date = time();
$login = $empr->empr_login;
$code=md5($opac_connexion_phrase.$login.$date);
$public = "";
$public .= htmlentities($this->comment_public,ENT_QUOTES, $charset) ;
$public .= "";
$entete = str_replace ("!!public!!",$public,$this->entete_mail) ;
$entete = str_replace ("!!equation!!",$texte,$entete) ;
$entete = str_replace ("!!date!!",$date_today,$entete) ;
return $entete ;
}
// ---------------------------------------------------------------
// compte_elements() : méthode pour pouvoir recompter en dehors !
// ---------------------------------------------------------------
function compte_elements() {
global $dbh ;
$req_nb = "SELECT num_notice from bannette_contenu WHERE num_bannette='".$this->id_bannette."' " ;
$res_nb = mysql_query($req_nb, $dbh) or die ($req_nb."
in bannette.class.php : ".mysql_error());
$this->nb_notices = mysql_num_rows($res_nb);
//initialisation du tableau à chaque fois que cette fonction est appelée pour éviter un mauvais cumul
$this->liste_id_notice = array();
while ($res = mysql_fetch_object($res_nb)) {
$this->liste_id_notice[]=$res->num_notice ;
}
$req_nb = "SELECT count(1) as nb_abonnes from bannette_abon WHERE num_bannette='".$this->id_bannette."' " ;
$res_nb = mysql_query($req_nb, $dbh) or die ($req_nb."
in bannette.class.php : ".mysql_error());
$res = mysql_fetch_object($res_nb);
$this->nb_abonnes = $res->nb_abonnes ;
$requete = "SELECt if(date_last_remplissage>date_last_envoi,1,0) as alert_diff ";
$requete .= "FROM bannettes WHERE id_bannette='".$this->id_bannette."' " ;
$result = mysql_query($requete, $dbh) or die ($requete."
in bannette.class.php : ".mysql_error());
$temp = mysql_fetch_object($result);
$this->alert_diff = $temp->alert_diff ;
}
} # fin de définition de la classe serie