Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1497 Rev 1508
Line 29... Line 29...
29
 * @version $Id$
29
 * @version $Id$
30
 * @copyright 2009
30
 * @copyright 2009
31
 */
31
 */
32
class CoelUtilisateur extends Coel { 
32
class CoelUtilisateur extends Coel { 
Line -... Line 33...
-
 
33
	
-
 
34
	private $licence_acceptee = false;
33
	
35
	
34
	// TODO : controle systematique... dans tous les services si connected : name cookie = name service
36
	// TODO : controle systematique... dans tous les services si connected : name cookie = name service
35
	public function getRessource(){
37
	public function getRessource(){
36
		$this->getElement(array('*','*'));
38
		$this->getElement(array('*','*'));
Line 37... Line 39...
37
	}	
39
	}	
38
 
40
 
39
	public function getElement($param){
41
	public function getElement($param){
Line 40... Line 42...
40
		$identification = false;
42
		$identification = false;
41
		$info = array();
43
		$info = array();
42
		
44
		
43
		// Si la licence n'a pas été accepté nous réinitialisons tout
45
		// Si la licence n'a pas été accepté nous réinitialisons tout
Line 44... Line 46...
44
		if (!isset($_COOKIE['coel_licence']) || (isset($_COOKIE['coel_licence']) && $_COOKIE['coel_licence'] != 1)) {
46
		if (!isset($param[2]) && (!isset($_COOKIE['coel_licence']) || (isset($_COOKIE['coel_licence']) && $_COOKIE['coel_licence'] != 1))) {
45
			$this->deconnecterUtilisateur();
47
			$this->deconnecterUtilisateur();
-
 
48
		}
-
 
49
		
46
		}
50
		// S'il y a 3 paramètres, c'est qu'on cherche à mettre à jour la licence
47
		
51
		if (isset($param[2])) {
48
		// S'il y a 3 paramètres, c'est qu'on cherche à mettre à jour la licence
52
			$this->debug[] = "Licence acceptee";
49
		if (isset($param[2])) {
53
			$this->licence_acceptee = true; 
50
			// Mise à jour de la licence
54
			// Mise à jour de la licence
Line 182... Line 186...
182
				$utilisateur_existant['mot_de_passe'] = $mot_de_passe_sha1;
186
				$utilisateur_existant['mot_de_passe'] = $mot_de_passe_sha1;
183
			}
187
			}
Line 184... Line 188...
184
			
188
			
185
			// Vérification de la nécessité de mettre à jour l'utilisateur du COEL vis à vis de l'annuaire de Tela Botanica
189
			// Vérification de la nécessité de mettre à jour l'utilisateur du COEL vis à vis de l'annuaire de Tela Botanica
-
 
190
			if (!is_null($infosAnnuaire) &&  $this->avoirBesoinMiseAJour($utilisateur_existant)) {
186
			if (!is_null($infosAnnuaire) &&  $this->avoirBesoinMiseAJour($utilisateur_existant)) {
191
				$this->debug[] = "Besoin d'une mise à jour";
187
				// Vérifions que la personne s'est bien identifiée
192
				// Vérifions que la personne s'est bien identifiée
-
 
193
				if ($infosAnnuaire['mot_de_passe'] == $mot_de_passe_md5) {
188
				if ($infosAnnuaire['mot_de_passe'] == $mot_de_passe_md5) {
194
					$this->debug[] = "Identification correcte avec md5";
Line 189... Line 195...
189
					$utilisateur_existant = $this->getInfoAnnuaireCoelDepuisInfoAnnuaireDistant($mot_de_passe_sha1, $infosAnnuaire);
195
					$utilisateur_existant = $this->getInfoAnnuaireCoelDepuisInfoAnnuaireDistant($mot_de_passe_sha1, $infosAnnuaire);
-
 
196
					
190
					
197
					$presence_dans_coel = $this->verifierPresenceUtilisateur($infosAnnuaire['id']);
191
					$presence_dans_coel = $this->verifierPresenceUtilisateur($infosAnnuaire['id']);
198
					$this->debug[] = "Presence:$presence_dans_coel";
-
 
199
					if ($presence_dans_coel) {
192
					if ($presence_dans_coel) {
200
						// Nécessite de faire une mise à jour
193
						// Nécessite de faire une mise à jour
201
						$this->debug[] = "Mise à jour de l'utilisateur {$infosAnnuaire['id']}";
194
						$this->mettreAJourUtilisateur($mote_de_passe_sha1, $infosAnnuaire);
202
						$this->mettreAJourUtilisateur($mot_de_passe_sha1, $infosAnnuaire);
195
						$utilisateur_existant['licence'] = (int) $this->recupererLicenceUtilisateur($infosAnnuaire['id']);
203
						$utilisateur_existant['licence'] = (int) $this->recupererLicenceUtilisateur($infosAnnuaire['id']);
-
 
204
					} else {
196
					} else {
205
						// Nécessite d'ajouter le nouvel utilisateur
197
						// Nécessite d'ajouter le nouvel utilisateur
206
						$this->debug[] = "Ajout d'une nouvel utilisateur";
Line 198... Line 207...
198
						$this->ajouterUtilisateurACoel($infosAnnuaire, $mot_de_passe_sha1);
207
						$this->ajouterUtilisateurACoel($infosAnnuaire, $mot_de_passe_sha1);
199
					}
208
					}
-
 
209
					
200
					
210
					$this->setUtilisateur($utilisateur_existant, $permanence);
201
					$this->setUtilisateur($utilisateur_existant, $permanence);
211
				} else {
202
				} else {
212
					$this->debug[] = "Identification INCORRECTE avec md5";
203
					return false;
213
					return false;
204
				}
214
				}
Line 261... Line 271...
261
		return $utilisateur_existant;
271
		return $utilisateur_existant;
262
	}
272
	}
Line 263... Line 273...
263
	
273
	
264
	private function verifierPresenceUtilisateur($id) {
274
	private function verifierPresenceUtilisateur($id) {
265
		$present = false;
-
 
-
 
275
		$present = false;
266
		
276
		$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
267
		$requete =	'SELECT COUNT(cp_id_personne) AS nbre '.
277
		$requete =	'SELECT COUNT(cp_id_personne) AS nbre '.
268
					'FROM coel_personne '.
278
					'FROM coel_personne '.
-
 
279
					"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ".
-
 
280
					"	AND cp_ce_annuaire = cp_id_personne ".
269
					"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ";
281
					"	AND cp_ce_projet = '$cp_ce_projet' ";
270
		try {
282
		try {
271
			$nbre = $this->bdd->query($requete)->fetchColumn();
283
			$nbre = $this->bdd->query($requete)->fetchColumn();
272
			if ($nbre === false) {
284
			if (0 == $nbre) {
273
				$this->debug[] = "L'utilisateur n'est pas présent dans l'annuaire de COEL.";
285
				$this->debug[] = "Utilisateur NON présent dans l'annuaire de COEL.";
-
 
286
			} else if (1 == $nbre) {
274
			} else {
287
				$this->debug[] = "Utilisateur présent dans l'annuaire de COEL.";
-
 
288
				$present = true;
-
 
289
			} else if (false === $nbre) {
275
				$present = true;
290
				$this->debug[] = "Erreur dans la requête de vérification de présence dans l'annuaire de COEL.";
276
			}
291
			}
277
		} catch (PDOException $e) {
292
		} catch (PDOException $e) {
278
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
293
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
Line 279... Line 294...
279
		}
294
		}
280
		
295
		
Line 281... Line 296...
281
		return $present;
296
		return $present;
-
 
297
	}
282
	}
298
	
283
	
299
	private function recupererLicenceUtilisateur($id) {
284
	private function recupererLicenceUtilisateur($id) {
300
		$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
-
 
301
		$requete =	'SELECT cp_mark_licence '.
-
 
302
					'FROM coel_personne '.
285
		$requete =	'SELECT cp_mark_licence '.
303
					"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ".
286
					'FROM coel_personne '.
304
					"	AND cp_ce_annuaire = cp_id_personne ".
287
					"WHERE cp_ce_annuaire = {$this->bdd->quote($id)} ";
305
					"	AND cp_ce_projet = '$cp_ce_projet' ";
288
		try {
306
		try {
289
			$licence = $this->bdd->query($requete)->fetchColumn();
307
			$licence = $this->bdd->query($requete)->fetchColumn();
Line 298... Line 316...
298
		}
316
		}
299
	}
317
	}
Line 300... Line 318...
300
	
318
	
301
	private function mettreAJourMotDePasse($login, $mot_de_passe_md5, $mot_de_passe_sha1) {
319
	private function mettreAJourMotDePasse($login, $mot_de_passe_md5, $mot_de_passe_sha1) {
-
 
320
		try {
302
		try {
321
		   	$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
303
		   	$requete = 	'UPDATE coel_personne '.
322
			$requete = 	'UPDATE coel_personne '.
304
		   				"SET cp_mot_de_passe = '$mot_de_passe_sha1' ". 
323
		   				"SET cp_mot_de_passe = '$mot_de_passe_sha1' ". 
-
 
324
		   				"WHERE cp_login = '$login' ".
305
		   				"WHERE cp_login = '$login' ".
325
		   				"	AND cp_ce_projet = '$cp_ce_projet' ".
306
		   				"AND cp_mot_de_passe = '$mot_de_passe_md5' ";
326
		   				"	AND cp_mot_de_passe = '$mot_de_passe_md5' ";
307
			// Ajout des données
327
			// Ajout des données
308
			$resultat = $this->bdd->exec($requete);
328
			$resultat = $this->bdd->exec($requete);
309
			if ($resultat === false) {
329
			if ($resultat === false) {
310
				$this->messages[] = "Le mot de passe de l'utilisateur n'a pas été mis à jour car la requête a échouée.";
330
				$this->messages[] = "Le mot de passe de l'utilisateur n'a pas été mis à jour car la requête a échouée.";
Line 317... Line 337...
317
	private function mettreAJourUtilisateur($mot_de_passe_sha1, $infos) {
337
	private function mettreAJourUtilisateur($mot_de_passe_sha1, $infos) {
318
		try {
338
		try {
319
		   	$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
339
		   	$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
320
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
340
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
321
			$requete = 	'UPDATE coel_personne '.
341
			$requete = 	'UPDATE coel_personne '.
322
		   				"SET cp_id_personne = '{$infos['id']}', cp_ce_projet = '$cp_ce_projet', ".
342
		   				"SET cp_id_personne = '{$infos['id']}', ".
323
						"	cp_fmt_nom_complet = '$cp_fmt_nom_complet', cp_prenom = '{$infos['prenom']}', cp_nom = '{$infos['nom']}', ".
343
						"	cp_fmt_nom_complet = '$cp_fmt_nom_complet', cp_prenom = '{$infos['prenom']}', cp_nom = '{$infos['nom']}', ".
324
						"	cp_code_postal = '{$infos['code_postal']}', cp_ville = '{$infos['ville']}', cp_truk_courriel = '{$infos['courriel']}', ".
344
						"	cp_code_postal = '{$infos['code_postal']}', cp_ville = '{$infos['ville']}', cp_truk_courriel = '{$infos['courriel']}', ".
325
						"	cp_login = '{$infos['courriel']}', cp_mot_de_passe = '$mot_de_passe_sha1', cp_ce_annuaire = '{$infos['id']}' ".
345
						"	cp_login = '{$infos['courriel']}', cp_mot_de_passe = '$mot_de_passe_sha1', cp_ce_annuaire = '{$infos['id']}' ".
326
		   				"WHERE cp_login = '$login' ".
346
		   				"WHERE cp_login = '$login' ".
-
 
347
		   				"	AND cp_ce_projet = '$cp_ce_projet' ".
327
		   				"AND cp_mot_de_passe = '$mot_de_passe_md5' ";
348
		   				"	AND cp_mot_de_passe = '$mot_de_passe_md5' ";
-
 
349
			
328
			// Ajout des données
350
			// Ajout des données
329
			$resultat = $this->bdd->exec($requete);
351
			$resultat = $this->bdd->exec($requete);
330
			if ($resultat === false) {
352
			if ($resultat === false) {
331
				$this->messages[] = "L'utilisateur n'a pas été mis à jour car la requête a échouée.";
353
				$this->messages[] = "L'utilisateur n'a pas été mis à jour car la requête a échouée.";
332
			}
354
			}
Line 342... Line 364...
342
		   	// de l'annuaire Tela. Dans CoelPersonne, les personnes qui ne sont pas utilisateur sont ajoutés avec un id supérieur à 100 000
364
		   	// de l'annuaire Tela. Dans CoelPersonne, les personnes qui ne sont pas utilisateur sont ajoutés avec un id supérieur à 100 000
343
		   	$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
365
		   	$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
344
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
366
		   	$cp_fmt_nom_complet = $infos['prenom'].' '.$infos['nom'];
345
		   	$cp_mark_licence = '0'; 
367
		   	$cp_mark_licence = '0'; 
346
		   	$requete = 	'INSERT INTO coel_personne '.
368
		   	$requete = 	'INSERT INTO coel_personne '.
347
		   				"(cp_id_personne, cp_ce_projet, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, 
369
		   				'	(cp_id_personne, cp_ce_projet, cp_fmt_nom_complet, cp_prenom, cp_nom, cp_code_postal, '. 
348
		   				  cp_ville, cp_truk_courriel, cp_login, cp_mot_de_passe, cp_ce_annuaire, cp_mark_licence) ".
370
						'	cp_ville, cp_truk_courriel, cp_login, cp_mot_de_passe, cp_ce_annuaire, cp_mark_licence) '.
349
		   				"VALUES ('{$infos['id']}, '$cp_ce_projet', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}',". 
371
		   				"VALUES ('{$infos['id']}', '$cp_ce_projet', '$cp_fmt_nom_complet', '{$infos['prenom']}', '{$infos['nom']}', ". 
350
		   				"'{$infos['code_postal']}', '{$infos['ville']}', '{$infos['courriel']}', '{$infos['courriel']}', '".$mot_de_passe_sha1."',". 
372
		   				"'{$infos['code_postal']}', '{$infos['ville']}', '{$infos['courriel']}', '{$infos['courriel']}', '".$mot_de_passe_sha1."', ". 
351
		   				"'{$infos['id']}', $cp_mark_licence) ";
373
		   				"'{$infos['id']}', $cp_mark_licence) ";
-
 
374
		   	//$this->debug[] = $requete;
352
			// Ajout des données
375
			// Ajout des données
353
			$resultat = $this->bdd->exec($requete);
376
			$resultat = $this->bdd->exec($requete);
354
			if ($resultat === false) {
377
			if ($resultat === false) {
355
				$this->messages[] = "L'utilisateur n'a pas été ajouté dans coel_personne car la requête a échouée.";
378
				$this->debug[] = "Utilisateur NON ajouté dans coel_personne car la requête a échouée.";
-
 
379
			} else {
-
 
380
				$this->debug[] = "Utilisateur ajouté à coel_personne.";
356
			}
381
			}
357
		} catch (PDOException $e) {
382
		} catch (PDOException $e) {
358
			$messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
383
			$messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
359
		}
384
		}
360
	}
385
	}
Line 395... Line 420...
395
	
420
	
396
	private function setInfosAnnuaire($infosAnnuaire)	{
421
	private function setInfosAnnuaire($infosAnnuaire)	{
397
		$_SESSION['coel_infosAnnuaire'] = $infosAnnuaire;
422
		$_SESSION['coel_infosAnnuaire'] = $infosAnnuaire;
Line 398... Line 423...
398
	}
423
	}
399
	
424
	
400
	private function accepterLicence($utilisateur)	{
425
	private function accepterLicence($login)	{
-
 
426
		$sortie = false;
401
		$sortie = false;
427
		try {
402
		try {
428
			$cp_ce_projet = $this->config['coel']['idProjetUtilisateurs'];
403
			$requete = 	'UPDATE coel_personne '.
429
			$requete = 	'UPDATE coel_personne '.
-
 
430
						'SET cp_mark_licence = 1 '.
404
						'SET cp_mark_licence = 1 '.
431
						"WHERE cp_login = {$this->bdd->quote($login)} ";
405
						"WHERE cp_login = {$this->bdd->quote($utilisateur)} ";
432
						"	AND cp_ce_projet = '$cp_ce_projet' ";
406
			$resultat = $this->bdd->exec($requete);
433
			$resultat = $this->bdd->exec($requete);
407
			if ($resultat === false) {
434
			if ($resultat === false) {
-
 
435
				$this->debug[] = "La table Personne n'a pas été mise à jour car la requête a échouée.";
408
				$this->log[] = "La table Personne n'a pas été mise à jour car la requête a échouée.";
436
			} else {
409
			} else {
437
				$this->debug[] = "Création du cookie licence.";
410
				$_SESSION['coel_utilisateur']['licence'] = '1';
438
				$_SESSION['coel_utilisateur']['licence'] = '1';
411
				$this->setCookiePersistant('coel_licence', $utilisateur['licence']);
439
				$this->setCookiePersistant('coel_licence', '1');
412
				$sortie = true;
440
				$sortie = true;
413
			}
441
			}
414
		} catch (PDOException $e) {
442
		} catch (PDOException $e) {