Subversion Repositories eFlore/Applications.del

Rev

Rev 1801 | Rev 1826 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
 
1477 aurelien 25
	public function __construct(Conteneur $conteneur = null) {
26
		$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
27
		$this->conteneur->chargerConfiguration('config_utilisateurs.ini');
1793 jpm 28
		$this->bdd = $this->conteneur->getBdd();
1795 jpm 29
		$this->contexte = $this->conteneur->getContexte();
30
		$this->chargerUtilisateur();
31
	}
32
 
33
	private function chargerUtilisateur() {
1477 aurelien 34
		$this->demarrerSession();
1795 jpm 35
		$infos = $this->getUtilisateurIdentifie();
36
		$this->utilisateur = ($infos == null) ? $this->getUtilisateurAnonyme() : $infos;
1477 aurelien 37
	}
1610 jpm 38
 
1477 aurelien 39
	private function demarrerSession() {
1793 jpm 40
		if (session_id() == '') {
1795 jpm 41
			// TODO : modifier ce test lors du passage en php 5.4
1477 aurelien 42
			session_start();
43
		}
44
	}
1610 jpm 45
 
1795 jpm 46
	public function getUtilisateurIdentifie() {
47
		$utilisateur = null;
48
		$delCourriel = $this->contexte->getCookie('del_courriel');
1801 jpm 49
		$delMdp = $this->contexte->getCookie('del_mot_de_passe');
1795 jpm 50
		if ($delCourriel != null && $delMdp != null) {
51
			$utilisateur = $this->identifierUtilisateurSansEncryptionMotDePasse($delCourriel, $delMdp);
52
		}
53
		if ($utilisateur != null) {
54
			$utilisateur['session_id'] = session_id();
55
		}
56
		return $utilisateur;
57
	}
58
 
59
	public function getUtilisateurAnonyme() {
60
		return array(
61
			'connecte' => false,
1612 jpm 62
			'id_utilisateur' => session_id(),
63
			'courriel' => '',
64
			'mot_de_passe' => '',
65
			'nom' => '',
66
			'prenom' => '',
1666 jpm 67
			'admin' => '0',
1612 jpm 68
			'session_id' => session_id()
1477 aurelien 69
		);
70
	}
1610 jpm 71
 
1477 aurelien 72
	protected function identifierUtilisateur($login, $motDePasse) {
1666 jpm 73
		$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
74
			'FROM del_utilisateur AS du '.
75
			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
1612 jpm 76
			'WHERE courriel = '.$this->bdd->proteger($login).' '.
1795 jpm 77
			'AND mot_de_passe = MD5('.$this->bdd->proteger($motDePasse).') '.
78
			' -- '.__FILE__.' : '.__LINE__;
1477 aurelien 79
		$utilisateur = $this->bdd->recupererTous($requete);
80
		return $utilisateur;
81
	}
1610 jpm 82
 
1477 aurelien 83
	protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) {
1666 jpm 84
		$requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
85
			'FROM del_utilisateur AS du '.
86
			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
1612 jpm 87
			'WHERE courriel = '.$this->bdd->proteger($login).' '.
1795 jpm 88
			'AND mot_de_passe = '.$this->bdd->proteger($mot_de_passe).' '.
89
			' -- '.__FILE__.' : '.__LINE__;
1477 aurelien 90
		$utilisateur = $this->bdd->recuperer($requete);
91
		return $utilisateur;
92
	}
1610 jpm 93
 
1477 aurelien 94
	protected function setUtilisateur($utilisateur) {
95
		$utilisateur['session_id'] = session_id();
96
		$utilisateur['connecte'] = true;
1666 jpm 97
		$this->setPersistentCookie('del_courriel', $utilisateur['courriel'], 1);
98
		$this->setPersistentCookie('del_mot_de_passe', $utilisateur['mot_de_passe'], 1);
1477 aurelien 99
		return $utilisateur;
100
	}
1610 jpm 101
 
1477 aurelien 102
	protected function setPersistentCookie($name, $value, $remember = 1) {
103
		setcookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
104
	}
1610 jpm 105
 
1477 aurelien 106
	protected function oublierUtilisateur() {
1666 jpm 107
		setcookie('del_courriel', $_COOKIE['del_courriel'], time()-3600, '/');
108
		setcookie('del_mot_de_passe', $_COOKIE['del_mot_de_passe'], time()-3600, '/');
1477 aurelien 109
		unset($_COOKIE['del_courriel']);
110
		unset($_COOKIE['del_mot_de_passe']);
111
	}
1795 jpm 112
 
113
	public function etreAdmin() {
114
		//TODO: déplacer ceci dans une classe utilitaire
115
		$idUtilisateur = $this->bdd->proteger($this->utilisateur['id_utilisateur']);
116
		$requete = 'SELECT admin '.
117
			'FROM del_utilisateur_infos '.
118
			"WHERE id_utilisateur = $idUtilisateur ".
119
			' -- '.__FILE__.' : '.__LINE__;
120
		$resultat = $this->bdd->recuperer($requete);
121
		return ($resultat && $resultat['admin'] == 1);
122
	}
1793 jpm 123
}