public function __construct($id=0, $message='', $niveau_message=FALSE) { // initialisation des propriétés si l'id est défini $id +=0; if($id) { $this->id = $id; $this->serious_message = $niveau_message; $this->prets = array(); $this->reservations = array(); $this->fetch_info(); $this->message = $message; $this->do_fiche(); } } // renseignement des propriétés avec requête MySQL public function fetch_info() { global $msg ; global $dbh; if(!$this->id || !$dbh) return FALSE; $requete = "SELECT e.*, c.libelle AS code1, s.libelle AS code2, date_format(empr_date_adhesion, '".$msg["format_date_sql"]."') as aff_empr_date_adhesion, date_format(empr_date_expiration, '".$msg["format_date_sql"]."') as aff_empr_date_expiration FROM empr e, empr_categ c, empr_codestat s"; $requete .= " WHERE e.id_empr='".$this->id."' " ; $requete .= " AND c.id_categ_empr=e.empr_categ"; $requete .= " AND s.idcode=e.empr_codestat"; $requete .= " LIMIT 1"; $result = pmb_mysql_query($requete, $dbh); $empr = pmb_mysql_fetch_object($result); // affectation des propriétés $this->cb = $empr->empr_cb ; // code barre emprunteur $this->nom = $empr->empr_nom ; // nom emprunteur $this->prenom = $empr->empr_prenom ; // prénom emprunteur $this->adr1 = $empr->empr_adr1 ; // adresse ligne 1 $this->adr2 = $empr->empr_adr2 ; // adresse ligne 2 $this->cp = $empr->empr_cp ; // code postal $this->ville = $empr->empr_ville ; // ville $this->mail = $empr->empr_mail ; // adresse email $this->tel1 = $empr->empr_tel1 ; // téléphone 1 $this->tel2 = $empr->empr_tel2 ; // téléphone 2 $this->prof = $empr->empr_prof ; // profession $this->birth = $empr->empr_year ; // année de naissance $this->categ = $empr->empr_categ ; // catégorie emprunteur $this->cstat = $empr->empr_codestat ; // code statistique $this->cdate = $empr->empr_creation ; // date de création $this->mdate = $empr->empr_modif ; // date de modification $this->sexe = $empr->empr_sexe ; // sexe de l'emprunteur $this->login = $empr->empr_login ; // login pour services OPAC $this->pwd = $empr->empr_password ; // mot de passe OPAC $this->date_adhesion = $empr->empr_date_adhesion ; // début adhésion $this->date_expiration = $empr->empr_date_expiration ; // fin adhésion $this->aff_date_adhesion = $empr->aff_empr_date_adhesion ; // début adhésion $this->aff_date_expiration = $empr->aff_empr_date_expiration ; // fin adhésion $this->cat_l = $empr->code1 ; // libellé catégorie emprunteur $this->cstat_l = $empr->code2 ; // libellé code statistique. voir ce bug avec Eric $this->location = $empr->empr_location ; $this->pnb_password = $empr->empr_pnb_password; //Password PNB pour le pret numérique // ces propriétés sont absentes de la table emprunteurs pour le moment // $this->message = $empr->empr_??? ; // chaîne contenant les messages emprunteurs // $this->adate = $empr->empr_??? ; // date d'abonnement // $this->rdate = $empr->empr_??? ; // date de réabonnement if($this->message){ $this->message = $empr->empr_msg.'
'.$this->message; }else{ $this->message = $empr->empr_msg; } // récupération du tableau des exemplaires empruntés // il nous faut : code barre exemplaire, titre/auteur, type doc, date de prêt, date de retour $requete = "select e.expl_cb, e.expl_notice, p.pret_date, p.pret_retour, t.tdoc_libelle, date_format(pret_date, '".$msg["format_date_sql"]."') as aff_pret_date, date_format(pret_retour, '".$msg["format_date_sql"]."') as aff_pret_retour, if (pret_retour< CURDATE(),1 ,0 ) as retard "; $requete .= " from pret p, exemplaires e, docs_type t"; $requete .= " where p.pret_idempr=".$this->id; $requete .= " and p.pret_idexpl=e.expl_id"; $requete .= " and t.idtyp_doc=e.expl_typdoc"; $requete .= " order by p.pret_date"; $result = pmb_mysql_query($requete, $dbh); while($pret = pmb_mysql_fetch_object($result)) { $notice = new notice_affichage($pret->expl_notice,0,0,0); $notice->do_header(); $this->prets[] = array( 'cb' => $pret->expl_cb, 'libelle' => $notice->notice_header, 'typdoc' => $pret->tdoc_libelle, 'date_pret' => $pret->aff_pret_date, 'date_retour' => $pret->aff_pret_retour, 'org_ret_date' => str_replace('-', '', $pret->pret_retour) ); } return TRUE; } // fabrication de la fiche lecteur public function do_fiche() { global $empr_tmpl; global $msg; $this->fiche = $empr_tmpl; $this->fiche = str_replace('!!cb!!' , $this->cb , $this->fiche); $this->fiche = str_replace('!!nom!!' , pmb_strtoupper($this->nom) , $this->fiche); $this->fiche = str_replace('!!prenom!!' , $this->prenom , $this->fiche); $this->fiche = str_replace('!!id!!' , $this->id , $this->fiche); $this->fiche = str_replace('!!adr1!!' , $this->adr1 , $this->fiche); $this->fiche = str_replace('!!adr2!!' , $this->adr2 , $this->fiche); $this->fiche = str_replace('!!tel1!!' , $this->tel1 , $this->fiche); $this->fiche = str_replace('!!tel2!!' , $this->tel2 , $this->fiche); $this->fiche = str_replace('!!cp!!' , $this->cp , $this->fiche); $this->fiche = str_replace('!!ville!!' , $this->ville , $this->fiche); $emails=array(); $email_final=array(); $emails = explode(';',$this->mail); for ($i=0;$i".$emails[$i].""; $this->fiche = str_replace('!!mail_all!!' , $this->mail , $this->fiche); $this->fiche = str_replace('!!prof!!' , $this->prof , $this->fiche); $this->fiche = str_replace('!!date!!' , $this->birth , $this->fiche); $this->fiche = str_replace('!!categ!!' , $this->categ.'-'.$this->cat_l , $this->fiche); $this->fiche = str_replace('!!codestat!!' , $this->cstat.'-'.$this->cstat_l , $this->fiche); $this->fiche = str_replace('!!adhesion!!' , $this->aff_date_adhesion, $this->fiche); $this->fiche = str_replace('!!expiration!!' , $this->aff_date_expiration, $this->fiche); if($this->serious_message) $this->fiche = str_replace('!!class_msg!!' , 'empr-serious-msg', $this->fiche); else $this->fiche = str_replace('!!class_msg!!' , 'empr-msg', $this->fiche); if(!$this->message) $this->message = $msg["empr_no_message_for"]; $this->fiche = str_replace('!!empr_msg!!' , $this->message , $this->fiche); $fsexe[0] = $msg[128]; $fsexe[1] = $msg[126]; $fsexe[2] = $msg[127]; $this->fiche = str_replace('!!sexe!!' , $fsexe[$this->sexe], $this->fiche); // valeur pour les champ hidden du prêt. L'id empr est pris en charge plus haut (voir Eric) $this->fiche = str_replace('!!cb!!' , $this->cb , $this->fiche); // traitement liste exemplaires en prêt if(!sizeof($this->prets)) // dans ce cas, le lecteur n'a rien en prêt $prets_list = "".$msg["empr_no_expl"].""; // voir la localisation retenue par Eric else { // constitution du code HTML $prets_list = ""; foreach ($this->prets as $cle => $valeur) { $prets_list .= "
${valeur['cb']} ${valeur['libelle']} ${valeur['typdoc']} ${valeur['date_pret']} \n \n \n \n \n "; $prets_list .="
"; // ouf, c'est fini ;-) } } $this->fiche = str_replace('!!pret_list!!' , $prets_list , $this->fiche); // mise à jour de la liste des réservations $this->fiche = str_replace('!!resa_list!!', $this->fetch_resa(), $this->fiche); } // récupération de la liste des réservations pour l'emprunteur public function fetch_resa() { global $dbh; global $msg ; $affiche = ''; // on commence par vérifier si l'emprunteur a des réservations $query = "select count(1) from resa where resa_idempr=".$this->id; $result = pmb_mysql_query($query, $dbh); if(!@pmb_mysql_result($result, 0, 0)) return $msg["empr_no_resa"]; // si le lecteur a réservé un ou des documents, on récupère tout $query = "select * from resa "; $query .= " where resa.resa_idempr=".$this->id; $result = pmb_mysql_query($query, $dbh); while($resa = pmb_mysql_fetch_object($result)) { // constitution du tableau des réservations // on récupère le rang du réservataire $rang = $this->get_rank($this->id, $resa->resa_idnotice); // maintenant, on s'accroche : détermination de la date à afficher dans la case retour : // disponible, réservé ou date de retour du premier exemplaire // on compte le nombre total d'exemplaires pour la notice $query = "select count(1) from exemplaires, docs_statut where expl_notice=".$resa->resa_idnotice; $query .= " and expl_statut=idstatut and pret_flag=1"; $tresult = @pmb_mysql_query($query, $dbh); $total_ex = @pmb_mysql_result($tresult, 0, 0); // on compte le nombre total de réservations sur la notice $query = "select count(1) from resa where resa_idnotice=".$resa->resa_idnotice; $tresult = @pmb_mysql_query($query, $dbh); $total_resa = @pmb_mysql_result($tresult, 0, 0); // on compte le nombre d'exemplaires sortis $query = "select count(1) from exemplaires e, pret p"; $query .= " where e.expl_notice=".$resa->resa_idnotice; $query .= " and p.pret_idexpl=e.expl_id"; $tresult = @pmb_mysql_query($query, $dbh); $total_sortis = @pmb_mysql_result($tresult, 0, 0); // on en déduit le nombre d'exemplaires disponibles $total_dispo = $total_ex - $total_sortis; if($rang <= $total_dispo) { // un exemplaire est disponible pour le réservataire (affichage : disponible) $situation = "".$msg["available"].""; } else { if($total_dispo) { // un ou des exemplaires sont disponibles, mais pas pour ce réservataire (affichage : reservé) $situation = $msg["expl_reserve"]; } else { // rien n'est disponible, on trouve la date du premier retour $query = 'select (pret_retour) from pret p, exemplaires e'; $query .= ' where e.expl_notice='.$resa->resa_idnotice; $query .= ' and e.expl_id=p.pret_idexpl'; $query .= ' order by p.pret_retour limit 1'; $tresult = pmb_mysql_query($query, $dbh); $first_ret = pmb_mysql_fetch_object($tresult); $situation = formatdate($first_ret->pret_retour); } } $notice = new notice_affichage($resa->resa_idnotice,0,0,0); $notice->do_header(); $affiche .= "".$notice->notice_header; $affiche .= "$rang/$total_resa"; $affiche .= "$situation"; $del_link = ""; $affiche .= "$del_link"; } return $affiche; } // <----------------- get_rank() ------------------> // calcul du rang d'un emprunteur sur une réservation public function get_rank($id_empr, $id_notice) { global $dbh; $rank = 1; $query = "select * from resa where resa_idnotice=".$id_notice." order by resa_date"; $result = pmb_mysql_query($query, $dbh); while($resa=pmb_mysql_fetch_object($result)) { if($resa->resa_idempr == $id_empr) break; $rank++; } return $rank; } public static function get_hashed_password($empr_login='',$empr_password='') { global $dbh; $id_empr = 0; if ($empr_login) { $query = "select id_empr from empr where empr_login='".$empr_login."'"; $result = pmb_mysql_query($query,$dbh); if (pmb_mysql_num_rows($result) == 1) { $id_empr = pmb_mysql_result($result, 0, "id_empr"); } } if ($id_empr) { return password::gen_hash($empr_password, $id_empr); } else { return ""; } } public static function hash_password($empr_login='',$empr_password='') { global $dbh; global $opac_empr_password_salt; if (!$opac_empr_password_salt) { $salt_base = password::gen_salt_base(); if (!$salt_base) return false; } $id_empr = 0; if ($empr_login) { $query = "select id_empr from empr where empr_login='".addslashes($empr_login)."'"; $result = pmb_mysql_query($query,$dbh); if (pmb_mysql_num_rows($result) == 1) { $id_empr = pmb_mysql_result($result, 0, "id_empr"); } } if ($id_empr) { $q = "update empr set empr_password='".addslashes(password::gen_hash($empr_password, $id_empr))."', empr_password_is_encrypted = 1 where empr_login='".addslashes($empr_login)."'"; pmb_mysql_query($q,$dbh); } } public static function update_digest($empr_login='',$empr_password='') { global $dbh, $pmb_url_base; if (!$empr_login) return; $q = "update empr set empr_digest='".addslashes(md5($empr_login.":".md5($pmb_url_base).":".$empr_password))."' where empr_login='".addslashes($empr_login)."'"; pmb_mysql_query($q,$dbh); } public function get_devices(){ if(!isset($this->devices)){ $this->devices = array(); $query = 'select device_id from empr_devices where empr_num = '.$this->id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ while($row = pmb_mysql_fetch_assoc($result)){ $this->devices[] = $row['device_id']; } } } return $this->devices; } public function set_devices($devices_id){ $this->devices = $devices_id; } public function save_devices(){ $query = "delete from empr_devices where empr_num = ".$this->id; pmb_mysql_query($query); if(isset($this->devices) && is_array($this->devices) && count($this->devices)){ $query = 'insert into empr_devices (empr_num, device_id) values '; $sub_query = ''; foreach($this->devices as $device_id){ if($sub_query){ $sub_query.= ','; } $sub_query.= '('.$this->id.', '.$device_id.') '; } $query.= $sub_query; pmb_mysql_query($query); } } public function get_pnb_password(){ return $this->pnb_password; } public function get_pnb_password_hint(){ return $this->pnb_password_hint; } public function set_pnb_password($pnb_password){ $this->pnb_password = $pnb_password; } public function set_pnb_password_hint($pnb_password_hint){ $this->pnb_password_hint = $pnb_password_hint; } public function save_pnb_password(){ /** * TODO : fonction d'initialisation du mot de passe au cas ou * d'autres paramètres sont ajoutés (afin de ne pas avoir a réentrer le mot de passe à chaque fois */ if(!empty($this->pnb_password)){ $password = base64_encode(hash('sha256', $this->pnb_password, 1)); $query = "update empr set empr_pnb_password = '".$password."' where id_empr = ".$this->id; pmb_mysql_query($query); } } public function save_pnb_password_hint(){ $query = "update empr set empr_pnb_password_hint = '".$this->pnb_password_hint."' where id_empr = ".$this->id; pmb_mysql_query($query); } public function init_pnb_parameters(){ $query = 'select empr_pnb_password, empr_pnb_password_hint from empr where id_empr = '.$this->id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $parameters = pmb_mysql_fetch_assoc($result); $this->pnb_password = $parameters['empr_pnb_password']; $this->pnb_password_hint = $parameters['empr_pnb_password_hint']; } } public function update_empr_status($status) { $status = intval($status); if ($status && $this->id) { $query = " UPDATE empr SET empr_statut = $status WHERE id_empr = $this->id "; pmb_mysql_query($query); } } /** * Renvoi du mail de confirmation d'inscription */ public function registration_confirmation_email() { global $msg, $charset; global $opac_biblio_name,$opac_biblio_email,$opac_url_base ; global $opac_url_base; $obj = str_replace("!!biblio_name!!",$opac_biblio_name,$msg['subs_mail_obj']) ; $corps = str_replace("!!biblio_name!!",$opac_biblio_name,$msg['subs_mail_corps']) ; $corps = str_replace("!!empr_first_name!!", $this->prenom,$corps) ; $corps = str_replace("!!empr_last_name!!",$this->nom,$corps) ; // nouvelle clé de validation : $alphanum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $cle_validation = substr(str_shuffle($alphanum), 0, 20); $query = "UPDATE empr set cle_validation = '".$cle_validation."' WHERE id_empr = ".$this->id; pmb_mysql_query($query); $lien_validation = "".$opac_url_base."subscribe.php?subsact=validation&login=".$this->login."&cle_validation=$cle_validation"; $corps = str_replace("!!lien_validation!!",$lien_validation,$corps) ; $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\n"; return mailpmb(trim($this->prenom." ".$this->nom), $this->mail, $obj, $corps, $opac_biblio_name, $opac_biblio_email, $headers); } public function forgotten_password_email($email) { global $msg, $database; global $opac_biblio_name,$opac_biblio_email,$opac_url_base, $opac_parse_html; if (!$opac_biblio_name) { $query_loc = "SELECT name, email FROM docs_location WHERE idlocation='".$this->location."'"; $result_loc = pmb_mysql_query($query_loc) or die ("*** Erreur dans la requête
*** $query_loc
\n"); $info_loc = pmb_mysql_fetch_object($result_loc) ; $biblio_name_temp=$info_loc->name ; $biblio_email_temp=$info_loc->email ; } else { $biblio_name_temp=$opac_biblio_name; $biblio_email_temp=$opac_biblio_email; } $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\n"; // clé pour autoriser une seule connexion auto : $alphanum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $password_key = substr(str_shuffle($alphanum), 0, 20); $rqt = "update empr set cle_validation='".$password_key."' where empr_login='".$this->login."' "; pmb_mysql_query($rqt); // Bonjour,

Pour faire suite à votre demande de réinitialisation de mot de passe à !!biblioname!!, veuillez trouver ci-dessous le lien qui vous permettra d'effectuer ce changement :

!!lien_mdp!!

- Pour rappel, votre identifiant est : !!login!!

Si vous rencontrez des difficultés, adressez un mail à !!biblioemail!!.

$messagemail = $msg['mdp_mail_body'] ; $messagemail = str_replace("!!login!!",$this->login,$messagemail); $messagemail = str_replace("!!biblioname!!","".$biblio_name_temp."",$messagemail); $lien_mdp = "".$opac_url_base."empr.php?lvl=change_password&emprlogin=".$this->login."&password_key=".$password_key."&database=".$database.""; $messagemail = str_replace("!!lien_mdp!!",$lien_mdp,$messagemail); $messagemail = str_replace("!!biblioemail!!","$biblio_email_temp",$messagemail); $objetemail = str_replace("!!biblioname!!",$biblio_name_temp,$msg['mdp_mail_obj']); if($opac_parse_html){ $objetemail = parseHTML($objetemail); $messagemail = parseHTML($messagemail); $biblio_name_temp = parseHTML($biblio_name_temp); $biblio_email_temp = parseHTML($biblio_email_temp); } return mailpmb(trim($this->prenom.' '.$this->nom), $email,$objetemail,$messagemail,$biblio_name_temp, $biblio_email_temp, $headers); } /** * fonction de verification login emprunteur * @param string $empr_login */ public static function check_login_pattern(string $empr_login) { $pattern = "/^[0-9|a-z|\-|_|\@|\.]{2,}$/i"; if(pmb_preg_match($pattern, $empr_login)) { return true; } return false; } /** * fonction de verification unicite login emprunteur * @param string $empr_login * @param int $ignore_id_empr */ public static function check_login_uniqueness($empr_login, $ignore_id_empr=0) { $id_empr = intval($ignore_id_empr); $q = "select id_empr from empr where empr_login='".addslashes($empr_login)."' and id_empr !=".$id_empr." limit 1"; $r = pmb_mysql_query($q); if(pmb_mysql_num_rows($r)) { return false; } return true; } /** * fonction de verification unicite mail emprunteur * @param string $empr_mail * @param int $ignore_id_empr */ public static function check_mail_uniqueness($empr_mail, $ignore_id_empr=0) { $id_empr = intval($ignore_id_empr); $q = "select id_empr from empr where empr_mail like '%".addslashes($empr_mail)."%' and id_empr !=".$id_empr." limit 1"; $r = pmb_mysql_query($q); if(pmb_mysql_num_rows($r)) { return false; } return true; } } }