Subversion Repositories eFlore/Applications.cel

Rev

Rev 2458 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2458 Rev 2806
Line 35... Line 35...
35
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
35
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
36
 */
36
 */
37
class User extends Cel {
37
class User extends Cel {
Line 38... Line 38...
38
 
38
 
39
	// TODO : controle systematique ....dans tous les services
-
 
40
	// Si connected : name cookie = name service
39
	// TODO : controle systematique ....dans tous les services
41
	public function getRessource(){
-
 
42
		$temps_expiration = 60*60*24*100; // 100 jours
-
 
43
		session_set_cookie_params($temps_expiration);
-
 
44
 
-
 
45
		$utilisateur = $this->getUtilisateurAnonyme();
-
 
46
 
40
	public function getRessource() {
47
		$login_utilisateur = $this->utilisateurEstIdentifie();
-
 
48
 
-
 
49
		if ($login_utilisateur) {
-
 
50
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
-
 
51
			$utilisateur['connecte'] = true;
-
 
52
		}
-
 
53
 
-
 
54
		$this->envoyerInfosUtilisateur($utilisateur);
-
 
55
	}
-
 
56
 
-
 
57
	public function getElement($uid){
-
 
58
		$utilisateur = $this->getUtilisateurAnonyme();
-
 
59
 
-
 
60
		if ($this->identificationEstDemandee($uid)) {
-
 
61
			if (!$utilisateur = $this->utilisateurEstIdentifie()) {
-
 
62
				if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {
-
 
63
					$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
-
 
64
					$utilisateur['connecte'] = true;
-
 
65
				}
-
 
66
				// TODO: utilisateur inexistant ?
-
 
67
			} else {
-
 
68
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
-
 
69
				$utilisateur['connecte'] = true;
-
 
70
			}
-
 
71
		} else {
-
 
72
			$this->deconnecterUtilisateur();
-
 
73
		}
-
 
74
 
-
 
75
		$this->envoyerInfosUtilisateur($utilisateur);
-
 
76
	}
-
 
77
 
-
 
78
	public function obtenirIdentiteConnectee() {
41
		$gestion_utilisateur = new GestionUtilisateur($this->config);
79
		$login_utilisateur = $this->utilisateurEstIdentifie();
-
 
80
		if ($login_utilisateur) {
-
 
81
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
-
 
82
			$utilisateur['connecte'] = true;
-
 
83
		} else {
-
 
84
			$utilisateur = $this->getUtilisateurAnonyme();
-
 
85
		}
-
 
86
		return $utilisateur;
-
 
87
	}
-
 
88
 
-
 
89
	public function obtenirUtilisateurSiExiste($login_utilisateur) {
-
 
90
		$utilisateur = $this->getUtilisateurAnonyme();
-
 
91
		if ($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
-
 
92
			$utilisateur = $utilisateur_existe;
-
 
93
			$utilisateur['connecte'] = true;
-
 
94
		}
-
 
95
		return $utilisateur;
-
 
96
	}
-
 
97
 
-
 
98
	private function identificationEstDemandee($tableau_param) {
-
 
99
		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
-
 
100
	}
-
 
101
 
-
 
102
	private function envoyerInfosUtilisateur($utilisateur) {
-
 
103
		if (!$utilisateur) {
-
 
104
			$this->envoyerJson($this->getUtilisateurAnonyme());
-
 
105
			return true;
-
 
106
		}
-
 
107
		$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
-
 
108
		$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;
-
 
Line 109... Line 42...
109
		$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;
42
		$utilisateur = $gestion_utilisateur->obtenirIdentiteConnectee();
110
 
-
 
111
		$this->envoyerJson($utilisateur);
-
 
112
		return true;
-
 
113
	}
-
 
114
 
-
 
115
	private function chargerInfosUtilisateur($login) {
-
 
116
		$requete = 'SELECT * '.
-
 
117
			'FROM cel_utilisateurs AS cu '.
-
 
118
			'WHERE courriel = '.Cel::db()->proteger($login).' '.
-
 
119
			' -- '.__FILE__.':'.__LINE__;
-
 
120
		$resultats = Cel::db()->requeter($requete);
-
 
121
 
-
 
122
		$retour = false;
-
 
123
		if (is_array($resultats) && count($resultats) > 0) {
-
 
124
			$retour = $resultats[0];
-
 
125
		}
-
 
126
		if (is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
-
 
127
			$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
-
 
128
			$this->affecterDonneesWidgetSaisie($login, $retour);
-
 
129
		}
-
 
130
		return $retour;
-
 
131
	}
-
 
132
 
-
 
133
	private function utilisateurEstIdentifie() {
-
 
134
		$login_utilisateur = false;
-
 
135
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {
-
 
136
			$login_utilisateur = $this->utilisateurEstIdentifieCookie();
-
 
137
		}
-
 
138
		return $login_utilisateur;
-
 
139
	}
-
 
140
 
-
 
141
	private function utilisateurEstIdentifieSession() {
-
 
142
		return (isset($_SESSION['user']) && isset($_SESSION['user']['courriel'])) ? $_SESSION['user']['courriel'] : false;
-
 
143
	}
-
 
144
 
-
 
145
	private function utilisateurEstIdentifieCookie() {
-
 
146
		return isset($_COOKIE['cel_name']) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE['cel_name'], $_COOKIE['cel_password'])) ? $_COOKIE['cel_name'] : false;
-
 
147
	}
-
 
148
 
-
 
149
	private function deconnecterUtilisateur() {
-
 
150
		$_SESSION['user'] = '';
-
 
151
		$this->supprimerCookie('cel_id');
-
 
152
		$this->supprimerCookie('cel_name');
-
 
153
		$this->supprimerCookie('cel_password');
-
 
154
		$this->supprimerCookie('cel_remember');
-
 
155
	}
-
 
156
 
-
 
157
	private function supprimerCookie($name) {
-
 
158
		SetCookie($name, '', 1,'/'); $_COOKIE[$name] = '';
-
 
159
	}
-
 
160
 
-
 
161
	private function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
-
 
162
		$identification = false;
-
 
163
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
-
 
164
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == 'debug') {
-
 
165
				$this->setUtilisateur($utilisateur, $remember);
-
 
166
				$identification = true;
-
 
167
			}
-
 
168
		}
-
 
169
		return $identification;
-
 
170
	}
-
 
171
 
-
 
172
	private function setUtilisateur($user, $remember=1) {
-
 
173
		$_SESSION['user'] = $user;
-
 
174
		$this->setPersistentCookie('cel_id', $user['id_utilisateur'], $remember);
-
 
175
		$this->setPersistentCookie('cel_name', $user['courriel'], $remember);
-
 
176
		$this->setPersistentCookie('cel_password', $user['mot_de_passe'], $remember);
-
 
177
		$this->setPersistentCookie('cel_remember', $remember, $remember);
-
 
178
	}
-
 
179
 
-
 
180
	private function setPersistentCookie($name, $value, $remember = 1) {
-
 
181
		SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)), '/');
-
 
182
		$_COOKIE[$name] = $value;
-
 
183
	}
-
 
184
 
-
 
185
	private function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
-
 
186
		$souvenir = false;
-
 
187
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
-
 
188
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
-
 
189
				$this->setUtilisateur($utilisateur, $remember);
-
 
190
				$souvenir = true;
-
 
191
			}
-
 
192
		}
-
 
193
		return $souvenir;
-
 
194
	}
-
 
195
 
-
 
196
	private function getUtilisateurAnonyme() {
-
 
197
		return array('connecte' => false,
-
 
198
			'id_utilisateur' => session_id(),
-
 
199
			'courriel' => '',
-
 
200
			'mot_de_passe' => '',
-
 
201
			'nom' => '',
-
 
202
			'prenom' => '',
-
 
203
			'licence_acceptee' => false,
-
 
204
			'preferences_utilisateur' => '',
-
 
205
			'admin' => false
-
 
206
		);
-
 
207
	}
-
 
208
 
-
 
209
	private function encrypterMotDePasse($mot_de_passe) {
-
 
210
		return md5($mot_de_passe);
-
 
211
	}
-
 
212
 
-
 
213
	private function initialiserInfosUtilisateur($id_utilisateur) {
-
 
214
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
-
 
215
			'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation ) '.
-
 
216
			'VALUES '.
-
 
217
			'('.Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
-
 
218
			'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
-
 
219
			' -- '.__FILE__.':'.__LINE__;
-
 
220
		Cel::db()->executer($requete);
-
 
221
	}
-
 
222
 
-
 
223
	/**
-
 
224
	 * Lors de la première connection au cel d'un utilisateur, affecte à son compte ses observations saisies
-
 
225
	 * dans les widgets de saisie, où seul son mail avait été conservé en attendant
-
 
226
	 * Enter description here ...
-
 
227
	 * @param string $mail_utilisateur
-
 
228
	 * @param array $infos_utilisateur
-
 
229
	 */
-
 
230
	private function affecterDonneesWidgetSaisie($mail_utilisateur, $infos_utilisateur) {
-
 
231
		//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
-
 
232
		$gestion_obs = new GestionObservation($this->config);
-
 
233
		$gestion_img = new GestionImage($this->config);
-
 
234
 
-
 
235
		$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
-
 
236
		$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
43
 
237
		GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
44
		$this->envoyerJson($utilisateur);
238
	}
45
	}