Subversion Repositories Applications.annuaire

Rev

Rev 18 | Rev 50 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 aurelien 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Modèle d'accès à la base de données des listes
5
 * d'ontologies
6
 *
7
 * PHP Version 5
8
 *
9
 * @package   Framework
10
 * @category  Class
11
 * @author	aurelien <aurelien@tela-botanica.org>
12
 * @copyright 2009 Tela-Botanica
13
 * @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @license   http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
15
 * @version   SVN: $$Id: ListeAdmin.php 128 2009-09-02 12:20:55Z aurelien $$
16
 * @link	  /doc/framework/
17
 *
18
 */
19
class AnnuaireModele extends Modele {
20
 
21
	private $config = array();
22
 
23
	/**
38 aurelien 24
	 * Charge la liste complète des annuaires gérés par l'application
25
	 * @return array un tableau contenant des informations sur les annuaires gérés par l'application
4 aurelien 26
	 */
27
   	public function chargerListeAnnuaire() {
28
		$requete = 	'SELECT * '.
29
					'FROM  annu_annuaire '.
30
					'ORDER BY aa_id_annuaire';
31
		$resultat = $this->requeteTous($requete);
32
		$annuaires = array();
33
		foreach ($resultat as $ligne) {
34
			$annuaires[] = $ligne;
35
		}
36
		return $annuaires;
37
	}
38
 
39
	/**
40
	 * Charge la liste complète des champs d'un annuaire
41
	 * @param int $identifiant l'identifiant de l'annuaire demandé
42
	 * @param boolean $charger_liste_champs indique si l'on doit ou non charger la liste des noms des champs
43
	 * @return array un tableau contenant des objets d'informations sur les annuaires
44
	 */
45
   	public function chargerAnnuaire($identifiant, $charger_liste_champs = true) {
46
 
47
		$requete = 	'SELECT * '.
48
					'FROM  annu_annuaire '.
49
					'WHERE aa_id_annuaire = '.$identifiant.' ';
50
		$resultat = $this->requeteTous($requete);
51
		$annuaire = array();
52
		foreach ($resultat as $ligne) {
53
			$annuaire['informations'] = $ligne;
54
		}
55
 
56
		if($charger_liste_champs) {
57
			$requete = 'DESCRIBE '.$annuaire['informations']['aa_bdd'].'.'.$annuaire['informations']['aa_table'];
58
			$resultat = $this->requeteTous($requete);
59
			foreach ($resultat as $colonne) {
60
				$annuaire['colonnes'][] = $colonne;
61
			}
62
		}
63
 
64
		return $annuaire;
65
	}
66
 
18 aurelien 67
	public function obtenirChampsMappageAnnuaire($id_annuaire) {
68
 
69
		$tableau_mappage = array();
70
 
38 aurelien 71
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
72
		"AND at_action IN ('champ_id', 'champ_mail', 'champ_nom', 'champ_prenom', 'champ_pass', 'champ_lettre', 'champ_code_postal', 'champ_ville')";
18 aurelien 73
 
38 aurelien 74
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
18 aurelien 75
 
38 aurelien 76
		$tableau_mappage = array();
18 aurelien 77
 
38 aurelien 78
		if(!$resultat_champs_mappage) {
79
			trigger_error('impossible de récupérer les champs de mappage de l\'annuaire '.$id_annuaire);
80
		}
81
 
82
		foreach ($resultat_champs_mappage as  $champ) {
83
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
84
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
85
		}
86
 
87
		// TODO faire une interface de gestion des champs de mappage
88
 
18 aurelien 89
		return $tableau_mappage ;
90
	}
91
 
9 aurelien 92
	/** Charge le nombre d'inscrits d'une table annuaire mappée
93
	 * @param int $identifiant l'identifiant de l'annuaire mappé
94
	 *
95
	 */
96
   	public function chargerNombreAnnuaireListeInscrits($identifiant) {
97
 
98
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
99
					'FROM  annu_annuaire '.
100
					'WHERE aa_id_annuaire = '.$identifiant.' ';
101
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
102
 
103
		if(!$resultat_informations_annuaire) {
104
			trigger_error('impossible de récupérer les informations de la table '.$identifiant);
105
		}
106
 
107
		$requete_nombre_inscrits = 'SELECT COUNT(*) as nom_inscrits'.
108
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
109
 
110
		if(!$resultat_informations_annuaire) {
111
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
112
		}
113
 
114
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
115
		return $resultat_nombre_inscrits['nom_inscrits'] ;
116
	}
117
 
38 aurelien 118
	public function chargerNombreAnnuaireListeInscritsParDepartement($identifiant) {
119
 
120
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
121
					'FROM  annu_annuaire '.
122
					'WHERE aa_id_annuaire = '.$identifiant.' ';
123
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
124
 
125
		if(!$resultat_informations_annuaire) {
126
			trigger_error('impossible de récupérer les informations de la table '.$identifiant);
127
		}
128
 
129
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($identifiant);
130
		$champ_code_postal = $tableau_mappage[0]['champ_code_postal'];
131
 
132
		$requete_nombre_inscrits = 'SELECT IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
133
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
134
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) AS id, '.
135
						'	COUNT(*) AS nbre '.
136
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
137
						'GROUP BY IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
138
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
139
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) '.
140
						'ORDER BY id ASC ';
141
 
142
			// Récupération des résultats
143
			try {
144
				$donnees = $this->requeteTous($requete_nombre_inscrits);
145
				if ($donnees === false) {
146
					$this->messages[] = "La requête n'a retourné aucun résultat.";
147
				} else {
148
					foreach ($donnees as $donnee) {
149
						$resultat_nombre_inscrits[$donnee['id']] = $donnee['nbre'];
150
					}
151
				}
152
			} catch (PDOException $e) {
153
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
154
			}
155
 
156
		if(!$resultat_informations_annuaire) {
157
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
158
		}
159
 
160
		return $resultat_nombre_inscrits;
161
	}
162
 
163
	public function rechercherInscritDansAnnuaireMappeParChamp($id_annuaire, $champ_critere, $valeur, $modele = false) {
164
 
165
		$sep = '';
166
 
167
		if($modele) {
168
			$sep = '%';
169
		}
170
 
171
		$valeurs = array($champ_critere => $valeur.$sep);
172
 
173
		return $this->rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, array(), true);
174
	}
175
 
4 aurelien 176
	/**
177
	 * Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
9 aurelien 178
	 * @param int $identifiant l'identifiant de l'annuaire mappé
179
	 * @param Array $champs_mappage les champs de mappage à retenir
180
	 * @param int $numero_page le numéro de la page demandée
181
	 * @param int $taille_page la taille de la page demandée
7 aurelien 182
	 *
4 aurelien 183
	 */
9 aurelien 184
   	public function chargerAnnuaireListeInscrits($identifiant, $champs_mappage, $numero_page = 1, $taille_page = 50) {
4 aurelien 185
 
186
		$requete = 	'SELECT * '.
187
					'FROM  annu_annuaire '.
188
					'WHERE aa_id_annuaire = '.$identifiant.' ';
189
		$resultat = $this->requeteTous($requete);
190
		$annuaire = array();
191
		foreach ($resultat as $ligne) {
192
			$annuaire['informations'] = $ligne;
193
		}
194
 
195
		$annuaire['colonnes'] = $champs_mappage;
196
 
197
		$string_champs_mappage = implode(",", $champs_mappage);
198
 
7 aurelien 199
		$requete = 'SELECT '.$string_champs_mappage.
200
				' FROM '.$annuaire['informations']['aa_bdd'].'.'.$annuaire['informations']['aa_table'].
201
				' ORDER BY '.$champs_mappage['champ_id'].
202
				' LIMIT '.(($numero_page-1)*$taille_page).','.($taille_page);
4 aurelien 203
 
204
		$resultat = $this->requeteTous($requete);
205
		foreach ($resultat as $colonne) {
206
			$annuaire['inscrits'][] = $colonne;
207
		}
208
 
209
		return $annuaire;
210
	}
211
 
212
	/**
213
	 * Insère une nouvelle ligne dans la table d'inscription temporaire, contenant
214
	 * les données sérialisées d'un utilisateur
215
	 * @param string $identifiant l'identifiant de cette tentative
216
	 * @param string $donnees les données d'inscription (une variable sérialisée))
217
	 * @return PdoStatement en cas de succès, false sinon
218
	 */
219
	public function ajouterNouvelleInscriptionTemporaire($identifiant, $donnees) {
220
 
221
		// on protège et on sérialise les données
222
		$identifiant = $this->proteger($identifiant);
38 aurelien 223
		$donnees = base64_encode(serialize($donnees));
4 aurelien 224
		$donnees = $this->proteger($donnees);
225
 
38 aurelien 226
		//echo $donnees ;
227
 
4 aurelien 228
		// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
229
		$requete = 	'INSERT INTO annu_inscription_temp '.
230
					'VALUES '.
38 aurelien 231
					'('.$identifiant.','.$donnees.', NOW())';
4 aurelien 232
 
233
		return $this->requete($requete);
234
	}
235
 
236
	/**
237
	 * Récupère une ligne dans la table d'inscription temporaire, contenant
238
	 * les données sérialisées d'un utilisateur
239
	 * @param string $identifiant l'identifiant de la tentative
240
	 * @return Array en cas de succès, false sinon
241
	 */
242
	public function chargerDonneesInscriptionTemporaire($identifiant) {
243
 
244
		$identifiant = $this->proteger($identifiant);
245
 
246
		$requete = 	'SELECT * FROM annu_inscription_temp '.
247
					'WHERE '.
248
					'ait_id = '.$identifiant;
249
 
250
		$donnees_inscription = $this->requeteUn($requete);
251
 
252
		if($donnees_inscription) {
38 aurelien 253
			return unserialize(base64_decode($donnees_inscription['ait_donnees']));
4 aurelien 254
		}
255
 
256
		return false;
257
	}
258
 
259
	/**
260
	 * Supprime une ligne dans la table d'inscription temporaire, contenant
261
	 * les données sérialisées d'un utilisateur
262
	 * @param string $identifiant l'identifiant de la tentative
263
	 * @return PDOStatement en cas de succès, false sinon
264
	 */
265
	public function supprimerDonneesInscriptionTemporaire($identifiant) {
266
 
267
		$identifiant = $this->proteger($identifiant);
268
 
269
		$requete = 	'DELETE FROM annu_inscription_temp '.
270
					'WHERE '.
271
					'ait_id = '.$identifiant;
272
 
38 aurelien 273
		//return $this->requete($requete);
274
 
275
		return true;
4 aurelien 276
	}
277
 
5 aurelien 278
	/**
279
	 * Ajoute les valeurs données dans l'annuaire indiqué
280
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
281
	 * @param Array $valeurs_mappees un tableau de valeurs à ajouter
282
	 * @param string $nom_champs les noms des champs dans lesquels on va ajouter les données
283
	 * @return int l'identifiant du nouvel enregistrement
284
	 */
18 aurelien 285
	public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
4 aurelien 286
 
287
		$requete_infos_annuaire = 'SELECT * '.
288
					'FROM  annu_annuaire '.
289
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
290
 
5 aurelien 291
		$resultat = $this->requeteUn($requete_infos_annuaire);
4 aurelien 292
		$annuaire = array();
5 aurelien 293
 
294
		//en cas d'erreur on renvoie false
295
		//TODO: lever une exception
296
		if(!$resultat) {
297
			return false;
4 aurelien 298
		}
299
 
5 aurelien 300
		$annuaire = $resultat;
301
 
4 aurelien 302
		$valeurs_prot = array_map(array($this,'proteger'),$valeurs_mappees);
303
 
304
		$valeurs = implode(',',$valeurs_prot);
305
		$champs = implode(',',array_keys($valeurs_mappees));
306
 
5 aurelien 307
		$requete_insertion_annuaire = 'INSERT INTO '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
4 aurelien 308
			'('.$champs.') '.
309
			'VALUES ('.$valeurs.')';
310
 
311
		$id_nouvel_enregistrement = false;
312
 
313
		//en cas d'erreur on renvoie false
314
		//TODO: lever une exception
315
		if(!$this->requete($requete_insertion_annuaire)) {
316
			return $id_nouvel_enregistrement;
317
		}
318
 
5 aurelien 319
		// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
38 aurelien 320
		// (Les requetes du style SELECT MAX(id)... ne garantissent pas qu'on récupère le bon id
5 aurelien 321
		// si une autre insertion a eu lieu entre temps)
4 aurelien 322
		$requete_nouvel_id = 	'SELECT '.$nom_champs['champ_id'].' '.
5 aurelien 323
								'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
4 aurelien 324
								'WHERE '.
325
								$nom_champs['champ_mail'].' = '.$this->proteger($valeurs_mappees[$nom_champs['champ_mail']]);
326
 
327
		$resultat_nouvel_id = $this->requeteUn($requete_nouvel_id);
328
 
329
		// en cas d'erreur on renvoie false
330
		// TODO: lever une exception
331
		if(!$resultat_nouvel_id) {
332
			return $id_nouvel_enregistrement;
333
		}
334
 
335
		$id_nouvel_enregistrement = $resultat_nouvel_id[$nom_champs['champ_id']];
336
 
337
		return $id_nouvel_enregistrement;
338
	}
339
 
18 aurelien 340
	public function modifierInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur, $valeurs_mappees, $champs_mappage) {
341
 
342
		$requete_infos_annuaire = 'SELECT * '.
343
					'FROM  annu_annuaire '.
344
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
345
 
346
		$resultat = $this->requeteUn($requete_infos_annuaire);
347
		$annuaire = array();
348
 
349
		unset($valeurs_mappees[$champs_mappage['champ_id']]);
350
 
351
		//en cas d'erreur on renvoie false
352
		//TODO: lever une exception
353
		if(!$resultat) {
354
			return false;
355
		}
356
 
357
		$annuaire = $resultat;
358
 
359
		$requete_modification_annuaire = 'UPDATE '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
360
		'SET ';
361
		foreach($valeurs_mappees as $cle => $valeur) {
362
			$requete_modification_annuaire .= $cle.' = '.$this->proteger($valeur).', ';
363
		}
364
 
365
		$requete_modification_annuaire = rtrim($requete_modification_annuaire,', ').' ' ;
366
 
367
		$requete_modification_annuaire .= 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur ;
368
 
369
		//en cas d'erreur on renvoie false
370
		//TODO: lever une exception
371
		if(!$this->requete($requete_modification_annuaire)) {
372
			return false;
373
		} else {
374
			return true;
375
		}
376
 
377
	}
378
 
379
	public function obtenirMailParId($id_annuaire, $id_utilisateur) {
380
 
381
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
38 aurelien 382
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
383
		$champs_mappage = $champs_mappage[0];
18 aurelien 384
 
385
		$requete_infos_annuaire = 'SELECT * '.
386
					'FROM annu_annuaire '.
387
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
388
 
389
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
390
 
391
		// en cas d'erreur on renvoie false
392
		// TODO: lever une exception
393
		if(!$resultat_infos_annuaire) {
394
			return false;
395
		}
396
 
397
		$champs_mappage_str = implode(',',$champs_mappage);
398
		$id_utilisateur = $this->proteger($id_utilisateur);
399
 
400
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_mail'].' '.
401
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
402
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
403
 
38 aurelien 404
 
405
 
406
		//echo $requete_selection_utilisateur;
18 aurelien 407
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
408
 
409
		// en cas d'erreur on renvoie false
410
		// TODO: lever une exception
411
		if(!$resultat_selection_utilisateur) {
412
			return false;
413
		} else {
414
			return $resultat_selection_utilisateur[$champs_mappage['champ_mail']];
415
		}
416
 
417
	}
418
 
38 aurelien 419
	public function obtenirIdParMail($id_annuaire, $mail_utilisateur) {
420
 
421
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
422
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
423
		$champs_mappage = $champs_mappage[0];
424
 
425
		$requete_infos_annuaire = 'SELECT * '.
426
					'FROM annu_annuaire '.
427
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
428
 
429
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
430
 
431
		// en cas d'erreur on renvoie false
432
		// TODO: lever une exception
433
		if(!$resultat_infos_annuaire) {
434
			return false;
435
		}
436
 
437
		$champs_mappage_str = implode(',',$champs_mappage);
438
		$id_utilisateur = $this->proteger($id_utilisateur);
439
 
440
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
441
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
442
										 'WHERE '.$champs_mappage['champ_mail'].' = '.$this->proteger($mail_utilisateur);
443
 
444
 
445
		//echo $requete_selection_utilisateur;
446
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
447
 
448
		// en cas d'erreur on renvoie false
449
		// TODO: lever une exception
450
		if(!$resultat_selection_utilisateur) {
451
			return false;
452
		} else {
453
			return $resultat_selection_utilisateur[$champs_mappage['champ_id']];
454
		}
455
 
456
	}
457
 
5 aurelien 458
	/**
459
	 * Récupère les champs demandé dans l'annuaire indiqué
460
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
461
	 * @param int $id_utilisateur l'identifiant de l'utilisateur dont on veut les informations
462
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
463
	 * @return Array les informations demandées
464
	 */
18 aurelien 465
	public function obtenirValeursUtilisateur($id_annuaire, $id_utilisateur, $champs_mappage) {
4 aurelien 466
 
467
		$requete_infos_annuaire = 'SELECT * '.
468
					'FROM annu_annuaire '.
469
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
470
 
471
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
5 aurelien 472
 
4 aurelien 473
		// en cas d'erreur on renvoie false
474
		// TODO: lever une exception
475
		if(!$resultat_infos_annuaire) {
476
			return false;
477
		}
478
 
479
		$champs_mappage_str = implode(',',$champs_mappage);
480
		$id_utilisateur = $this->proteger($id_utilisateur);
481
 
482
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage_str.' '.
483
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
484
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
485
 
486
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
487
 
488
		// en cas d'erreur on renvoie false
489
		// TODO: lever une exception
490
		if(!$resultat_selection_utilisateur) {
491
			return false;
492
		} else {
493
			return $resultat_selection_utilisateur;
494
		}
495
	}
18 aurelien 496
 
497
	/**
498
	 * Supprime une inscription dans une table annuaire
499
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
500
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
501
	 * @return boolean true si la suppression a réussi, false sinon
502
	 */
503
	public function supprimerInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur) {
504
 
505
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
506
 
507
		$requete_infos_annuaire = 'SELECT * '.
508
			'FROM annu_annuaire '.
509
			'WHERE aa_id_annuaire = '.$id_annuaire.' ';
510
 
511
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
512
 
513
		// en cas d'erreur on renvoie false
514
		// TODO: lever une exception
515
		if(!$resultat_infos_annuaire) {
516
			return false;
517
		}
518
 
519
		$requete_suppression_utilisateur = 'DELETE FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
520
										 'WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
521
 
522
		$resultat_suppression_utilisateur = $this->requeteUn($requete_suppression_utilisateur);
523
 
524
		// en cas d'erreur on renvoie false
525
		// TODO: lever une exception
526
		if($this->utilisateurExisteParId($id_annuaire, $id_utilisateur, $champs_mappage)) {
527
 
528
			return false;
529
		}
530
 
531
		return true;
532
	}
533
 
534
	/**
535
	 * Renvoie vrai si un utilisateur existe suivant un id donné
536
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
537
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
538
	 * @return boolean true si l'utilisateur existe, false sinon
539
	 */
540
	public function utilisateurExisteParId($id_annuaire, $id_utilisateur) {
541
 
542
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
543
 
544
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
545
					'FROM  annu_annuaire '.
546
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
547
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
548
 
549
		if(!$resultat_informations_annuaire) {
550
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
551
		}
552
 
553
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit'.
554
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
555
				' WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
556
 
557
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
558
 
559
		if(!$resultat_nombre_inscrits) {
560
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
561
		}
562
 
563
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
564
 
565
	}
566
 
567
	 /** Renvoie vrai si un utilisateur existe suivant un mail donné
568
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel recherche
569
	 * @param int $id_utilisateur le mail de l'utilisateur à chercher
570
	 * @return boolean true si l'utilisateur existe, false sinon
571
	 */
572
	public function utilisateurExisteParMail($id_annuaire, $mail) {
573
 
574
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
575
 
576
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
577
					'FROM  annu_annuaire '.
578
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
579
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
580
 
581
		if(!$resultat_informations_annuaire) {
582
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
583
		}
584
 
38 aurelien 585
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit '.
18 aurelien 586
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
587
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
588
 
589
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
590
 
591
		if(!$resultat_nombre_inscrits) {
592
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
593
		}
594
 
595
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
596
 
597
	}
598
 
599
	/**
600
	 * @param int $id_annuaire identifiant de l'annuaire dans lequel on recherche
601
	 * @param array $valeurs un tableau de valeurs à rechercher
602
	 * @param array $id_a_inclure un tableau d'identifiants à inclure (pour chainer des recherches)
603
	 * @param boolean $exclusive indique si l'on recherche effectue une recherche exclusive ou inclusive (AND, ou OR)
604
	 */
605
	public function rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, $id_a_inclure = array(), $exclusive = true) {
606
 
607
		// Si la fonction est appelée et que tous les critères sont vides
608
		if(count($valeurs) == 0 && count($id_a_inclure) == 0) {
609
			// on sort directement
610
			return array();
611
		}
612
 
613
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
614
					'FROM  annu_annuaire '.
615
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
616
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
617
 
618
		$requete_recherche_inscrits = 'SELECT * '.
619
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
620
				' WHERE ';
621
 
622
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
623
 
624
		if($exclusive) {
625
			$separateur = ' AND ';
626
		} else {
627
			$separateur = ' OR ';
628
		}
629
 
630
		if(is_array($id_a_inclure) && count($id_a_inclure) != 0) {
631
 
632
			$id_inclus = implode(',',$id_a_inclure);
633
 
634
			$requete_recherche_inscrits	.= $champs_mappage[0]['champ_id'].' IN '.
635
			'('.$id_inclus.')'.$separateur ;
636
		}
637
 
638
		foreach($valeurs as $champ => $valeur) {
639
			if(trim($valeur) != '') {
640
				if(strpos($valeur,"%") != false) {
641
					$operateur = ' LIKE ';
642
				} else {
643
					$operateur = ' = ';
644
				}
645
				$requete_recherche_inscrits .= $champ.$operateur.$this->proteger($valeur).$separateur;
646
			}
647
		}
648
 
649
		$requete_recherche_inscrits = rtrim($requete_recherche_inscrits,$separateur);
650
 
651
		$resultat_recherche_inscrits = $this->requeteTous($requete_recherche_inscrits);
652
 
653
		if(!$resultat_recherche_inscrits) {
654
			$resultat_recherche_inscrits = array();
655
		}
656
 
657
		return $resultat_recherche_inscrits ;
658
	}
659
 
660
	public function reinitialiserMotDePasse($id_annuaire, $mail) {
661
 
662
		$str = "";
663
		$chaine = "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789";
664
 
665
		srand((double)microtime()*1000000);
666
		for($i = 0; $i < 10; $i++){
667
			$str .= $chaine[rand()%strlen($chaine)];
668
		}
669
 
670
		$nouveau_mdp = $str;
671
 
672
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
673
					'FROM  annu_annuaire '.
674
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
675
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
676
 
677
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
678
 
679
		$requete_modification_mdp = 'UPDATE '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
680
				' SET '.$champs_mappage[0]['champ_pass'].' = '.$nouveau_mdp.
681
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
682
 
683
		return $nouveau_mdp;
684
 
685
		$resultat_modification_mdp = $this->requete($requete_modification_mdp);
686
 
687
		if($resultat_modification_mdp) {
688
			return $nouveau_mdp;
689
		}
690
 
691
		return false;
692
	}
693
 
4 aurelien 694
}
695
?>