| 1477 | aurelien | 1 | <?php
 | 
        
           | 1815 | jpm | 2 | // declare(encoding='UTF-8');
 | 
        
           | 1794 | jpm | 3 | /**
 | 
        
           |  |  | 4 |  * Contient les méthodes permettant d'identifier l'utilisateur de l'application DEL.
 | 
        
           |  |  | 5 |  *
 | 
        
           | 1815 | jpm | 6 |  * @category  DEL
 | 
        
           |  |  | 7 |  * @package   Services
 | 
        
           |  |  | 8 |  * @package   Bibliotheque
 | 
        
           |  |  | 9 |  * @version   0.1
 | 
        
           |  |  | 10 |  * @author    Mathias CHOUET <mathias@tela-botanica.org>
 | 
        
           |  |  | 11 |  * @author    Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 12 |  * @author    Aurelien PERONNET <aurelien@tela-botanica.org>
 | 
        
           |  |  | 13 |  * @license   GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 | 
        
           |  |  | 14 |  * @license   CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 | 
        
           | 1794 | jpm | 15 |  * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
 | 
        
           |  |  | 16 |  */
 | 
        
           | 1610 | jpm | 17 | class GestionUtilisateur {
 | 
        
           |  |  | 18 |   | 
        
           | 1477 | aurelien | 19 | 	private $conteneur;
 | 
        
           | 1795 | jpm | 20 | 	private $contexte;
 | 
        
           | 1477 | aurelien | 21 | 	private $bdd;
 | 
        
           | 1610 | jpm | 22 |   | 
        
           | 1795 | jpm | 23 | 	private $utilisateur = array();
 | 
        
           |  |  | 24 |   | 
        
           | 1826 | jpm | 25 | 	public function __construct(Conteneur $conteneur) {
 | 
        
           |  |  | 26 | 		$this->conteneur = $conteneur;
 | 
        
           | 1793 | jpm | 27 | 		$this->bdd = $this->conteneur->getBdd();
 | 
        
           | 1795 | jpm | 28 | 		$this->contexte = $this->conteneur->getContexte();
 | 
        
           |  |  | 29 | 		$this->chargerUtilisateur();
 | 
        
           |  |  | 30 | 	}
 | 
        
           |  |  | 31 |   | 
        
           |  |  | 32 | 	private function chargerUtilisateur() {
 | 
        
           | 1477 | aurelien | 33 | 		$this->demarrerSession();
 | 
        
           | 1795 | jpm | 34 | 		$infos = $this->getUtilisateurIdentifie();
 | 
        
           |  |  | 35 | 		$this->utilisateur = ($infos == null) ? $this->getUtilisateurAnonyme() : $infos;
 | 
        
           | 1477 | aurelien | 36 | 	}
 | 
        
           | 1610 | jpm | 37 |   | 
        
           | 1477 | aurelien | 38 | 	private function demarrerSession() {
 | 
        
           | 1793 | jpm | 39 | 		if (session_id() == '') {
 | 
        
           | 1795 | jpm | 40 | 			// TODO : modifier ce test lors du passage en php 5.4
 | 
        
           | 1477 | aurelien | 41 | 			session_start();
 | 
        
           |  |  | 42 | 		}
 | 
        
           |  |  | 43 | 	}
 | 
        
           | 1610 | jpm | 44 |   | 
        
           | 1795 | jpm | 45 | 	public function getUtilisateurIdentifie() {
 | 
        
           |  |  | 46 | 		$utilisateur = null;
 | 
        
           |  |  | 47 | 		$delCourriel = $this->contexte->getCookie('del_courriel');
 | 
        
           | 1801 | jpm | 48 | 		$delMdp = $this->contexte->getCookie('del_mot_de_passe');
 | 
        
           | 1795 | jpm | 49 | 		if ($delCourriel != null && $delMdp != null) {
 | 
        
           |  |  | 50 | 			$utilisateur = $this->identifierUtilisateurSansEncryptionMotDePasse($delCourriel, $delMdp);
 | 
        
           |  |  | 51 | 		}
 | 
        
           |  |  | 52 | 		if ($utilisateur != null) {
 | 
        
           |  |  | 53 | 			$utilisateur['session_id'] = session_id();
 | 
        
           |  |  | 54 | 		}
 | 
        
           |  |  | 55 | 		return $utilisateur;
 | 
        
           |  |  | 56 | 	}
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 | 	public function getUtilisateurAnonyme() {
 | 
        
           |  |  | 59 | 		return array(
 | 
        
           |  |  | 60 | 			'connecte' => false,
 | 
        
           | 1612 | jpm | 61 | 			'id_utilisateur' => session_id(),
 | 
        
           |  |  | 62 | 			'courriel' => '',
 | 
        
           |  |  | 63 | 			'mot_de_passe' => '',
 | 
        
           |  |  | 64 | 			'nom' => '',
 | 
        
           |  |  | 65 | 			'prenom' => '',
 | 
        
           | 1666 | jpm | 66 | 			'admin' => '0',
 | 
        
           | 1612 | jpm | 67 | 			'session_id' => session_id()
 | 
        
           | 1477 | aurelien | 68 | 		);
 | 
        
           |  |  | 69 | 	}
 | 
        
           | 1610 | jpm | 70 |   | 
        
           | 1826 | jpm | 71 | 	protected function identifierUtilisateur($login, $mot_de_passe) {
 | 
        
           |  |  | 72 | 		return $this->recupererUtilisateurEnBdd($login, $mot_de_passe, 'MD5');
 | 
        
           | 1477 | aurelien | 73 | 	}
 | 
        
           | 1610 | jpm | 74 |   | 
        
           | 1477 | aurelien | 75 | 	protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) {
 | 
        
           | 1826 | jpm | 76 | 		return $this->recupererUtilisateurEnBdd($login, $mot_de_passe);
 | 
        
           |  |  | 77 | 	}
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 | 	private function recupererUtilisateurEnBdd($login, $mot_de_passe, $cryptage = false) {
 | 
        
           |  |  | 80 | 		$loginP = $this->bdd->proteger($login);
 | 
        
           |  |  | 81 | 		$mdpP = $this->bdd->proteger($mot_de_passe);
 | 
        
           |  |  | 82 | 		$mdpSql = $cryptage ? "$cryptage($mdpP)" : $mdpP;
 | 
        
           | 1666 | jpm | 83 | 		$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
 | 
        
           |  |  | 84 | 			'FROM del_utilisateur AS du '.
 | 
        
           |  |  | 85 | 			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
 | 
        
           | 1826 | jpm | 86 | 			"WHERE courriel = $loginP ".
 | 
        
           |  |  | 87 | 			"AND mot_de_passe = $mdpSql ".
 | 
        
           | 1795 | jpm | 88 | 			' -- '.__FILE__.' : '.__LINE__;
 | 
        
           | 1826 | jpm | 89 | 		return $this->bdd->recuperer($requete);
 | 
        
           | 1477 | aurelien | 90 | 	}
 | 
        
           | 1610 | jpm | 91 |   | 
        
           | 1826 | jpm | 92 | 	protected function completerInfosUtilisateur($utilisateur) {
 | 
        
           | 1477 | aurelien | 93 | 		$utilisateur['session_id'] = session_id();
 | 
        
           |  |  | 94 | 		$utilisateur['connecte'] = true;
 | 
        
           | 1826 | jpm | 95 | 		return $utilisateur;
 | 
        
           |  |  | 96 | 	}
 | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 | 	protected function poserCookieUtilisateur($utilisateur) {
 | 
        
           | 1666 | jpm | 99 | 		$this->setPersistentCookie('del_courriel', $utilisateur['courriel'], 1);
 | 
        
           |  |  | 100 | 		$this->setPersistentCookie('del_mot_de_passe', $utilisateur['mot_de_passe'], 1);
 | 
        
           | 1477 | aurelien | 101 | 	}
 | 
        
           | 1610 | jpm | 102 |   | 
        
           | 1477 | aurelien | 103 | 	protected function setPersistentCookie($name, $value, $remember = 1) {
 | 
        
           |  |  | 104 | 		setcookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
 | 
        
           |  |  | 105 | 	}
 | 
        
           | 1610 | jpm | 106 |   | 
        
           | 1477 | aurelien | 107 | 	protected function oublierUtilisateur() {
 | 
        
           | 1826 | jpm | 108 | 		setcookie('del_courriel', $this->contexte->getCookie('del_courriel'), time()-3600, '/');
 | 
        
           |  |  | 109 | 		setcookie('del_mot_de_passe', $this->contexte->getCookie('del_mot_de_passe'), time()-3600, '/');
 | 
        
           |  |  | 110 | 		$this->contexte->setCookie('del_courriel', null);
 | 
        
           |  |  | 111 | 		$this->contexte->setCookie('del_mot_de_passe', null);
 | 
        
           | 1477 | aurelien | 112 | 	}
 | 
        
           | 1795 | jpm | 113 |   | 
        
           |  |  | 114 | 	public function etreAdmin() {
 | 
        
           |  |  | 115 | 		//TODO: déplacer ceci dans une classe utilitaire
 | 
        
           | 1826 | jpm | 116 | 		$idUtilisateurP = $this->bdd->proteger($this->utilisateur['id_utilisateur']);
 | 
        
           | 1795 | jpm | 117 | 		$requete = 'SELECT admin '.
 | 
        
           |  |  | 118 | 			'FROM del_utilisateur_infos '.
 | 
        
           | 1826 | jpm | 119 | 			"WHERE id_utilisateur = $idUtilisateurP ".
 | 
        
           | 1795 | jpm | 120 | 			' -- '.__FILE__.' : '.__LINE__;
 | 
        
           |  |  | 121 | 		$resultat = $this->bdd->recuperer($requete);
 | 
        
           |  |  | 122 | 		return ($resultat && $resultat['admin'] == 1);
 | 
        
           |  |  | 123 | 	}
 | 
        
           | 1793 | jpm | 124 | }
 |