416 |
aurelien |
1 |
<?php
|
2458 |
jpm |
2 |
// declare(encoding='UTF-8');
|
416 |
aurelien |
3 |
/**
|
2458 |
jpm |
4 |
* Service identification utilisateur.
|
|
|
5 |
*
|
|
|
6 |
* Cas d'utilisation :
|
|
|
7 |
*
|
|
|
8 |
* 1: Aucun identifiant ni mot de passe transmis
|
|
|
9 |
* 1: L'application retourne l'identifiant de session en cours
|
|
|
10 |
* 2: Une identification est toujours active, cette identification est retournee
|
|
|
11 |
*
|
|
|
12 |
* 1: L'application recoit un identifiant et un mot de passe
|
|
|
13 |
* 1 : On tente login
|
|
|
14 |
* 2 : Si reussi etat connecte, retour de l'identification obtenue
|
|
|
15 |
* 3 : sinon pas connecte, retour d'infos utilisateur anonyme
|
|
|
16 |
*
|
|
|
17 |
* 1: L'application recoit un identifiant et pas de mot de passe :
|
|
|
18 |
* 1 : Deconnection, retour d'infos utilisateur anonyme
|
|
|
19 |
*
|
|
|
20 |
* En resume :
|
|
|
21 |
* /User/ : retour infos utilisateur si connecté sinon infos utilisateur anonyme
|
|
|
22 |
* /User/login_utilisateur : logout retour infos utilisateur anonyme
|
|
|
23 |
* /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme
|
|
|
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>
|
|
|
36 |
*/
|
933 |
aurelien |
37 |
class User extends Cel {
|
416 |
aurelien |
38 |
|
933 |
aurelien |
39 |
// TODO : controle systematique ....dans tous les services
|
|
|
40 |
// Si connected : name cookie = name service
|
2458 |
jpm |
41 |
public function getRessource(){
|
933 |
aurelien |
42 |
$temps_expiration = 60*60*24*100; // 100 jours
|
|
|
43 |
session_set_cookie_params($temps_expiration);
|
2458 |
jpm |
44 |
|
986 |
aurelien |
45 |
$utilisateur = $this->getUtilisateurAnonyme();
|
2458 |
jpm |
46 |
|
933 |
aurelien |
47 |
$login_utilisateur = $this->utilisateurEstIdentifie();
|
2458 |
jpm |
48 |
|
933 |
aurelien |
49 |
if ($login_utilisateur) {
|
|
|
50 |
$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
|
|
|
51 |
$utilisateur['connecte'] = true;
|
416 |
aurelien |
52 |
}
|
|
|
53 |
|
933 |
aurelien |
54 |
$this->envoyerInfosUtilisateur($utilisateur);
|
416 |
aurelien |
55 |
}
|
|
|
56 |
|
2458 |
jpm |
57 |
public function getElement($uid){
|
|
|
58 |
$utilisateur = $this->getUtilisateurAnonyme();
|
416 |
aurelien |
59 |
|
2458 |
jpm |
60 |
if ($this->identificationEstDemandee($uid)) {
|
|
|
61 |
if (!$utilisateur = $this->utilisateurEstIdentifie()) {
|
|
|
62 |
if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {
|
933 |
aurelien |
63 |
$utilisateur= $this->chargerInfosUtilisateur($uid[0]);
|
|
|
64 |
$utilisateur['connecte'] = true;
|
416 |
aurelien |
65 |
}
|
1742 |
raphael |
66 |
// TODO: utilisateur inexistant ?
|
2458 |
jpm |
67 |
} else {
|
933 |
aurelien |
68 |
$utilisateur = $this->chargerInfosUtilisateur($utilisateur);
|
|
|
69 |
$utilisateur['connecte'] = true;
|
416 |
aurelien |
70 |
}
|
2458 |
jpm |
71 |
} else {
|
970 |
aurelien |
72 |
$this->deconnecterUtilisateur();
|
416 |
aurelien |
73 |
}
|
|
|
74 |
|
933 |
aurelien |
75 |
$this->envoyerInfosUtilisateur($utilisateur);
|
2458 |
jpm |
76 |
}
|
|
|
77 |
|
|
|
78 |
public function obtenirIdentiteConnectee() {
|
1647 |
aurelien |
79 |
$login_utilisateur = $this->utilisateurEstIdentifie();
|
|
|
80 |
if ($login_utilisateur) {
|
|
|
81 |
$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);
|
|
|
82 |
$utilisateur['connecte'] = true;
|
1686 |
aurelien |
83 |
} else {
|
|
|
84 |
$utilisateur = $this->getUtilisateurAnonyme();
|
1647 |
aurelien |
85 |
}
|
|
|
86 |
return $utilisateur;
|
2458 |
jpm |
87 |
}
|
1742 |
raphael |
88 |
|
2458 |
jpm |
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 |
}
|
1393 |
aurelien |
97 |
|
2458 |
jpm |
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;
|
933 |
aurelien |
106 |
}
|
2458 |
jpm |
107 |
$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;
|
|
|
108 |
$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;
|
|
|
109 |
$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;
|
|
|
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')) {
|
1393 |
aurelien |
127 |
$this->initialiserInfosUtilisateur($retour['id_utilisateur']);
|
1467 |
aurelien |
128 |
$this->affecterDonneesWidgetSaisie($login, $retour);
|
1385 |
aurelien |
129 |
}
|
933 |
aurelien |
130 |
return $retour;
|
416 |
aurelien |
131 |
}
|
2458 |
jpm |
132 |
|
|
|
133 |
private function utilisateurEstIdentifie() {
|
|
|
134 |
$login_utilisateur = false;
|
|
|
135 |
if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {
|
|
|
136 |
$login_utilisateur = $this->utilisateurEstIdentifieCookie();
|
|
|
137 |
}
|
933 |
aurelien |
138 |
return $login_utilisateur;
|
2458 |
jpm |
139 |
}
|
416 |
aurelien |
140 |
|
2458 |
jpm |
141 |
private function utilisateurEstIdentifieSession() {
|
|
|
142 |
return (isset($_SESSION['user']) && isset($_SESSION['user']['courriel'])) ? $_SESSION['user']['courriel'] : false;
|
|
|
143 |
}
|
416 |
aurelien |
144 |
|
2458 |
jpm |
145 |
private function utilisateurEstIdentifieCookie() {
|
|
|
146 |
return isset($_COOKIE['cel_name']) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE['cel_name'], $_COOKIE['cel_password'])) ? $_COOKIE['cel_name'] : false;
|
|
|
147 |
}
|
416 |
aurelien |
148 |
|
2458 |
jpm |
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 |
}
|
416 |
aurelien |
156 |
|
2458 |
jpm |
157 |
private function supprimerCookie($name) {
|
|
|
158 |
SetCookie($name, '', 1,'/'); $_COOKIE[$name] = '';
|
|
|
159 |
}
|
416 |
aurelien |
160 |
|
2458 |
jpm |
161 |
private function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {
|
933 |
aurelien |
162 |
$identification = false;
|
2458 |
jpm |
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 |
}
|
605 |
aurelien |
168 |
}
|
933 |
aurelien |
169 |
return $identification;
|
|
|
170 |
}
|
|
|
171 |
|
2458 |
jpm |
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) {
|
933 |
aurelien |
186 |
$souvenir = false;
|
|
|
187 |
if ($utilisateur = $this->chargerInfosUtilisateur($login)) {
|
|
|
188 |
if ($utilisateur['mot_de_passe'] == $mot_de_passe) {
|
970 |
aurelien |
189 |
$this->setUtilisateur($utilisateur, $remember);
|
933 |
aurelien |
190 |
$souvenir = true;
|
|
|
191 |
}
|
605 |
aurelien |
192 |
}
|
933 |
aurelien |
193 |
return $souvenir;
|
605 |
aurelien |
194 |
}
|
2458 |
jpm |
195 |
|
986 |
aurelien |
196 |
private function getUtilisateurAnonyme() {
|
|
|
197 |
return array('connecte' => false,
|
2458 |
jpm |
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 |
);
|
986 |
aurelien |
207 |
}
|
2458 |
jpm |
208 |
|
933 |
aurelien |
209 |
private function encrypterMotDePasse($mot_de_passe) {
|
|
|
210 |
return md5($mot_de_passe);
|
|
|
211 |
}
|
2458 |
jpm |
212 |
|
1385 |
aurelien |
213 |
private function initialiserInfosUtilisateur($id_utilisateur) {
|
|
|
214 |
$requete = 'INSERT INTO cel_utilisateurs_infos '.
|
2458 |
jpm |
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);
|
1385 |
aurelien |
221 |
}
|
2458 |
jpm |
222 |
|
1467 |
aurelien |
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) {
|
2060 |
aurelien |
231 |
//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
|
1467 |
aurelien |
232 |
$gestion_obs = new GestionObservation($this->config);
|
|
|
233 |
$gestion_img = new GestionImage($this->config);
|
2458 |
jpm |
234 |
|
1467 |
aurelien |
235 |
$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
|
|
|
236 |
$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
|
2060 |
aurelien |
237 |
GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
|
1467 |
aurelien |
238 |
}
|
2458 |
jpm |
239 |
}
|