Subversion Repositories eFlore/Applications.cel

Rev

Rev 2271 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2271 Rev 2458
Line 1... Line 1...
1
<?php
1
<?php
2
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel //
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
* PHP Version 5
-
 
5
*
-
 
6
* @category  PHP
-
 
7
* @package   jrest
-
 
8
* @author    David Delon <devid.delon@clapas.net>
4
 * Service identification utilisateur.
9
* @author    Aurélien Peronnet <devid.delon@clapas.net>
-
 
10
* @copyright 2010 Tela-Botanica
-
 
11
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
-
 
12
* @version   SVN: <svn_id>
-
 
13
* @link      /doc/jrest/
-
 
14
*/
-
 
15
 
-
 
16
/**
-
 
17
* User.php
-
 
18
*
5
 *
19
* Cas d'utilisation :
6
 * Cas d'utilisation :
20
* Service identification utilisateur
-
 
21
*
-
 
22
*
7
 *
23
* 1: Aucun identifiant ni mot de passe transmis
8
 * 1: Aucun identifiant ni mot de passe transmis
24
* 	  1: L'application retourne l'identifiant de session en cours
9
 * 	  1: L'application retourne l'identifiant de session en cours
25
* 	  2: Une identification est toujours active, cette identification est retournee
10
 * 	  2: Une identification est toujours active, cette identification est retournee
26
*
11
 *
27
* 1: L'application recoit un identifiant et un mot de passe
12
 * 1: L'application recoit un identifiant et un mot de passe
28
*    1 : On tente login
13
 *    1 : On tente login
29
*    2 : Si reussi etat connecte, retour de l'identification obtenue
14
 *    2 : Si reussi etat connecte, retour de l'identification obtenue
30
*    3 : sinon pas connecte, retour d'infos utilisateur anonyme
15
 *    3 : sinon pas connecte, retour d'infos utilisateur anonyme
31
*
16
 *
32
* 1:  L'application recoit un identifiant et pas de mot de passe :
17
 * 1:  L'application recoit un identifiant et pas de mot de passe :
33
*    1 : Deconnection, retour d'infos utilisateur anonyme
18
 *    1 : Deconnection, retour d'infos utilisateur anonyme
34
*
19
 *
35
*   En resume :
20
 *   En resume :
36
*  /User/  : retour infos utilisateur si connecté sinon infos utilisateur anonyme
21
 *  /User/  : retour infos utilisateur si connecté sinon infos utilisateur anonyme
37
*  /User/login_utilisateur : logout retour infos utilisateur anonyme
22
 *  /User/login_utilisateur : logout retour infos utilisateur anonyme
38
*  /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
23
 *  /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
39
*
24
 *
-
 
25
 * @internal   Mininum PHP version : 5.2
-
 
26
 * @category   CEL
-
 
27
 * @package    Services
-
 
28
 * @subpackage Utilisateurs
-
 
29
 * @version    0.1
-
 
30
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
31
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
-
 
32
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
-
 
33
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
-
 
34
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
-
 
35
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
40
*/
36
 */
41
class User extends Cel {
37
class User extends Cel {
Line 42... Line 38...
42
 
38
 
43
	// TODO : controle systematique ....dans tous les services
39
	// TODO : controle systematique ....dans tous les services
44
	// Si connected : name cookie = name service
40
	// Si connected : name cookie = name service
45
	function getRessource(){
-
 
46
 
41
	public function getRessource(){
47
		$temps_expiration = 60*60*24*100; // 100 jours
42
		$temps_expiration = 60*60*24*100; // 100 jours
48
		session_set_cookie_params($temps_expiration);
43
		session_set_cookie_params($temps_expiration);
49
		
44
 
50
		$utilisateur = $this->getUtilisateurAnonyme();
45
		$utilisateur = $this->getUtilisateurAnonyme();
51
		
46
 
52
		$login_utilisateur = $this->utilisateurEstIdentifie();
47
		$login_utilisateur = $this->utilisateurEstIdentifie();
53
		
48
 
54
		if ($login_utilisateur) {
49
		if ($login_utilisateur) {
55
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
50
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
56
			$utilisateur['connecte'] = true;
51
			$utilisateur['connecte'] = true;
Line 57... Line 52...
57
		}
52
		}
58
 
53
 
Line 59... Line 54...
59
		$this->envoyerInfosUtilisateur($utilisateur);
54
		$this->envoyerInfosUtilisateur($utilisateur);
60
	}
-
 
61
 
55
	}
62
   function getElement($uid){
56
 
63
 
57
	public function getElement($uid){
64
		$utilisateur = $this->getUtilisateurAnonyme();
58
		$utilisateur = $this->getUtilisateurAnonyme();
65
							
59
 
66
		if ($this->identificationEstDemandee($uid)) { 	
60
		if ($this->identificationEstDemandee($uid)) {
67
			if (!$utilisateur = $this->utilisateurEstIdentifie()) { 
61
			if (!$utilisateur = $this->utilisateurEstIdentifie()) {
68
				if ($this->identifierUtilisateur($uid[0],$uid[1],1)) { 
62
				if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {
69
					$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
63
					$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
70
					$utilisateur['connecte'] = true;
-
 
71
				}
64
					$utilisateur['connecte'] = true;
72
				// TODO: utilisateur inexistant ?
65
				}
73
			}
66
				// TODO: utilisateur inexistant ?
74
			else {
67
			} else {
75
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
-
 
76
				$utilisateur['connecte'] = true;
68
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
77
			}
69
				$utilisateur['connecte'] = true;
78
		}
70
			}
Line 79... Line 71...
79
		else {
71
		} else {
80
			$this->deconnecterUtilisateur();
72
			$this->deconnecterUtilisateur();
81
		}
73
		}
82
 
74
 
83
		$this->envoyerInfosUtilisateur($utilisateur);
75
		$this->envoyerInfosUtilisateur($utilisateur);
84
   }
76
	}
85
   
77
 
86
   public function obtenirIdentiteConnectee() {
78
	public function obtenirIdentiteConnectee() {
87
		$login_utilisateur = $this->utilisateurEstIdentifie();
79
		$login_utilisateur = $this->utilisateurEstIdentifie();
88
		if ($login_utilisateur) {
80
		if ($login_utilisateur) {
89
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
81
			$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
90
			$utilisateur['connecte'] = true;
82
			$utilisateur['connecte'] = true;
91
		} else {
83
		} else {
92
			$utilisateur = $this->getUtilisateurAnonyme();
84
			$utilisateur = $this->getUtilisateurAnonyme();
93
		}
85
		}
94
		return $utilisateur;
86
		return $utilisateur;
95
   }
87
	}
96
   
88
 
97
   public function obtenirUtilisateurSiExiste($login_utilisateur) {
89
	public function obtenirUtilisateurSiExiste($login_utilisateur) {
98
	   	$utilisateur = $this->getUtilisateurAnonyme();	   	
90
		$utilisateur = $this->getUtilisateurAnonyme();
99
	   	if($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
91
		if ($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
100
	   		$utilisateur = $utilisateur_existe;
92
			$utilisateur = $utilisateur_existe;
101
	   		$utilisateur['connecte'] = true;
93
			$utilisateur['connecte'] = true;
102
	   	}
94
		}
103
	   	return $utilisateur;
95
		return $utilisateur;
104
   }
96
	}
105
   
97
 
106
   private function identificationEstDemandee($tableau_param) {
98
	private function identificationEstDemandee($tableau_param) {
107
   		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
99
		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
108
   }
100
	}
109
   
101
 
110
   private function envoyerInfosUtilisateur($utilisateur) {
102
	private function envoyerInfosUtilisateur($utilisateur) {
111
	   if(!$utilisateur) {
103
		if (!$utilisateur) {
112
		   $this->envoyerJson($this->getUtilisateurAnonyme());
104
			$this->envoyerJson($this->getUtilisateurAnonyme());
113
		   return true;
105
			return true;
114
	   }
106
		}
115
	   $utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
107
		$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
116
	   $utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false; 
108
		$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;
117
	   $utilisateur['admin'] = ($utilisateur['admin']) ? true : false;  	
109
		$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;
118
   	   	   		
110
 
119
	   $this->envoyerJson($utilisateur);
111
		$this->envoyerJson($utilisateur);
120
	   return true;
-
 
-
 
112
		return true;
121
   }
113
	}
122
   
114
 
-
 
115
	private function chargerInfosUtilisateur($login) {
-
 
116
		$requete = 'SELECT * '.
123
	function chargerInfosUtilisateur($login) {
117
			'FROM cel_utilisateurs AS cu '.
124
 
-
 
125
			$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs cu '.
118
			'WHERE courriel = '.Cel::db()->proteger($login).' '.
126
						 'WHERE courriel = '.Cel::db()->proteger($login);
-
 
127
 
119
			' -- '.__FILE__.':'.__LINE__;
128
		$resultat_selection_utilisateur = Cel::db()->requeter($requete_selection_utilisateur);
120
		$resultats = Cel::db()->requeter($requete);
129
		$retour = false;			
121
 
130
		
-
 
131
		if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {			
122
		$retour = false;
132
			$retour = $resultat_selection_utilisateur[0];	
123
		if (is_array($resultats) && count($resultats) > 0) {
133
		}
124
			$retour = $resultats[0];
134
		
125
		}
135
		if(is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
-
 
136
			$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
126
		if (is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {
137
			$this->affecterDonneesWidgetSaisie($login, $retour);
127
			$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
138
		}
128
			$this->affecterDonneesWidgetSaisie($login, $retour);
139
		
129
		}
140
		return $retour;
-
 
141
	}
130
		return $retour;
142
    
131
	}
-
 
132
 
143
    private function utilisateurEstIdentifie() {
133
	private function utilisateurEstIdentifie() {
144
    	   	
134
		$login_utilisateur = false;
145
    	$login_utilisateur = false;					
135
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {
Line 146... Line 136...
146
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}
136
			$login_utilisateur = $this->utilisateurEstIdentifieCookie();
147
		
137
		}
148
		return $login_utilisateur;
-
 
149
    }
-
 
150
 
-
 
151
    function utilisateurEstIdentifieSession() {
-
 
152
    	return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;
138
		return $login_utilisateur;
153
   	}
-
 
154
   	
-
 
155
   	function utilisateurEstIdentifieCookie() {
-
 
156
   		return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;	
-
 
157
   	}
-
 
158
 
-
 
159
    function setUtilisateur($user, $remember=1) {
-
 
160
    	$_SESSION["user"] = $user;
-
 
161
    	$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember);
-
 
162
    	$this->setPersistentCookie("cel_name", $user["courriel"], $remember);
-
 
163
    	$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember);
-
 
164
    	$this->setPersistentCookie("cel_remember", $remember, $remember);
-
 
165
    }
-
 
166
 
-
 
167
    function deconnecterUtilisateur() {
-
 
168
    	 $_SESSION["user"] = "";
-
 
169
    	 $this->supprimerCookie("cel_id");
-
 
170
    	 $this->supprimerCookie("cel_name");
-
 
171
    	 $this->supprimerCookie("cel_password");
-
 
172
    	 $this->supprimerCookie("cel_remember");
-
 
173
    }
-
 
174
 
-
 
175
    function setPersistentCookie($name, $value, $remember = 1) {
-
 
176
    		
-
 
177
    	SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
-
 
178
    	$_COOKIE[$name] = $value;
-
 
Line 179... Line 139...
179
    }
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');
180
 
154
		$this->supprimerCookie('cel_remember');
-
 
155
	}
181
    function supprimerCookie($name) {
156
 
182
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
-
 
183
    }
157
	private function supprimerCookie($name) {
184
 
158
		SetCookie($name, '', 1,'/'); $_COOKIE[$name] = '';
185
	function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
159
	}
186
		
160
 
187
		$identification = false;
161
	private function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
188
		
162
		$identification = false;
189
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {		 	
-
 
190
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {
163
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
191
    	    	$this->setUtilisateur($utilisateur, $remember);
164
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == 'debug') {
Line -... Line 165...
-
 
165
				$this->setUtilisateur($utilisateur, $remember);
-
 
166
				$identification = true;
-
 
167
			}
-
 
168
		}
192
        		$identification = true;
169
		return $identification;
-
 
170
	}
-
 
171
 
193
	        }
172
	private function setUtilisateur($user, $remember=1) {
-
 
173
		$_SESSION['user'] = $user;
-
 
174
		$this->setPersistentCookie('cel_id', $user['id_utilisateur'], $remember);
194
		}
175
		$this->setPersistentCookie('cel_name', $user['courriel'], $remember);
-
 
176
		$this->setPersistentCookie('cel_password', $user['mot_de_passe'], $remember);
Line -... Line 177...
-
 
177
		$this->setPersistentCookie('cel_remember', $remember, $remember);
-
 
178
	}
195
		
179
 
196
		return $identification;
180
	private function setPersistentCookie($name, $value, $remember = 1) {
197
	}
181
		SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)), '/');
198
 
182
		$_COOKIE[$name] = $value;
199
	function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
183
	}
200
		
184
 
201
		$souvenir = false;
-
 
202
 
185
	private function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
203
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
186
		$souvenir = false;
204
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
187
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
205
				$this->setUtilisateur($utilisateur, $remember);
188
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
206
				$souvenir = true;
189
				$this->setUtilisateur($utilisateur, $remember);
207
			}
190
				$souvenir = true;
208
		}
191
			}
209
		
192
		}
210
		return $souvenir;
193
		return $souvenir;
211
	}
194
	}
212
	
195
 
213
	private function getUtilisateurAnonyme() {
196
	private function getUtilisateurAnonyme() {
214
		return array('connecte' => false,
197
		return array('connecte' => false,
215
							 'id_utilisateur' => session_id(),
198
			'id_utilisateur' => session_id(),
216
							 'courriel' => '',
199
			'courriel' => '',
217
							 'mot_de_passe' => '',
200
			'mot_de_passe' => '',
218
							 'nom' => '',
201
			'nom' => '',
219
							 'prenom' => '',
202
			'prenom' => '',
220
							 'licence_acceptee' => false,
203
			'licence_acceptee' => false,
221
							 'preferences_utilisateur' => '',
204
			'preferences_utilisateur' => '',
222
							 'admin' => false
205
			'admin' => false
223
							);
206
		);
224
	}
207
	}
225
	
208
 
226
	private function encrypterMotDePasse($mot_de_passe) {
209
	private function encrypterMotDePasse($mot_de_passe) {
227
		return md5($mot_de_passe);
210
		return md5($mot_de_passe);
228
	}
-
 
-
 
211
	}
229
	
212
 
230
	private function initialiserInfosUtilisateur($id_utilisateur) {
213
	private function initialiserInfosUtilisateur($id_utilisateur) {
231
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
214
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
232
		           '(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation )'.
215
			'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation ) '.
233
		           'VALUES '.
216
			'VALUES '.
234
		           "(".Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
217
			'('.Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
235
		           'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
218
			'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '.
236
		
219
			' -- '.__FILE__.':'.__LINE__;
Line 246... Line 229...
246
	 */
229
	 */
247
	private function affecterDonneesWidgetSaisie($mail_utilisateur, $infos_utilisateur) {
230
	private function affecterDonneesWidgetSaisie($mail_utilisateur, $infos_utilisateur) {
248
		//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
231
		//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
249
		$gestion_obs = new GestionObservation($this->config);
232
		$gestion_obs = new GestionObservation($this->config);
250
		$gestion_img = new GestionImage($this->config);
233
		$gestion_img = new GestionImage($this->config);
251
		
234
 
252
		$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
235
		$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
253
		$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
236
		$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
254
		GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
237
		GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
255
	}
238
	}
256
}
-
 
257
?>
-
 
258
239
}
-
 
240
259
241