Subversion Repositories eFlore/Applications.cel

Rev

Rev 1742 | Rev 2060 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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