Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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