Rev 2070 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Contient les méthodes permettant d'identifier l'utilisateur de l'application DEL.** @category DEL* @package Services* @package Bibliotheque* @version 0.1* @author Mathias CHOUET <mathias@tela-botanica.org>* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Aurelien PERONNET <aurelien@tela-botanica.org>* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>*/class GestionUtilisateur {protected $conteneur;protected $contexte;protected $bdd;private $utilisateur = array();public function __construct(Conteneur $conteneur) {$this->conteneur = $conteneur;$this->bdd = $this->conteneur->getBdd();$this->contexte = $this->conteneur->getContexte();$this->chargerUtilisateur();}private function chargerUtilisateur() {$this->demarrerSession();$infos = $this->getUtilisateurIdentifie();$this->utilisateur = ($infos == null) ? $this->getUtilisateurAnonyme() : $infos;}private function demarrerSession() {if (session_id() == '') {// TODO : modifier ce test lors du passage en php 5.4session_start();}}public function getUtilisateurIdentifie() {$utilisateur = null;$delCourriel = $this->contexte->getCookie('del_courriel');$delMdp = $this->contexte->getCookie('del_mot_de_passe');if ($delCourriel != null && $delMdp != null) {$utilisateur = $this->identifierUtilisateurSansEncryptionMotDePasse($delCourriel, $delMdp);}if ($utilisateur != null) {$utilisateur['session_id'] = session_id();}return $utilisateur;}public function getUtilisateurAnonyme() {return array('connecte' => false,'id_utilisateur' => session_id(),'courriel' => '','mot_de_passe' => '','nom' => '','prenom' => '','admin' => '0','session_id' => session_id());}protected function identifierUtilisateur($login, $mot_de_passe) {return $this->recupererUtilisateurEnBdd($login, $mot_de_passe, 'MD5');}protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) {return $this->recupererUtilisateurEnBdd($login, $mot_de_passe);}private function recupererUtilisateurEnBdd($login, $mot_de_passe, $cryptage = false) {$loginP = $this->bdd->proteger($login);$mdpP = $this->bdd->proteger($mot_de_passe);$mdpSql = $cryptage ? "$cryptage($mdpP)" : $mdpP;$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.'FROM del_utilisateur AS du '.' LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '."WHERE courriel = $loginP "."AND mot_de_passe = $mdpSql ".' -- '.__FILE__.' : '.__LINE__;return $this->bdd->recuperer($requete);}protected function completerInfosUtilisateur($utilisateur) {$utilisateur['session_id'] = session_id();$utilisateur['connecte'] = true;return $utilisateur;}protected function poserCookieUtilisateur($utilisateur) {$this->setPersistentCookie('del_courriel', $utilisateur['courriel'], 1);$this->setPersistentCookie('del_mot_de_passe', $utilisateur['mot_de_passe'], 1);}protected function setPersistentCookie($name, $value, $remember = 1) {setcookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');}protected function oublierUtilisateur() {setcookie('del_courriel', $this->contexte->getCookie('del_courriel'), time()-3600, '/');setcookie('del_mot_de_passe', $this->contexte->getCookie('del_mot_de_passe'), time()-3600, '/');$this->contexte->setCookie('del_courriel', null);$this->contexte->setCookie('del_mot_de_passe', null);}public function etreAdmin() {$idUtilisateurP = $this->bdd->proteger($this->utilisateur['id_utilisateur']);$requete = 'SELECT admin '.'FROM del_utilisateur_infos '."WHERE id_utilisateur = $idUtilisateurP ".' -- '.__FILE__.' : '.__LINE__;$resultat = $this->bdd->recuperer($requete);return ($resultat && $resultat['admin'] == 1);}protected function getEvenements($id_utilisateur) {$sql = $this->conteneur->getSql();$date = $this->getDerniereDateConsultationEvenements($id_utilisateur);$requete_activite = $sql->getRequeteNbEvenementsDepuisDate($id_utilisateur, $date);$resultats = $this->bdd->recupererTous($requete_activite);$nb_evenements = $resultats[0]['nb_evenements'];$evenements['nb_evenements'] = $nb_evenements;$evenements['date_derniere_consultation_evenements'] = $date;return $evenements;}public function getDerniereDateConsultationEvenements($id_utilisateur) {$requete = "SELECT date_derniere_consultation_evenements FROM del_utilisateur_infos "."WHERE id_utilisateur = ".$this->bdd->proteger($id_utilisateur);$date = $this->bdd->recuperer($requete);$date = !empty($date['date_derniere_consultation_evenements']) ? $date['date_derniere_consultation_evenements'] : "0";return $date;}public function setDerniereDateConsultationEvenements($id_utilisateur, $date) {// Vérification que la ligne correspondant à l'utilisateur dans la table// infos existe bien (sinon on la crée)$infos_utilisateur = $this->obtenirInfosUtilisateur($id_utilisateur);if (empty($infos_utilisateur)) {$this->initialiserInfosUtilisateur($id_utilisateur);}$requete = "UPDATE del_utilisateur_infos SET date_derniere_consultation_evenements = ".$this->bdd->proteger($date)." "."WHERE id_utilisateur = ".$this->bdd->proteger($id_utilisateur);$this->bdd->executer($requete);}protected function ajouterEvenements(&$utilisateur) {$evenements = $this->getEvenements($utilisateur['id_utilisateur']);$utilisateur = array_merge($utilisateur, $evenements);}public function obtenirPreferencesUtilisateur($id_utilisateur) {$prefs_utilisateur = $this->obtenirInfosUtilisateur($id_utilisateur);if (empty($prefs_utilisateur)) {$this->initialiserInfosUtilisateur($id_utilisateur);$prefs_utilisateur = $this->renvoyerInfosUtilisateurDefaut($id_utilisateur);} else {if (empty($prefs_utilisateur['preferences'])) {$prefs_utilisateur['preferences'] = $this->obtenirTableauPreferenceDefaut();} else {$prefs_utilisateur['preferences'] = json_decode($prefs_utilisateur['preferences']);}$prefs_utilisateur['admin'] = $prefs_utilisateur['admin'];}return $prefs_utilisateur;}private function obtenirTableauPreferenceDefaut() {return array('mail_notification_mes_obs' => '1', 'mail_notification_toutes_obs' => '0');}private function renvoyerInfosUtilisateurDefaut($id_utilisateur) {return array('id_utilisateur' => $id_utilisateur,'admin' => '0','preferences' => $this->obtenirTableauPreferenceDefaut(),'date_premiere_utilisation' => date('Y-m-d H:i:s'),'date_derniere_consultation_evenements' => '0000-00-00 00:00:00');}public function obtenirInfosUtilisateur($id_utilisateur) {$requete = 'SELECT * '.'FROM del_utilisateur_infos '.'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '.' -- '.__FILE__.' : '.__LINE__;$prefs_utilisateur = $this->bdd->recuperer($requete);return $prefs_utilisateur;}public function initialiserInfosUtilisateur($id_utilisateur) {$preferences_defaut = $this->obtenirTableauPreferenceDefaut();$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut));$idUtilisateurP = $this->bdd->proteger($id_utilisateur);$requete = 'INSERT INTO del_utilisateur_infos '.'(id_utilisateur, admin, preferences, date_premiere_utilisation )'."VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ".'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.' -- '.__FILE__.' : '.__LINE__;return $this->bdd->executer($requete);}}