Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1385 Rev 1393
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
			}
72
			}
73
			else {
73
			else {
74
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
74
				$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
75
				$utilisateur['connecte'] = true;
75
				$utilisateur['connecte'] = true;
76
			}
76
			}
77
		}
77
		}
78
		else {
78
		else {
79
			$this->deconnecterUtilisateur();
79
			$this->deconnecterUtilisateur();
80
		}
80
		}
81
 
81
 
82
		$this->envoyerInfosUtilisateur($utilisateur);
82
		$this->envoyerInfosUtilisateur($utilisateur);
83
   }
83
   }
84
   
84
   
85
   public function obtenirUtilisateurSiExiste($login_utilisateur) {
85
   public function obtenirUtilisateurSiExiste($login_utilisateur) {
86
	   	$utilisateur = $this->getUtilisateurAnonyme();	   	
86
	   	$utilisateur = $this->getUtilisateurAnonyme();	   	
87
	   	if($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
87
	   	if($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {
88
	   		$utilisateur = $utilisateur_existe;
88
	   		$utilisateur = $utilisateur_existe;
89
	   		$utilisateur['connecte'] = true;
89
	   		$utilisateur['connecte'] = true;
90
	   	}
90
	   	}
91
	   	return $utilisateur;
91
	   	return $utilisateur;
92
   }
92
   }
93
   
93
   
94
   private function identificationEstDemandee($tableau_param) {
94
   private function identificationEstDemandee($tableau_param) {
95
   		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
95
   		return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));
96
   }
96
   }
97
   
97
   
98
   private function envoyerInfosUtilisateur($utilisateur) {
98
   private function envoyerInfosUtilisateur($utilisateur) {
99
   	
99
   	
100
   		$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
100
   		$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
101
   	   	$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false; 
101
   	   	$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false; 
102
   	   	$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;  	
102
   	   	$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;  	
103
   	   	   		
103
   	   	   		
104
		$this->envoyerJson($utilisateur);
104
		$this->envoyerJson($utilisateur);
105
		return true;
105
		return true;
106
   }
106
   }
107
   
107
   
108
	function chargerInfosUtilisateur($login) {
108
	function chargerInfosUtilisateur($login) {
109
		
109
		
110
		$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs cu '.
-
 
111
										 'LEFT JOIN cel_utilisateurs_infos cui '.
-
 
112
										 'ON cu.id_utilisateur = cui.id_utilisateur '.
110
			$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs cu '.
113
										 'WHERE courriel = '.$this->proteger($login);
111
						 'WHERE courriel = '.$this->proteger($login);
114
									 
112
 
115
		$resultat_selection_utilisateur = $this->requeter($requete_selection_utilisateur);
113
		$resultat_selection_utilisateur = $this->requeter($requete_selection_utilisateur);
116
		$retour = false;			
114
		$retour = false;			
117
		
115
		
118
		if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {			
116
		if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {			
119
			$retour = $resultat_selection_utilisateur[0];	
117
			$retour = $resultat_selection_utilisateur[0];	
120
		}
118
		}
121
		
119
 
122
		if($retour['date_premiere_utilisation'] == '0000-00-00 00:00:00') {
120
		if($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00') {
123
				$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
121
			$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
124
		}
122
		}
125
		
123
		
126
		return $retour;
124
		return $retour;
127
	}
125
	}
128
    
126
    
129
    private function utilisateurEstIdentifie() {
127
    private function utilisateurEstIdentifie() {
130
    	   	
128
    	   	
131
    	$login_utilisateur = false;					
129
    	$login_utilisateur = false;					
132
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}
130
		if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}
133
		
131
		
134
		return $login_utilisateur;
132
		return $login_utilisateur;
135
    }
133
    }
136
 
134
 
137
    function utilisateurEstIdentifieSession() {
135
    function utilisateurEstIdentifieSession() {
138
    	return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;
136
    	return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;
139
   	}
137
   	}
140
   	
138
   	
141
   	function utilisateurEstIdentifieCookie() {
139
   	function utilisateurEstIdentifieCookie() {
142
   		return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;	
140
   		return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;	
143
   	}
141
   	}
144
 
142
 
145
    function setUtilisateur($user, $remember=1) {
143
    function setUtilisateur($user, $remember=1) {
146
    	$_SESSION["user"] = $user;
144
    	$_SESSION["user"] = $user;
147
    	$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember);
145
    	$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember);
148
    	$this->setPersistentCookie("cel_name", $user["courriel"], $remember);
146
    	$this->setPersistentCookie("cel_name", $user["courriel"], $remember);
149
    	$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember);
147
    	$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember);
150
    	$this->setPersistentCookie("cel_remember", $remember, $remember);
148
    	$this->setPersistentCookie("cel_remember", $remember, $remember);
151
    }
149
    }
152
 
150
 
153
    function deconnecterUtilisateur() {
151
    function deconnecterUtilisateur() {
154
    	 $_SESSION["user"] = "";
152
    	 $_SESSION["user"] = "";
155
    	 $this->supprimerCookie("cel_id");
153
    	 $this->supprimerCookie("cel_id");
156
    	 $this->supprimerCookie("cel_name");
154
    	 $this->supprimerCookie("cel_name");
157
    	 $this->supprimerCookie("cel_password");
155
    	 $this->supprimerCookie("cel_password");
158
    	 $this->supprimerCookie("cel_remember");
156
    	 $this->supprimerCookie("cel_remember");
159
    }
157
    }
160
 
158
 
161
    function setPersistentCookie($name, $value, $remember = 1) {
159
    function setPersistentCookie($name, $value, $remember = 1) {
162
    		
160
    		
163
    	SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
161
    	SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
164
    	$_COOKIE[$name] = $value;
162
    	$_COOKIE[$name] = $value;
165
    }
163
    }
166
 
164
 
167
    function supprimerCookie($name) {
165
    function supprimerCookie($name) {
168
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
166
    	 SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";
169
    }
167
    }
170
 
168
 
171
	function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
169
	function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
172
		
170
		
173
		$identification = false;
171
		$identification = false;
174
		
172
		
175
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {		 	
173
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {		 	
176
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {
174
			if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {
177
    	    	$this->setUtilisateur($utilisateur, $remember);
175
    	    	$this->setUtilisateur($utilisateur, $remember);
178
        		$identification = true;
176
        		$identification = true;
179
	        }
177
	        }
180
		}
178
		}
181
		
179
		
182
		return $identification;
180
		return $identification;
183
	}
181
	}
184
 
182
 
185
	function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
183
	function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {
186
		
184
		
187
		$souvenir = false;
185
		$souvenir = false;
188
 
186
 
189
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
187
		if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
190
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
188
			if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
191
				$this->setUtilisateur($utilisateur, $remember);
189
				$this->setUtilisateur($utilisateur, $remember);
192
				$souvenir = true;
190
				$souvenir = true;
193
			}
191
			}
194
		}
192
		}
195
		
193
		
196
		return $souvenir;
194
		return $souvenir;
197
	}
195
	}
198
	
196
	
199
	private function getUtilisateurAnonyme() {
197
	private function getUtilisateurAnonyme() {
200
		return array('connecte' => false,
198
		return array('connecte' => false,
201
							 'id_utilisateur' => session_id(),
199
							 'id_utilisateur' => session_id(),
202
							 'courriel' => '',
200
							 'courriel' => '',
203
							 'mot_de_passe' => '',
201
							 'mot_de_passe' => '',
204
							 'nom' => '',
202
							 'nom' => '',
205
							 'prenom' => '',
203
							 'prenom' => '',
206
							 'licence_acceptee' => false,
204
							 'licence_acceptee' => false,
207
							 'preferences_utilisateur' => '',
205
							 'preferences_utilisateur' => '',
208
							 'admin' => false
206
							 'admin' => false
209
							);
207
							);
210
	}
208
	}
211
	
209
	
212
	private function encrypterMotDePasse($mot_de_passe) {
210
	private function encrypterMotDePasse($mot_de_passe) {
213
		return md5($mot_de_passe);
211
		return md5($mot_de_passe);
214
	}
212
	}
215
	
213
	
216
	private function initialiserInfosUtilisateur($id_utilisateur) {
214
	private function initialiserInfosUtilisateur($id_utilisateur) {
217
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
215
		$requete = 'INSERT INTO cel_utilisateurs_infos '.
218
		           '(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation )'.
216
		           '(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation )'.
219
		           'VALUES '.
217
		           'VALUES '.
220
		           "(".$this->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
218
		           "(".$this->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".
221
		           'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
219
		           'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';
222
		
220
		
223
		$resultat_insertion_infos = $this->executer($requete);
221
		$resultat_insertion_infos = $this->executer($requete);
224
	}
222
	}
225
}
223
}
226
?>
224
?>