* @author Jean-Pascal MILCENT * @author Aurelien PERONNET * @license GPL v3 * @license CECILL v2 * @copyright 1999-2014 Tela Botanica */ class GestionUtilisateur { private $conteneur; private $contexte; private $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.4 session_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() { //TODO: déplacer ceci dans une classe utilitaire $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); } }