Subversion Repositories Applications.annuaire

Rev

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

Rev 98 Rev 109
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Modèle d'accès à la base de données des listes
4
 * Modèle d'accès à la base de données des listes
5
 * d'ontologies
5
 * d'ontologies
6
 *
6
 *
7
 * PHP Version 5
7
 * PHP Version 5
8
 *
8
 *
9
 * @package   Framework
9
 * @package   Framework
10
 * @category  Class
10
 * @category  Class
11
 * @author	aurelien <aurelien@tela-botanica.org>
11
 * @author	aurelien <aurelien@tela-botanica.org>
12
 * @copyright 2009 Tela-Botanica
12
 * @copyright 2009 Tela-Botanica
13
 * @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
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
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 $$
15
 * @version   SVN: $$Id: ListeAdmin.php 128 2009-09-02 12:20:55Z aurelien $$
16
 * @link	  /doc/framework/
16
 * @link	  /doc/framework/
17
 *
17
 *
18
 */
18
 */
19
class AnnuaireModele extends Modele {
19
class AnnuaireModele extends Modele {
20
 
20
 
21
	private $config = array();
21
	private $config = array();
22
 
22
 
23
	/**
23
	/**
24
	 * Charge la liste complète des annuaires gérés par l'application
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
25
	 * @return array un tableau contenant des informations sur les annuaires gérés par l'application
26
	 */
26
	 */
27
   	public function chargerListeAnnuaire() {
27
   	public function chargerListeAnnuaire() {
28
		$requete = 	'SELECT * '.
28
		$requete = 	'SELECT * '.
29
					'FROM  annu_annuaire '.
29
					'FROM  annu_annuaire '.
30
					'ORDER BY aa_id_annuaire';
30
					'ORDER BY aa_id_annuaire';
31
		$resultat = $this->requeteTous($requete);
31
		$resultat = $this->requeteTous($requete);
32
		$annuaires = array();
32
		$annuaires = array();
33
		foreach ($resultat as $ligne) {
33
		foreach ($resultat as $ligne) {
34
			$annuaires[] = $ligne;
34
			$annuaires[] = $ligne;
35
		}
35
		}
36
		return $annuaires;
36
		return $annuaires;
37
	}
37
	}
38
 
38
 
39
	/**
39
	/**
40
	 * Charge la liste complète des champs d'un annuaire
40
	 * Charge la liste complète des champs d'un annuaire
41
	 * @param int $identifiant l'identifiant de l'annuaire demandé
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
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
43
	 * @return array un tableau contenant des objets d'informations sur les annuaires
44
	 */
44
	 */
45
   	public function chargerAnnuaire($identifiant, $charger_liste_champs = true) {
45
   	public function chargerAnnuaire($identifiant, $charger_liste_champs = true) {
46
 
46
 
47
		$requete = 	'SELECT * '.
47
		$requete = 	'SELECT * '.
48
					'FROM  annu_annuaire '.
48
					'FROM  annu_annuaire '.
49
					'WHERE aa_id_annuaire = '.$identifiant.' ';
49
					'WHERE aa_id_annuaire = '.$identifiant.' ';
50
		$resultat = $this->requeteTous($requete);
50
		$resultat = $this->requeteTous($requete);
51
		$annuaire = array();
51
		$annuaire = array();
52
		foreach ($resultat as $ligne) {
52
		foreach ($resultat as $ligne) {
53
			$annuaire['informations'] = $ligne;
53
			$annuaire['informations'] = $ligne;
54
		}
54
		}
55
 
55
 
56
		if($charger_liste_champs) {
56
		if($charger_liste_champs) {
57
			$requete = 'DESCRIBE '.$annuaire['informations']['aa_bdd'].'.'.$annuaire['informations']['aa_table'];
57
			$requete = 'DESCRIBE '.$annuaire['informations']['aa_bdd'].'.'.$annuaire['informations']['aa_table'];
58
			$resultat = $this->requeteTous($requete);
58
			$resultat = $this->requeteTous($requete);
59
			foreach ($resultat as $colonne) {
59
			foreach ($resultat as $colonne) {
60
				$annuaire['colonnes'][] = $colonne;
60
				$annuaire['colonnes'][] = $colonne;
61
			}
61
			}
62
		}
62
		}
63
 
63
 
64
		return $annuaire;
64
		return $annuaire;
65
	}
65
	}
66
 
66
 
67
	/**
67
	/**
68
	 * Charge les champs de mappage d'un annuaire, c'est à dire les champs de metadonnées qui correspondent à un champ
68
	 * Charge les champs de mappage d'un annuaire, c'est à dire les champs de metadonnées qui correspondent à un champ
69
	 * déjà présent dans la table mappée
69
	 * déjà présent dans la table mappée
70
	 * @param int $id_annuaire l'identifiant de l'annuaire
70
	 * @param int $id_annuaire l'identifiant de l'annuaire
71
	 * @return array un tableau contenant les noms de champs mappés et les ids des champs métadonnées correspondants
71
	 * @return array un tableau contenant les noms de champs mappés et les ids des champs métadonnées correspondants
72
	 */
72
	 */
73
	public function obtenirChampsMappageAnnuaire($id_annuaire) {
73
	public function obtenirChampsMappageAnnuaire($id_annuaire) {
74
 
74
 
75
		$tableau_mappage = array();
75
		$tableau_mappage = array();
76
 
76
 
77
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
77
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
78
		"AND at_action IN ('champ_id', 'champ_mail', 'champ_nom', 'champ_prenom', 'champ_pass', 'champ_lettre','champ_pays', 'champ_code_postal', 'champ_ville')";
78
		"AND at_action IN ('champ_id', 'champ_mail', 'champ_nom', 'champ_prenom', 'champ_pass', 'champ_lettre','champ_pays', 'champ_code_postal', 'champ_ville', 'champ_date_inscription')";
79
 
79
 
80
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
80
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
81
 
81
 
82
		$tableau_mappage = array();
82
		$tableau_mappage = array();
83
 
83
 
84
		if(!$resultat_champs_mappage) {
84
		if(!$resultat_champs_mappage) {
85
			trigger_error('impossible de récupérer les champs de mappage de l\'annuaire '.$id_annuaire);
85
			trigger_error('impossible de récupérer les champs de mappage de l\'annuaire '.$id_annuaire);
86
		}
86
		}
87
 
87
 
88
		foreach ($resultat_champs_mappage as  $champ) {
88
		foreach ($resultat_champs_mappage as  $champ) {
89
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
89
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
90
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
90
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
91
		}
91
		}
92
 
-
 
93
		//echo Debug::printr($tableau_mappage);
-
 
94
 
92
 
95
		// TODO faire une interface de gestion des champs de mappage
93
		// TODO faire une interface de gestion des champs de mappage
96
 
94
 
97
		return $tableau_mappage ;
95
		return $tableau_mappage ;
98
	}
96
	}
99
 
97
 
100
	/**
98
	/**
101
	 * Charge les champs obligatoire d'un annuaire, c'est à dire les champs qui doivent être présents et remplis dans le
99
	 * Charge les champs obligatoire d'un annuaire, c'est à dire les champs qui doivent être présents et remplis dans le
102
	 * formulaire
100
	 * formulaire
103
	 * @param int $id_annuaire l'identifiant de l'annuaire
101
	 * @param int $id_annuaire l'identifiant de l'annuaire
104
	 * @return un tableau contenant les ids des champs obligatoire
102
	 * @return un tableau contenant les ids des champs obligatoire
105
	 */
103
	 */
106
	public function obtenirChampsObligatoires($id_annuaire) {
104
	public function obtenirChampsObligatoires($id_annuaire) {
107
 
105
 
108
		$tableau_mappage = array();
106
		$tableau_mappage = array();
109
 
107
 
110
		$requete_champs_obligatoire = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
108
		$requete_champs_obligatoire = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
111
		"AND at_action = 'champ_obligatoire'";
109
		"AND at_action = 'champ_obligatoire'";
112
 
110
 
113
		$resultat_champs_obligatoire = $this->requeteTous($requete_champs_obligatoire);
111
		$resultat_champs_obligatoire = $this->requeteTous($requete_champs_obligatoire);
114
 
112
 
115
		$tableau_mappage = array();
113
		$tableau_mappage = array();
116
 
114
 
117
		if(!$resultat_champs_obligatoire) {
115
		if(!$resultat_champs_obligatoire) {
118
			trigger_error('impossible de récupérer les champs de obligatoire de l\'annuaire '.$id_annuaire);
116
			trigger_error('impossible de récupérer les champs de obligatoire de l\'annuaire '.$id_annuaire);
119
		}
117
		}
120
 
118
 
121
		foreach ($resultat_champs_obligatoire as  $champ) {
119
		foreach ($resultat_champs_obligatoire as  $champ) {
122
			// le tableau des champs obligatoires se présente sous la forme nom_champ_metadonnee => nom_champ_annuaire
120
			// le tableau des champs obligatoires se présente sous la forme nom_champ_metadonnee => nom_champ_annuaire
123
			$tableau_obligatoire[$champ['at_valeur']] = $champ['at_ressource'];
121
			$tableau_obligatoire[$champ['at_valeur']] = $champ['at_ressource'];
124
		}
122
		}
125
 
123
 
126
		// TODO faire une interface de gestion des champs obligatoires
124
		// TODO faire une interface de gestion des champs obligatoires
127
		return $tableau_obligatoire ;
125
		return $tableau_obligatoire ;
128
	}
126
	}
129
 
127
 
130
	/**
128
	/**
131
	 * Charge les champs de cartographie d'un annuaire, c'est à dire les champs utilisées pour générer la carte des inscrits
129
	 * Charge les champs de cartographie d'un annuaire, c'est à dire les champs utilisées pour générer la carte des inscrits
132
	 * @param int $id_annuaire l'identifiant de l'annuaire
130
	 * @param int $id_annuaire l'identifiant de l'annuaire
133
	 * @return array un tableau contenant les identifiants ou les noms des champs cartographiques
131
	 * @return array un tableau contenant les identifiants ou les noms des champs cartographiques
134
	 */
132
	 */
135
	public function obtenirChampsCartographie($id_annuaire) {
133
	public function obtenirChampsCartographie($id_annuaire) {
136
 
134
 
137
		// TODO rendre les noms de champs plus générique
135
		// TODO rendre les noms de champs plus générique
138
		$requete_champs_carto = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
136
		$requete_champs_carto = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
139
		"AND at_action IN ('champ_pays', 'champ_code_postal')";
137
		"AND at_action IN ('champ_pays', 'champ_code_postal')";
140
 
138
 
141
		$resultat_champs_carto = $this->requeteTous($requete_champs_carto);
139
		$resultat_champs_carto = $this->requeteTous($requete_champs_carto);
142
 
140
 
143
		$tableau_carto = array();
141
		$tableau_carto = array();
144
 
142
 
145
		if(!$resultat_champs_carto) {
143
		if(!$resultat_champs_carto) {
146
			trigger_error('impossible de récupérer les champs cartographiques de l\'annuaire '.$id_annuaire);
144
			trigger_error('impossible de récupérer les champs cartographiques de l\'annuaire '.$id_annuaire);
147
		}
145
		}
148
 
146
 
149
		foreach ($resultat_champs_carto as  $champ) {
147
		foreach ($resultat_champs_carto as  $champ) {
150
			// le tableau des champs carto se présente sous la forme type de champ => [0] nom_champ_annuaire [1] nomù champ metadonnées
148
			// le tableau des champs carto se présente sous la forme type de champ => [0] nom_champ_annuaire [1] nomù champ metadonnées
151
			$tableau_carto[$champ['at_action']][0] = $champ['at_ressource'];
149
			$tableau_carto[$champ['at_action']][0] = $champ['at_ressource'];
152
			$tableau_carto[$champ['at_action']][1] = $champ['at_valeur'];
150
			$tableau_carto[$champ['at_action']][1] = $champ['at_valeur'];
153
		}
151
		}
154
 
152
 
155
		// TODO faire une interface de gestion des champs de mappage
153
		// TODO faire une interface de gestion des champs de mappage
156
		return $tableau_carto ;
154
		return $tableau_carto ;
157
	}
155
	}
158
 
156
 
159
	/**
157
	/**
160
	 * Renvoie l'identifiant du champ associé à l'image de profil (Avatar) dans un annuaire donné
158
	 * Renvoie l'identifiant du champ associé à l'image de profil (Avatar) dans un annuaire donné
161
	 * @param int $id_annuaire l'identifiant de l'annuaire
159
	 * @param int $id_annuaire l'identifiant de l'annuaire
162
	 * @return string l'identifiant du champ avatar dans l'annuaire donné ou false s'il n'en existe pas
160
	 * @return string l'identifiant du champ avatar dans l'annuaire donné ou false s'il n'en existe pas
163
	 */
161
	 */
164
	public function obtenirChampAvatar($id_annuaire) {
162
	public function obtenirChampAvatar($id_annuaire) {
165
 
163
 
166
		$requete_champs_avatar = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
164
		$requete_champs_avatar = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
167
		"AND at_action = 'champ_avatar'";
165
		"AND at_action = 'champ_avatar'";
168
 
166
 
169
		$resultat_champs_avatar = $this->requeteUn($requete_champs_avatar);
167
		$resultat_champs_avatar = $this->requeteUn($requete_champs_avatar);
170
 
168
 
171
		$champ_avatar = false;
169
		$champ_avatar = false;
172
 
170
 
173
		if(!$resultat_champs_avatar) {
171
		if(!$resultat_champs_avatar) {
174
			trigger_error('impossible de récupérer le champ avatar de l\'annuaire '.$id_annuaire);
172
			trigger_error('impossible de récupérer le champ avatar de l\'annuaire '.$id_annuaire);
175
		}
173
		}
176
 
174
 
177
		$champ_avatar = $resultat_champs_avatar['at_valeur'];
175
		$champ_avatar = $resultat_champs_avatar['at_valeur'];
178
 
176
 
179
		// TODO faire une interface de gestion des champs de mappage
177
		// TODO faire une interface de gestion des champs de mappage
180
		return $champ_avatar ;
178
		return $champ_avatar ;
181
	}
179
	}
182
 
180
 
183
	 /** Renvoie l'identifiant du champ associé à l'image de profil (Avatar) dans un annuaire donné
181
	 /** Renvoie l'identifiant du champ associé à l'image de profil (Avatar) dans un annuaire donné
184
	 * @param int $id_annuaire l'identifiant de l'annuaire
182
	 * @param int $id_annuaire l'identifiant de l'annuaire
185
	 * @return string l'identifiant du champ date inscription dans l'annuaire donné ou false s'il n'en existe pas
183
	 * @return string l'identifiant du champ date inscription dans l'annuaire donné ou false s'il n'en existe pas
186
	 */
184
	 */
187
	public function obtenirChampDateEtValidite($id_annuaire) {
185
	public function obtenirChampDateEtValidite($id_annuaire) {
188
 
186
 
189
		$requete_champs_date_validite = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
187
		$requete_champs_date_validite = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
190
		"AND at_action IN ('champ_date_inscription', 'champ_date_desinscription', 'champ_validite_inscription')";
188
		"AND at_action IN ('champ_date_inscription', 'champ_date_desinscription', 'champ_validite_inscription')";
191
 
189
 
192
		$resultat_champs_date_validite = $this->requeteTous($requete_champs_date_validite);
190
		$resultat_champs_date_validite = $this->requeteTous($requete_champs_date_validite);
193
 
191
 
194
		$champs_date_validite = array();
192
		$champs_date_validite = array();
195
		foreach ($resultat_champs_date_validite as $champ) {
193
		foreach ($resultat_champs_date_validite as $champ) {
196
     		$resultat_champs_date_validite[$champ['at_action']] = $champ['at_ressource'];
194
     		$resultat_champs_date_validite[$champ['at_action']] = $champ['at_ressource'];
197
		}
195
		}
198
 
196
 
199
		// TODO faire une interface de gestion des champs de mappage
197
		// TODO faire une interface de gestion des champs de mappage
200
		return $resultat_champs_date_validite ;
198
		return $resultat_champs_date_validite ;
201
	}
199
	}
202
 
200
 
203
	/**
201
	/**
204
	 * Charge tous les champs de description de l'annuaire
202
	 * Charge tous les champs de description de l'annuaire
205
	 * @param int $id_annuaire l'identifiant de l'annuaire
203
	 * @param int $id_annuaire l'identifiant de l'annuaire
206
	 * @return array un tableau contenant les noms de champs mappés et les ids des champs métadonnées correspondants
204
	 * @return array un tableau contenant les noms de champs mappés et les ids des champs métadonnées correspondants
207
	 */
205
	 */
208
	public function obtenirChampsDescriptionAnnuaire($id_annuaire) {
206
	public function obtenirChampsDescriptionAnnuaire($id_annuaire) {
209
 
207
 
210
		$tableau_mappage = array();
208
		$tableau_mappage = array();
211
 
209
 
212
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire);
210
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire);
213
 
211
 
214
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
212
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
215
 
213
 
216
		$tableau_mappage = array();
214
		$tableau_mappage = array();
217
 
215
 
218
		if(!$resultat_champs_mappage) {
216
		if(!$resultat_champs_mappage) {
219
			trigger_error('impossible de récupérer les champs décrivant l\'annuaire '.$id_annuaire);
217
			trigger_error('impossible de récupérer les champs décrivant l\'annuaire '.$id_annuaire);
220
		}
218
		}
221
 
219
 
222
		foreach ($resultat_champs_mappage as  $champ) {
220
		foreach ($resultat_champs_mappage as  $champ) {
223
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
221
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
224
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
222
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
225
		}
223
		}
226
 
224
 
227
		// TODO faire une interface de gestion des champs de mappage
225
		// TODO faire une interface de gestion des champs de mappage
228
 
226
 
229
		return $tableau_mappage ;
227
		return $tableau_mappage ;
230
	}
228
	}
231
 
229
 
232
	/** Charge le nombre d'inscrits d'une table annuaire mappée en les groupant par départements
230
	/** Charge le nombre d'inscrits d'une table annuaire mappée en les groupant par départements
233
	 * @param int $identifiant l'identifiant de l'annuaire mappé
231
	 * @param int $identifiant l'identifiant de l'annuaire mappé
234
	 * @return array un tableau indexé par les numéros de departement contenant le nombre d'inscrits à chacun
232
	 * @return array un tableau indexé par les numéros de departement contenant le nombre d'inscrits à chacun
235
	 *
233
	 *
236
	 */
234
	 */
237
	public function chargerNombreAnnuaireListeInscritsParDepartement($identifiant) {
235
	public function chargerNombreAnnuaireListeInscritsParDepartement($identifiant) {
238
 
236
 
239
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
237
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
240
					'FROM  annu_annuaire '.
238
					'FROM  annu_annuaire '.
241
					'WHERE aa_id_annuaire = '.$identifiant.' ';
239
					'WHERE aa_id_annuaire = '.$identifiant.' ';
242
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
240
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
243
 
241
 
244
		if(!$resultat_informations_annuaire) {
242
		if(!$resultat_informations_annuaire) {
245
			trigger_error('impossible de récupérer les informations de la table '.$identifiant);
243
			trigger_error('impossible de récupérer les informations de la table '.$identifiant);
246
		}
244
		}
247
 
245
 
248
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($identifiant);
246
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($identifiant);
249
		$champ_code_postal = $tableau_mappage[0]['champ_code_postal'];
247
		$champ_code_postal = $tableau_mappage[0]['champ_code_postal'];
250
 
248
 
251
		$requete_nombre_inscrits = 'SELECT IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
249
		$requete_nombre_inscrits = 'SELECT IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
252
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
250
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
253
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) AS id, '.
251
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) AS id, '.
254
						'	COUNT(*) AS nbre '.
252
						'	COUNT(*) AS nbre '.
255
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
253
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
256
						'GROUP BY IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
254
						'GROUP BY IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
257
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
255
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
258
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) '.
256
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) '.
259
						'ORDER BY id ASC ';
257
						'ORDER BY id ASC ';
260
 
258
 
261
			// Récupération des résultats
259
			// Récupération des résultats
262
			try {
260
			try {
263
				$donnees = $this->requeteTous($requete_nombre_inscrits);
261
				$donnees = $this->requeteTous($requete_nombre_inscrits);
264
				if ($donnees === false) {
262
				if ($donnees === false) {
265
					$this->messages[] = "La requête n'a retourné aucun résultat.";
263
					$this->messages[] = "La requête n'a retourné aucun résultat.";
266
				} else {
264
				} else {
267
					foreach ($donnees as $donnee) {
265
					foreach ($donnees as $donnee) {
268
						$resultat_nombre_inscrits[$donnee['id']] = $donnee['nbre'];
266
						$resultat_nombre_inscrits[$donnee['id']] = $donnee['nbre'];
269
					}
267
					}
270
				}
268
				}
271
			} catch (Exception $e) {
269
			} catch (Exception $e) {
272
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
270
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
273
			}
271
			}
274
 
272
 
275
		if(!$resultat_informations_annuaire) {
273
		if(!$resultat_informations_annuaire) {
276
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
274
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
277
		}
275
		}
278
 
276
 
279
		return $resultat_nombre_inscrits;
277
		return $resultat_nombre_inscrits;
280
	}
278
	}
281
 
279
 
282
	/** Charge le nombre d'inscrits d'une table annuaire mappée en les groupant par pays
280
	/** Charge le nombre d'inscrits d'une table annuaire mappée en les groupant par pays
283
	 * @param int $identifiant l'identifiant de l'annuaire mappé
281
	 * @param int $identifiant l'identifiant de l'annuaire mappé
284
	 * @param array $id_recherchees un tableau contenant les codes de pays à rechercher
282
	 * @param array $id_recherchees un tableau contenant les codes de pays à rechercher
285
	 * @return array un tableau indexé par les numéros de departement contenant le nombre d'inscrits à chacun
283
	 * @return array un tableau indexé par les numéros de departement contenant le nombre d'inscrits à chacun
286
	 *
284
	 *
287
	 */
285
	 */
288
	public function chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $ids_recherchees) {
286
	public function chargerNombreAnnuaireListeInscritsParPays($id_annuaire, $ids_recherchees) {
289
 
287
 
290
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
288
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
291
					'FROM  annu_annuaire '.
289
					'FROM  annu_annuaire '.
292
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
290
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
293
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
291
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
294
 
292
 
295
		if(!$resultat_informations_annuaire) {
293
		if(!$resultat_informations_annuaire) {
296
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
294
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
297
		}
295
		}
298
 
296
 
299
		$tableau_mappage = $this->obtenirChampsCartographie($id_annuaire);
297
		$tableau_mappage = $this->obtenirChampsCartographie($id_annuaire);
300
		$champ_pays = $tableau_mappage['champ_pays'][0];
298
		$champ_pays = $tableau_mappage['champ_pays'][0];
301
 
299
 
302
		$ids_recherchees = array_map('strtoupper', $ids_recherchees);
300
		$ids_recherchees = array_map('strtoupper', $ids_recherchees);
303
 
301
 
304
		$resultat_nombre_inscrits = array();
302
		$resultat_nombre_inscrits = array();
305
 
303
 
306
		$requete_nombre_inscrits = 'SELECT '.$champ_pays.', COUNT(*) AS nbre '.
304
		$requete_nombre_inscrits = 'SELECT '.$champ_pays.', COUNT(*) AS nbre '.
307
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
305
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
308
						' WHERE '.$champ_pays.' IN '.
306
						' WHERE '.$champ_pays.' IN '.
309
						'('.implode(',',$ids_recherchees).') '.
307
						'('.implode(',',$ids_recherchees).') '.
310
						'GROUP BY '.$champ_pays.' '.
308
						'GROUP BY '.$champ_pays.' '.
311
						'ORDER BY '.$champ_pays.' ASC ';
309
						'ORDER BY '.$champ_pays.' ASC ';
312
 
310
 
313
		// Récupération des résultats
311
		// Récupération des résultats
314
		try {
312
		try {
315
			$donnees = $this->requeteTous($requete_nombre_inscrits);
313
			$donnees = $this->requeteTous($requete_nombre_inscrits);
316
			if ($donnees === false) {
314
			if ($donnees === false) {
317
				$this->messages[] = "La requête n'a retourné aucun résultat.";
315
				$this->messages[] = "La requête n'a retourné aucun résultat.";
318
			} else {
316
			} else {
319
				foreach ($donnees as $donnee) {
317
				foreach ($donnees as $donnee) {
320
					$resultat_nombre_inscrits[$donnee[$champ_pays]] = $donnee['nbre'];
318
					$resultat_nombre_inscrits[$donnee[$champ_pays]] = $donnee['nbre'];
321
				}
319
				}
322
			}
320
			}
323
		} catch (Exception $e) {
321
		} catch (Exception $e) {
324
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
322
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
325
		}
323
		}
326
 
324
 
327
		if(!$resultat_informations_annuaire) {
325
		if(!$resultat_informations_annuaire) {
328
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
326
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
329
		}
327
		}
330
 
328
 
331
		return $resultat_nombre_inscrits;
329
		return $resultat_nombre_inscrits;
332
	}
330
	}
333
 
331
 
334
	/**
332
	/**
335
	 * Recherche selon une valeur d'un champ qui peut être une valeur approximative (avec des %) dans un champ d'annuaire donné
333
	 * Recherche selon une valeur d'un champ qui peut être une valeur approximative (avec des %) dans un champ d'annuaire donné
336
	 * @param int $id_annuaire l'identifiant de l'annuaire
334
	 * @param int $id_annuaire l'identifiant de l'annuaire
337
	 * @param string $champ_critere le champ qui servira de filtre
335
	 * @param string $champ_critere le champ qui servira de filtre
338
	 * @param string $valeur la valeur à rechercher
336
	 * @param string $valeur la valeur à rechercher
339
	 * @param boolean $modele indique si l'on veut recherche la valeur exacte ou non
337
	 * @param boolean $modele indique si l'on veut recherche la valeur exacte ou non
340
	 * @return array un tableau contenant la liste des inscrits dans l'annuaire donné, correspondants à ce critère
338
	 * @return array un tableau contenant la liste des inscrits dans l'annuaire donné, correspondants à ce critère
341
	 */
339
	 */
342
	public function rechercherInscritDansAnnuaireMappeParChamp($id_annuaire, $champ_critere, $valeur, $modele = false, $numero_page = 1, $taille_page = 50) {
340
	public function rechercherInscritDansAnnuaireMappeParChamp($id_annuaire, $champ_critere, $valeur, $modele = false, $numero_page = 1, $taille_page = 50) {
343
 
341
 
344
		$sep = '';
342
		$sep = '';
345
 
343
 
346
		if($modele) {
344
		if($modele) {
347
			$sep = '%';
345
			$sep = '%';
348
		}
346
		}
349
 
347
 
350
		$valeurs = array($champ_critere => $valeur.$sep);
348
		$valeurs = array($champ_critere => $valeur.$sep);
351
 
349
 
352
		return $this->rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, array(), true, $numero_page, $taille_page);
350
		return $this->rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, array(), true, $numero_page, $taille_page);
353
	}
351
	}
354
 
352
 
355
	/**
353
	/**
356
	 * Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
354
	 * Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
357
	 * @param int $identifiant l'identifiant de l'annuaire mappé
355
	 * @param int $identifiant l'identifiant de l'annuaire mappé
358
	 * @param Array $champs_mappage les champs de mappage à retenir
356
	 * @param Array $champs_mappage les champs de mappage à retenir
359
	 * @param int $numero_page le numéro de la page demandée
357
	 * @param int $numero_page le numéro de la page demandée
360
	 * @param int $taille_page la taille de la page demandée
358
	 * @param int $taille_page la taille de la page demandée
361
	 *
359
	 *
362
	 */
360
	 */
363
   	public function chargerAnnuaireListeInscrits($id_annuaire, $numero_page = 1, $taille_page = 50) {
361
   	public function chargerAnnuaireListeInscrits($id_annuaire, $numero_page = 1, $taille_page = 50) {
364
 
362
 
365
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
363
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
366
					'FROM  annu_annuaire '.
364
					'FROM  annu_annuaire '.
367
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
365
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
368
 
366
 
369
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
367
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
370
				
368
				
371
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
369
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
372
		
370
		
373
		$requete_nb_inscrits = 'SELECT COUNT( * ) as nb '.' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
371
		$requete_nb_inscrits = 'SELECT COUNT( * ) as nb '.' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
374
 
372
 
375
		$resultat_nb_inscrits = $this->requeteUn($requete_nb_inscrits);
373
		$resultat_nb_inscrits = $this->requeteUn($requete_nb_inscrits);
376
 
374
 
377
		$nb_inscrits = 0;
375
		$nb_inscrits = 0;
378
		if($resultat_nb_inscrits) {
376
		if($resultat_nb_inscrits) {
379
			$nb_inscrits = $resultat_nb_inscrits['nb'];
377
			$nb_inscrits = $resultat_nb_inscrits['nb'];
380
		}
378
		}
381
 
379
 
382
		$requete_recherche_inscrits = 'SELECT '.$champs_mappage[0]['champ_id'].' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
380
		$requete_recherche_inscrits = 'SELECT '.$champs_mappage[0]['champ_id'].' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
383
		$requete_recherche_inscrits .= ' LIMIT '.(($numero_page-1)*$taille_page).','.($taille_page);
381
		$requete_recherche_inscrits .= ' LIMIT '.(($numero_page-1)*$taille_page).','.($taille_page);
384
 
382
 
385
		$resultat_recherche_inscrits = $this->requeteTous($requete_recherche_inscrits);
383
		$resultat_recherche_inscrits = $this->requeteTous($requete_recherche_inscrits);
386
 
384
 
387
		if(!$resultat_recherche_inscrits) {
385
		if(!$resultat_recherche_inscrits) {
388
			$resultat_recherche_inscrits = array();
386
			$resultat_recherche_inscrits = array();
389
		}
387
		}
390
 
388
 
391
		return array('total' => $nb_inscrits, 'resultat' => $resultat_recherche_inscrits) ;
389
		return array('total' => $nb_inscrits, 'resultat' => $resultat_recherche_inscrits) ;
392
	}
390
	}
393
 
391
 
394
	/**
392
	/**
395
	 * Insère une nouvelle ligne dans la table d'inscription temporaire, contenant
393
	 * Insère une nouvelle ligne dans la table d'inscription temporaire, contenant
396
	 * les données sérialisées d'un utilisateur
394
	 * les données sérialisées d'un utilisateur
397
	 * @param string $identifiant l'identifiant de cette tentative
395
	 * @param string $identifiant l'identifiant de cette tentative
398
	 * @param string $donnees les données d'inscription (une variable sérialisée))
396
	 * @param string $donnees les données d'inscription (une variable sérialisée))
399
	 * @return PdoStatement en cas de succès, false sinon
397
	 * @return PdoStatement en cas de succès, false sinon
400
	 */
398
	 */
401
	public function ajouterNouvelleInscriptionTemporaire($identifiant, $donnees) {
399
	public function ajouterNouvelleInscriptionTemporaire($identifiant, $donnees) {
402
 
400
 
403
		// on protège et on sérialise les données
401
		// on protège et on sérialise les données
404
		$identifiant = $this->proteger($identifiant);
402
		$identifiant = $this->proteger($identifiant);
405
		$donnees = base64_encode(serialize($donnees));
403
		$donnees = base64_encode(serialize($donnees));
406
		$donnees = $this->proteger($donnees);
404
		$donnees = $this->proteger($donnees);
407
 
405
 
408
		//echo $donnees ;
406
		//echo $donnees ;
409
 
407
 
410
		// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
408
		// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
411
		$requete = 	'INSERT INTO annu_donnees_temp '.
409
		$requete = 	'INSERT INTO annu_donnees_temp '.
412
					'VALUES '.
410
					'VALUES '.
413
					'('.$identifiant.','.$donnees.', NOW())';
411
					'('.$identifiant.','.$donnees.', NOW())';
414
 
412
 
415
		return $this->requete($requete);
413
		return $this->requete($requete);
416
	}
414
	}
417
 
415
 
418
	/**
416
	/**
419
	 * Récupère une ligne dans la table d'inscription temporaire, contenant
417
	 * Récupère une ligne dans la table d'inscription temporaire, contenant
420
	 * les données sérialisées d'un utilisateur
418
	 * les données sérialisées d'un utilisateur
421
	 * @param string $identifiant l'identifiant de la tentative
419
	 * @param string $identifiant l'identifiant de la tentative
422
	 * @return Array en cas de succès, false sinon
420
	 * @return Array en cas de succès, false sinon
423
	 */
421
	 */
424
	public function chargerDonneesInscriptionTemporaire($identifiant) {
422
	public function chargerDonneesInscriptionTemporaire($identifiant) {
425
 
423
 
426
		$identifiant = $this->proteger($identifiant);
424
		$identifiant = $this->proteger($identifiant);
427
 
425
 
428
		$requete = 	'SELECT * FROM annu_donnees_temp '.
426
		$requete = 	'SELECT * FROM annu_donnees_temp '.
429
					'WHERE '.
427
					'WHERE '.
430
					'adt_id = '.$identifiant;
428
					'adt_id = '.$identifiant;
431
 
429
 
432
		$donnees_inscription = $this->requeteUn($requete);
430
		$donnees_inscription = $this->requeteUn($requete);
433
 
431
 
434
		if($donnees_inscription) {
432
		if($donnees_inscription) {
435
			return unserialize(base64_decode($donnees_inscription['ait_donnees']));
433
			return unserialize(base64_decode($donnees_inscription['ait_donnees']));
436
		}
434
		}
437
 
435
 
438
		return false;
436
		return false;
439
	}
437
	}
440
 
438
 
441
	/**
439
	/**
442
	 * Supprime une ligne dans la table d'inscription temporaire, contenant
440
	 * Supprime une ligne dans la table d'inscription temporaire, contenant
443
	 * les données sérialisées d'un utilisateur
441
	 * les données sérialisées d'un utilisateur
444
	 * @param string $identifiant l'identifiant de la tentative
442
	 * @param string $identifiant l'identifiant de la tentative
445
	 * @return PDOStatement en cas de succès, false sinon
443
	 * @return PDOStatement en cas de succès, false sinon
446
	 */
444
	 */
447
	public function supprimerDonneesInscriptionTemporaire($identifiant) {
445
	public function supprimerDonneesInscriptionTemporaire($identifiant) {
448
 
446
 
449
		$identifiant = $this->proteger($identifiant);
447
		$identifiant = $this->proteger($identifiant);
450
 
448
 
451
		$requete = 	'DELETE FROM annu_donnees_temp '.
449
		$requete = 	'DELETE FROM annu_donnees_temp '.
452
					'WHERE '.
450
					'WHERE '.
453
					'adt_id = '.$identifiant;
451
					'adt_id = '.$identifiant;
454
 
452
 
455
		return $this->requete($requete);
453
		return $this->requete($requete);
456
 
454
 
457
		//return true;
455
		//return true;
458
	}
456
	}
459
 
457
 
460
	/**
458
	/**
461
	 * Ajoute les valeurs données dans l'annuaire indiqué
459
	 * Ajoute les valeurs données dans l'annuaire indiqué
462
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
460
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
463
	 * @param Array $valeurs_mappees un tableau de valeurs à ajouter
461
	 * @param Array $valeurs_mappees un tableau de valeurs à ajouter
464
	 * @param string $nom_champs les noms des champs dans lesquels on va ajouter les données
462
	 * @param string $nom_champs les noms des champs dans lesquels on va ajouter les données
465
	 * @return int l'identifiant du nouvel enregistrement
463
	 * @return int l'identifiant du nouvel enregistrement
466
	 */
464
	 */
467
	public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
465
	public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
468
 
466
 
469
		$requete_infos_annuaire = 'SELECT * '.
467
		$requete_infos_annuaire = 'SELECT * '.
470
					'FROM  annu_annuaire '.
468
					'FROM  annu_annuaire '.
471
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
469
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
472
 
470
 
473
		$resultat = $this->requeteUn($requete_infos_annuaire);
471
		$resultat = $this->requeteUn($requete_infos_annuaire);
474
		$annuaire = array();
472
		$annuaire = array();
475
 
473
 
476
		//en cas d'erreur on renvoie false
474
		//en cas d'erreur on renvoie false
477
		//TODO: lever une exception
475
		//TODO: lever une exception
478
		if(!$resultat) {
476
		if(!$resultat) {
479
			return false;
477
			return false;
480
		}
478
		}
481
 
479
 
482
		$annuaire = $resultat;
480
		$annuaire = $resultat;
483
 
481
 
484
		$champs_date = $this->obtenirChampDateEtValidite($id_annuaire);
482
		$champs_date = $this->obtenirChampDateEtValidite($id_annuaire);
485
 
483
 
486
		// si l'on fonctionne sur un modele de type champ inscription valide = 1
484
		// si l'on fonctionne sur un modele de type champ inscription valide = 1
487
		// puis valide = 0 lors de la desinscrption sans suppression
485
		// puis valide = 0 lors de la desinscrption sans suppression
488
		// on l'indique
486
		// on l'indique
489
		if(isset($champs_date['champ_validite_inscription'])) {
487
		if(isset($champs_date['champ_validite_inscription'])) {
490
			$valeurs_mappees[$champs_date['champ_validite_inscription']] = '1';
488
			$valeurs_mappees[$champs_date['champ_validite_inscription']] = '1';
491
		}
489
		}
492
 
490
 
493
		$valeurs_prot = array_map(array($this,'proteger'),$valeurs_mappees);
491
		$valeurs_prot = array_map(array($this,'proteger'),$valeurs_mappees);
494
 
492
 
495
		// si on a défini un champ date d'inscription, on l'ajoute à la liste des champs insérer
493
		// si on a défini un champ date d'inscription, on l'ajoute à la liste des champs insérer
496
		// avec la valeur NOW
494
		// avec la valeur NOW
497
		if(isset($champs_date['champ_date_inscription'])) {
495
		if(isset($champs_date['champ_date_inscription'])) {
498
			$valeurs_mappees[$champs_date['champ_date_inscription']] = 'NOW()';
496
			$valeurs_mappees[$champs_date['champ_date_inscription']] = 'NOW()';
499
			$valeurs_prot[$champs_date['champ_date_inscription']] = 'NOW()';
497
			$valeurs_prot[$champs_date['champ_date_inscription']] = 'NOW()';
500
		}
498
		}
501
 
499
 
502
		$valeurs = implode(',',$valeurs_prot);
500
		$valeurs = implode(',',$valeurs_prot);
503
		$champs = implode(',',array_keys($valeurs_mappees));
501
		$champs = implode(',',array_keys($valeurs_mappees));
504
 
502
 
505
		$requete_insertion_annuaire = 'INSERT INTO '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
503
		$requete_insertion_annuaire = 'INSERT INTO '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
506
			'('.$champs.') '.
504
			'('.$champs.') '.
507
			'VALUES ('.$valeurs.')';
505
			'VALUES ('.$valeurs.')';
508
 
506
 
509
		$id_nouvel_enregistrement = false;
507
		$id_nouvel_enregistrement = false;
510
 
508
 
511
		//Debug::printr($requete_insertion_annuaire);
509
		//Debug::printr($requete_insertion_annuaire);
512
 
510
 
513
		//en cas d'erreur on renvoie false
511
		//en cas d'erreur on renvoie false
514
		//TODO: lever une exception
512
		//TODO: lever une exception
515
		if(!$this->requete($requete_insertion_annuaire)) {
513
		if(!$this->requete($requete_insertion_annuaire)) {
516
			return $id_nouvel_enregistrement;
514
			return $id_nouvel_enregistrement;
517
		}
515
		}
518
 
516
 
519
		// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
517
		// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
520
		// (Les requetes du style SELECT MAX(id)... ne garantissent pas qu'on récupère le bon id
518
		// (Les requetes du style SELECT MAX(id)... ne garantissent pas qu'on récupère le bon id
521
		// si une autre insertion a eu lieu entre temps)
519
		// si une autre insertion a eu lieu entre temps)
522
		// TODO utiliser du PDO pur et utiliser les fonctions last_insert_id générique
520
		// TODO utiliser du PDO pur et utiliser les fonctions last_insert_id générique
523
		$requete_nouvel_id = 	'SELECT '.$nom_champs['champ_id'].' '.
521
		$requete_nouvel_id = 	'SELECT '.$nom_champs['champ_id'].' '.
524
								'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
522
								'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
525
								'WHERE '.
523
								'WHERE '.
526
								$nom_champs['champ_mail'].' = '.$this->proteger($valeurs_mappees[$nom_champs['champ_mail']]);
524
								$nom_champs['champ_mail'].' = '.$this->proteger($valeurs_mappees[$nom_champs['champ_mail']]);
527
 
525
 
528
		$resultat_nouvel_id = $this->requeteUn($requete_nouvel_id);
526
		$resultat_nouvel_id = $this->requeteUn($requete_nouvel_id);
529
 
527
 
530
		// en cas d'erreur on renvoie false
528
		// en cas d'erreur on renvoie false
531
		// TODO: lever une exception
529
		// TODO: lever une exception
532
		if(!$resultat_nouvel_id) {
530
		if(!$resultat_nouvel_id) {
533
			return $id_nouvel_enregistrement;
531
			return $id_nouvel_enregistrement;
534
		}
532
		}
535
 
533
 
536
		$id_nouvel_enregistrement = $resultat_nouvel_id[$nom_champs['champ_id']];
534
		$id_nouvel_enregistrement = $resultat_nouvel_id[$nom_champs['champ_id']];
537
 
535
 
538
		return $id_nouvel_enregistrement;
536
		return $id_nouvel_enregistrement;
539
	}
537
	}
540
 
538
 
541
	/**
539
	/**
542
	 * Modifie les valeurs données dans l'annuaire indiqué
540
	 * Modifie les valeurs données dans l'annuaire indiqué
543
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
541
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
544
	 * @param int $id_annuaire	l'identifiant de l'utilisateur à qui à modifier
542
	 * @param int $id_annuaire	l'identifiant de l'utilisateur à qui à modifier
545
	 * @param Array $valeurs_mappees un tableau de valeurs à modifier
543
	 * @param Array $valeurs_mappees un tableau de valeurs à modifier
546
	 * @param string $nom_champs les noms des champs dans lesquels on va modifier les données
544
	 * @param string $nom_champs les noms des champs dans lesquels on va modifier les données
547
	 * @return boolean true ou false suivant le succès de l'operation
545
	 * @return boolean true ou false suivant le succès de l'operation
548
	 */
546
	 */
549
	public function modifierInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur, $valeurs_mappees, $champs_mappage) {
547
	public function modifierInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur, $valeurs_mappees, $champs_mappage) {
550
 
548
 
551
		$requete_infos_annuaire = 'SELECT * '.
549
		$requete_infos_annuaire = 'SELECT * '.
552
					'FROM  annu_annuaire '.
550
					'FROM  annu_annuaire '.
553
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
551
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
554
 
552
 
555
		$resultat = $this->requeteUn($requete_infos_annuaire);
553
		$resultat = $this->requeteUn($requete_infos_annuaire);
556
		$annuaire = array();
554
		$annuaire = array();
557
 
555
 
558
		unset($valeurs_mappees[$champs_mappage['champ_id']]);
556
		unset($valeurs_mappees[$champs_mappage['champ_id']]);
559
 
557
 
560
		//en cas d'erreur on renvoie false
558
		//en cas d'erreur on renvoie false
561
		//TODO: lever une exception
559
		//TODO: lever une exception
562
		if(!$resultat) {
560
		if(!$resultat) {
563
			return false;
561
			return false;
564
		}
562
		}
565
 
563
 
566
		$annuaire = $resultat;
564
		$annuaire = $resultat;
567
 
565
 
568
		$requete_modification_annuaire = 'UPDATE '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
566
		$requete_modification_annuaire = 'UPDATE '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
569
		'SET ';
567
		'SET ';
570
		foreach($valeurs_mappees as $cle => $valeur) {
568
		foreach($valeurs_mappees as $cle => $valeur) {
571
			$requete_modification_annuaire .= $cle.' = '.$this->proteger($valeur).', ';
569
			$requete_modification_annuaire .= $cle.' = '.$this->proteger($valeur).', ';
572
		}
570
		}
573
 
571
 
574
		$requete_modification_annuaire = rtrim($requete_modification_annuaire,', ').' ' ;
572
		$requete_modification_annuaire = rtrim($requete_modification_annuaire,', ').' ' ;
575
 
573
 
576
		$requete_modification_annuaire .= 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur ;
574
		$requete_modification_annuaire .= 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur ;
577
 
575
 
578
		//en cas d'erreur on renvoie false
576
		//en cas d'erreur on renvoie false
579
		//TODO: lever une exception
577
		//TODO: lever une exception
580
		if(!$this->requete($requete_modification_annuaire)) {
578
		if(!$this->requete($requete_modification_annuaire)) {
581
			return false;
579
			return false;
582
		} else {
580
		} else {
583
			return true;
581
			return true;
584
		}
582
		}
585
 
583
 
586
	}
584
	}
587
 
585
 
588
	public function obtenirValeurChampAnnuaireMappe($id_annuaire, $id_utilisateur, $champ) {
586
	public function obtenirValeurChampAnnuaireMappe($id_annuaire, $id_utilisateur, $champ) {
589
 
587
 
590
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
588
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
591
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
589
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
592
		$champs_mappage = $champs_mappage[0];
590
		$champs_mappage = $champs_mappage[0];
593
 
591
 
594
		$requete_infos_annuaire = 'SELECT * '.
592
		$requete_infos_annuaire = 'SELECT * '.
595
					'FROM annu_annuaire '.
593
					'FROM annu_annuaire '.
596
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
594
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
597
 
595
 
598
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
596
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
599
 
597
 
600
		// en cas d'erreur on renvoie false
598
		// en cas d'erreur on renvoie false
601
		// TODO: lever une exception
599
		// TODO: lever une exception
602
		if(!$resultat_infos_annuaire) {
600
		if(!$resultat_infos_annuaire) {
603
			return false;
601
			return false;
604
		}
602
		}
605
 
603
 
606
		$champs_mappage_str = implode(',',$champs_mappage);
604
		$champs_mappage_str = implode(',',$champs_mappage);
607
		$id_utilisateur = $this->proteger($id_utilisateur);
605
		$id_utilisateur = $this->proteger($id_utilisateur);
608
 
606
 
609
		$requete_selection_valeur = 'SELECT '.$champs_mappage[$champ].' as '.$champ.' '.
607
		$requete_selection_valeur = 'SELECT '.$champs_mappage[$champ].' as '.$champ.' '.
610
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
608
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
611
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
609
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
612
 
610
 
613
		$resultat_selection_valeur = $this->requeteUn($requete_selection_valeur);
611
		$resultat_selection_valeur = $this->requeteUn($requete_selection_valeur);
614
 
612
 
615
		// en cas d'erreur on renvoie false
613
		// en cas d'erreur on renvoie false
616
		// TODO: lever une exception
614
		// TODO: lever une exception
617
		if(!$resultat_selection_valeur) {
615
		if(!$resultat_selection_valeur) {
618
			return false;
616
			return false;
619
		} else {
617
		} else {
620
			return $resultat_selection_valeur[$champ];
618
			return $resultat_selection_valeur[$champ];
621
		}
619
		}
622
	}
620
	}
623
 
621
 
624
	public function modifierValeurChampAnnuaireMappe($id_annuaire, $id_utilisateur, $champ, $valeur) {
622
	public function modifierValeurChampAnnuaireMappe($id_annuaire, $id_utilisateur, $champ, $valeur) {
625
 
623
 
626
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
624
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
627
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
625
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
628
		$champs_mappage = $champs_mappage[0];
626
		$champs_mappage = $champs_mappage[0];
629
 
627
 
630
		$requete_infos_annuaire = 'SELECT * '.
628
		$requete_infos_annuaire = 'SELECT * '.
631
					'FROM annu_annuaire '.
629
					'FROM annu_annuaire '.
632
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
630
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
633
 
631
 
634
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
632
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
635
 
633
 
636
		// en cas d'erreur on renvoie false
634
		// en cas d'erreur on renvoie false
637
		// TODO: lever une exception
635
		// TODO: lever une exception
638
		if(!$resultat_infos_annuaire) {
636
		if(!$resultat_infos_annuaire) {
639
			return false;
637
			return false;
640
		}
638
		}
641
 
639
 
642
		$champs_mappage_str = implode(',',$champs_mappage);
640
		$champs_mappage_str = implode(',',$champs_mappage);
643
		$id_utilisateur = $this->proteger($id_utilisateur);
641
		$id_utilisateur = $this->proteger($id_utilisateur);
644
		$valeur = $this->proteger($valeur);
642
		$valeur = $this->proteger($valeur);
645
 
643
 
646
		$requete_modification_valeur = 'UPDATE '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
644
		$requete_modification_valeur = 'UPDATE '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
647
										 'SET '.$champ.' = '.$valeur.' '.
645
										 'SET '.$champ.' = '.$valeur.' '.
648
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
646
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
649
 
647
 
650
 
648
 
651
		$resultat_modification_valeur = $this->requeteUn($requete_modification_valeur);
649
		$resultat_modification_valeur = $this->requeteUn($requete_modification_valeur);
652
 
650
 
653
		// en cas d'erreur on renvoie false
651
		// en cas d'erreur on renvoie false
654
		// TODO: lever une exception
652
		// TODO: lever une exception
655
		return $resultat_modification_valeur;
653
		return $resultat_modification_valeur;
656
	}
654
	}
657
 
655
 
658
	/**
656
	/**
659
	 * Renvoie le mail associé à l'identifiant d'un utilisateur dans un annuaire donné
657
	 * Renvoie le mail associé à l'identifiant d'un utilisateur dans un annuaire donné
660
	 * @param int $id_annuair l'identifiant de l'annuaire
658
	 * @param int $id_annuair l'identifiant de l'annuaire
661
	 * @param int $id_utilisateur l'identifiant de l'utilisateur
659
	 * @param int $id_utilisateur l'identifiant de l'utilisateur
662
	 * @return string le mail associé à cet identifiant ou false si l'utilisateur n'existe pas
660
	 * @return string le mail associé à cet identifiant ou false si l'utilisateur n'existe pas
663
	 */
661
	 */
664
	public function obtenirMailParId($id_annuaire, $id_utilisateur) {
662
	public function obtenirMailParId($id_annuaire, $id_utilisateur) {
665
 
663
 
666
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
664
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
667
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
665
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
668
		$champs_mappage = $champs_mappage[0];
666
		$champs_mappage = $champs_mappage[0];
669
 
667
 
670
		$requete_infos_annuaire = 'SELECT * '.
668
		$requete_infos_annuaire = 'SELECT * '.
671
					'FROM annu_annuaire '.
669
					'FROM annu_annuaire '.
672
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
670
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
673
 
671
 
674
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
672
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
675
 
673
 
676
		// en cas d'erreur on renvoie false
674
		// en cas d'erreur on renvoie false
677
		// TODO: lever une exception
675
		// TODO: lever une exception
678
		if(!$resultat_infos_annuaire) {
676
		if(!$resultat_infos_annuaire) {
679
			return false;
677
			return false;
680
		}
678
		}
681
 
679
 
682
		$champs_mappage_str = implode(',',$champs_mappage);
680
		$champs_mappage_str = implode(',',$champs_mappage);
683
		$id_utilisateur = $this->proteger($id_utilisateur);
681
		$id_utilisateur = $this->proteger($id_utilisateur);
684
 
682
 
685
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_mail'].' '.
683
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_mail'].' '.
686
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
684
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
687
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
685
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
688
 
686
 
689
 
687
 
690
 
688
 
691
		//echo $requete_selection_utilisateur;
689
		//echo $requete_selection_utilisateur;
692
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
690
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
693
 
691
 
694
		// en cas d'erreur on renvoie false
692
		// en cas d'erreur on renvoie false
695
		// TODO: lever une exception
693
		// TODO: lever une exception
696
		if(!$resultat_selection_utilisateur) {
694
		if(!$resultat_selection_utilisateur) {
697
			return false;
695
			return false;
698
		} else {
696
		} else {
699
			return $resultat_selection_utilisateur[$champs_mappage['champ_mail']];
697
			return $resultat_selection_utilisateur[$champs_mappage['champ_mail']];
700
		}
698
		}
701
 
699
 
702
	}
700
	}
703
 
701
 
704
	/**
702
	/**
705
	 * Renvoie les mail associés des identifiants d'utilisateur dans un annuaire donné
703
	 * Renvoie les mail associés des identifiants d'utilisateur dans un annuaire donné
706
	 * @param int $id_annuair l'identifiant de l'annuaire
704
	 * @param int $id_annuair l'identifiant de l'annuaire
707
	 * @param array $ids_utilisateurs les identifiants des l'utilisateur
705
	 * @param array $ids_utilisateurs les identifiants des l'utilisateur
708
	 * @return array un tableau contenant les mails associés à ces identifiant ou false si les utilisateurs n'existent pas
706
	 * @return array un tableau contenant les mails associés à ces identifiant ou false si les utilisateurs n'existent pas
709
	 */
707
	 */
710
	public function obtenirMailParTableauId($id_annuaire, $tableau_ids_utilisateurs) {
708
	public function obtenirMailParTableauId($id_annuaire, $tableau_ids_utilisateurs) {
711
 
709
 
712
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
710
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
713
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
711
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
714
		$champs_mappage = $champs_mappage[0];
712
		$champs_mappage = $champs_mappage[0];
715
 
713
 
716
		$requete_infos_annuaire = 'SELECT * '.
714
		$requete_infos_annuaire = 'SELECT * '.
717
					'FROM annu_annuaire '.
715
					'FROM annu_annuaire '.
718
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
716
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
719
 
717
 
720
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
718
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
721
 
719
 
722
		// en cas d'erreur on renvoie false
720
		// en cas d'erreur on renvoie false
723
		// TODO: lever une exception
721
		// TODO: lever une exception
724
		if(!$resultat_infos_annuaire) {
722
		if(!$resultat_infos_annuaire) {
725
			return false;
723
			return false;
726
		}
724
		}
727
 
725
 
728
		$champs_mappage_str = implode(',',$champs_mappage);
726
		$champs_mappage_str = implode(',',$champs_mappage);
729
 
727
 
730
		$tableau_ids_utilisateurs_p = array_map(array($this, 'proteger'), $tableau_ids_utilisateurs);
728
		$tableau_ids_utilisateurs_p = array_map(array($this, 'proteger'), $tableau_ids_utilisateurs);
731
		$str_ids_utilisateurs = implode(',',$tableau_ids_utilisateurs_p);
729
		$str_ids_utilisateurs = implode(',',$tableau_ids_utilisateurs_p);
732
 
730
 
733
		$requete_selection_utilisateurs = 'SELECT '.$champs_mappage['champ_mail'].' '.
731
		$requete_selection_utilisateurs = 'SELECT '.$champs_mappage['champ_mail'].' '.
734
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
732
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
735
										 'WHERE '.$champs_mappage['champ_id'].' IN ('.$str_ids_utilisateurs.')';
733
										 'WHERE '.$champs_mappage['champ_id'].' IN ('.$str_ids_utilisateurs.')';
736
 
734
 
737
		$resultat_selection_utilisateurs = $this->requeteTous($requete_selection_utilisateurs);
735
		$resultat_selection_utilisateurs = $this->requeteTous($requete_selection_utilisateurs);
738
 
736
 
739
		$resultat_utilisateurs = array();
737
		$resultat_utilisateurs = array();
740
 
738
 
741
		foreach($resultat_selection_utilisateurs as $utilisateur) {
739
		foreach($resultat_selection_utilisateurs as $utilisateur) {
742
			 $resultat_utilisateurs[] = $utilisateur[$champs_mappage['champ_mail']];
740
			 $resultat_utilisateurs[] = $utilisateur[$champs_mappage['champ_mail']];
743
		}
741
		}
744
 
742
 
745
		// en cas d'erreur on renvoie false
743
		// en cas d'erreur on renvoie false
746
		// TODO: lever une exception
744
		// TODO: lever une exception
747
		if(!$resultat_selection_utilisateurs) {
745
		if(!$resultat_selection_utilisateurs) {
748
			return false;
746
			return false;
749
		} else {
747
		} else {
750
			return $resultat_utilisateurs;
748
			return $resultat_utilisateurs;
751
		}
749
		}
752
 
750
 
753
	}
751
	}
754
 
752
 
755
	/**
753
	/**
756
	 * Renvoie l'id associé au mail d'un utilisateur dans un annuaire donné
754
	 * Renvoie l'id associé au mail d'un utilisateur dans un annuaire donné
757
	 * @param int $id_annuair l'identifiant de l'annuaire
755
	 * @param int $id_annuair l'identifiant de l'annuaire
758
	 * @param int $mail_utilisateur le mail de l'utilisateur
756
	 * @param int $mail_utilisateur le mail de l'utilisateur
759
	 * @return string l'id associé à ce mail ou false si l'utilisateur n'existe pas
757
	 * @return string l'id associé à ce mail ou false si l'utilisateur n'existe pas
760
	 */
758
	 */
761
	public function obtenirIdParMail($id_annuaire, $mail_utilisateur) {
759
	public function obtenirIdParMail($id_annuaire, $mail_utilisateur) {
762
 
760
 
763
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
761
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
764
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
762
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
765
		$champs_mappage = $champs_mappage[0];
763
		$champs_mappage = $champs_mappage[0];
766
 
764
 
767
		$requete_infos_annuaire = 'SELECT * '.
765
		$requete_infos_annuaire = 'SELECT * '.
768
					'FROM annu_annuaire '.
766
					'FROM annu_annuaire '.
769
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
767
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
770
 
768
 
771
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
769
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
772
 
770
 
773
		// en cas d'erreur on renvoie false
771
		// en cas d'erreur on renvoie false
774
		// TODO: lever une exception
772
		// TODO: lever une exception
775
		if(!$resultat_infos_annuaire) {
773
		if(!$resultat_infos_annuaire) {
776
			return false;
774
			return false;
777
		}
775
		}
778
 
776
 
779
		$champs_mappage_str = implode(',',$champs_mappage);
777
		$champs_mappage_str = implode(',',$champs_mappage);
780
 
778
 
781
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
779
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
782
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
780
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
783
										 'WHERE '.$champs_mappage['champ_mail'].' = '.$this->proteger($mail_utilisateur);
781
										 'WHERE '.$champs_mappage['champ_mail'].' = '.$this->proteger($mail_utilisateur);
784
 
782
 
785
 
783
 
786
		//echo $requete_selection_utilisateur;
784
		//echo $requete_selection_utilisateur;
787
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
785
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
788
 
786
 
789
		// en cas d'erreur on renvoie false
787
		// en cas d'erreur on renvoie false
790
		// TODO: lever une exception
788
		// TODO: lever une exception
791
		if(!$resultat_selection_utilisateur) {
789
		if(!$resultat_selection_utilisateur) {
792
			return false;
790
			return false;
793
		} else {
791
		} else {
794
			return $resultat_selection_utilisateur[$champs_mappage['champ_id']];
792
			return $resultat_selection_utilisateur[$champs_mappage['champ_id']];
795
		}
793
		}
796
 
794
 
797
	}
795
	}
798
 
796
 
799
	// TODO: commenter
797
	// TODO: commenter
800
	public function comparerIdentifiantMotDePasse($id_annuaire, $id_utilisateur, $mot_de_passe) {
798
	public function comparerIdentifiantMotDePasse($id_annuaire, $id_utilisateur, $mot_de_passe) {
801
 
799
 
802
		$requete_infos_annuaire = 'SELECT * '.
800
		$requete_infos_annuaire = 'SELECT * '.
803
					'FROM annu_annuaire '.
801
					'FROM annu_annuaire '.
804
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
802
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
805
 
803
 
806
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
804
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
807
 
805
 
808
		// en cas d'erreur on renvoie false
806
		// en cas d'erreur on renvoie false
809
		// TODO: lever une exception
807
		// TODO: lever une exception
810
		if(!$resultat_infos_annuaire) {
808
		if(!$resultat_infos_annuaire) {
811
			return false;
809
			return false;
812
		}
810
		}
813
 
811
 
814
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
812
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
815
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
813
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
816
		$champs_mappage = $champs_mappage[0];
814
		$champs_mappage = $champs_mappage[0];
817
 
815
 
818
		$mot_de_passe = $this->proteger($mot_de_passe);
816
		$mot_de_passe = $this->proteger($mot_de_passe);
819
		$id_utilisateur = $this->proteger($id_utilisateur);
817
		$id_utilisateur = $this->proteger($id_utilisateur);
820
 
818
 
821
		$requete_selection_utilisateur = 'SELECT COUNT(*) as match_login_mdp '.
819
		$requete_selection_utilisateur = 'SELECT COUNT(*) as match_login_mdp '.
822
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
820
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
823
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur.' '.
821
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur.' '.
824
										 'AND '.$champs_mappage['champ_pass'].' = '.$mot_de_passe;
822
										 'AND '.$champs_mappage['champ_pass'].' = '.$mot_de_passe;
825
 
823
 
826
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
824
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
827
 
825
 
828
		// en cas d'erreur ou bien si le login ne matche pas le mot de passe
826
		// en cas d'erreur ou bien si le login ne matche pas le mot de passe
829
		// on renvoie false
827
		// on renvoie false
830
		if(!$resultat_selection_utilisateur || $resultat_selection_utilisateur['match_login_mdp'] <= 0) {
828
		if(!$resultat_selection_utilisateur || $resultat_selection_utilisateur['match_login_mdp'] <= 0) {
831
			return false;
829
			return false;
832
		} else {
830
		} else {
833
			return true;
831
			return true;
834
		}
832
		}
835
	}
833
	}
836
 
834
 
837
	/**
835
	/**
838
	 * Récupère les champs demandé dans l'annuaire indiqué
836
	 * Récupère les champs demandé dans l'annuaire indiqué
839
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
837
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
840
	 * @param int $id_utilisateur l'identifiant de l'utilisateur dont on veut les informations
838
	 * @param int $id_utilisateur l'identifiant de l'utilisateur dont on veut les informations
841
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
839
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
842
	 * @return Array les informations demandées
840
	 * @return Array les informations demandées
843
	 */
841
	 */
844
	public function obtenirValeursUtilisateur($id_annuaire, $id_utilisateur, $champs_mappage) {
842
	public function obtenirValeursUtilisateur($id_annuaire, $id_utilisateur, $champs_mappage) {
845
 
843
 
846
		$requete_infos_annuaire = 'SELECT * '.
844
		$requete_infos_annuaire = 'SELECT * '.
847
					'FROM annu_annuaire '.
845
					'FROM annu_annuaire '.
848
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
846
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
849
 
847
 
850
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
848
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
851
 
849
 
852
		// en cas d'erreur on renvoie false
850
		// en cas d'erreur on renvoie false
853
		// TODO: lever une exception
851
		// TODO: lever une exception
854
		if(!$resultat_infos_annuaire) {
852
		if(!$resultat_infos_annuaire) {
855
			return false;
853
			return false;
856
		}
854
		}
857
 
855
 
858
		$champs_mappage_str = implode(',',$champs_mappage);
856
		$champs_mappage_str = implode(',',$champs_mappage);
859
		$id_utilisateur = $this->proteger($id_utilisateur);
857
		$id_utilisateur = $this->proteger($id_utilisateur);
860
 
858
 
861
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage_str.' '.
859
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage_str.' '.
862
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
860
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
863
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
861
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
864
 
862
 
865
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
863
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
866
 
864
 
867
		// en cas d'erreur on renvoie false
865
		// en cas d'erreur on renvoie false
868
		// TODO: lever une exception
866
		// TODO: lever une exception
869
		if(!$resultat_selection_utilisateur) {
867
		if(!$resultat_selection_utilisateur) {
870
			return false;
868
			return false;
871
		} else {
869
		} else {
872
			return $resultat_selection_utilisateur;
870
			return $resultat_selection_utilisateur;
873
		}
871
		}
874
	}
872
	}
875
 
873
 
876
	/**
874
	/**
877
	 * Récupère les valeurs utilisateur dans l'annuaire indiqué en les ordonnant par le champ demandé
875
	 * Récupère les valeurs utilisateur dans l'annuaire indiqué en les ordonnant par le champ demandé
878
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
876
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
879
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
877
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
880
	 * @param string order_by le champ par lequel on ordonne les résultats
878
	 * @param string order_by le champ par lequel on ordonne les résultats
881
	 * @param limit la limite au nombre de résultats
879
	 * @param limit la limite au nombre de résultats
882
	 * @return Array les informations demandées
880
	 * @return Array les informations demandées
883
	 */
881
	 */
884
	public function obtenirTableauValeursUtilisateurs($id_annuaire, $champs_mappage, $order_by = 'champ_id', $dir= 'DESC', $limit = '20') {
882
	public function obtenirTableauValeursUtilisateurs($id_annuaire, $champs_mappage, $order_by = 'champ_id', $dir= 'DESC', $limit = '20') {
885
 
883
 
886
		$requete_infos_annuaire = 'SELECT * '.
884
		$requete_infos_annuaire = 'SELECT * '.
887
					'FROM annu_annuaire '.
885
					'FROM annu_annuaire '.
888
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
886
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
889
 
887
 
890
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
888
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
891
 
889
 
892
		// en cas d'erreur on renvoie false
890
		// en cas d'erreur on renvoie false
893
		// TODO: lever une exception
891
		// TODO: lever une exception
894
		if(!$resultat_infos_annuaire) {
892
		if(!$resultat_infos_annuaire) {
895
			return false;
893
			return false;
896
		}
894
		}
897
 
895
 
898
		$champ_order_by = $champs_mappage[$order_by];
896
		$champ_order_by = $champs_mappage[$order_by];
899
 
897
 
900
		$champs_mappage_str = implode(',',$champs_mappage);
898
		$champs_mappage_str = implode(',',$champs_mappage);
901
		$id_utilisateur = $this->proteger($id_utilisateur);
899
		$id_utilisateur = $this->proteger($id_utilisateur);
902
 
900
 
903
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage_str.' '.
901
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage_str.' '.
904
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
902
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
905
										 'ORDER BY '.$champ_order_by.' '.$dir.' LIMIT '.$limit;
903
										 'ORDER BY '.$champ_order_by.' '.$dir.' LIMIT '.$limit;
906
 
904
 
907
		$resultat_selection_utilisateur = $this->requeteTous($requete_selection_utilisateur);
905
		$resultat_selection_utilisateur = $this->requeteTous($requete_selection_utilisateur);
908
 
906
 
909
		// en cas d'erreur on renvoie false
907
		// en cas d'erreur on renvoie false
910
		// TODO: lever une exception
908
		// TODO: lever une exception
911
		if(!$resultat_selection_utilisateur) {
909
		if(!$resultat_selection_utilisateur) {
912
			return false;
910
			return false;
913
		} else {
911
		} else {
914
			return $resultat_selection_utilisateur;
912
			return $resultat_selection_utilisateur;
915
		}
913
		}
916
	}
914
	}
917
	
915
	
918
/**
916
/**
919
	 * Récupère les valeurs utilisateur dans l'annuaire indiqué en les ordonnant par le champ demandé
917
	 * Récupère les valeurs utilisateur dans l'annuaire indiqué en les ordonnant par le champ demandé
920
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
918
	 * @param int $id_annuaire	l'identifiant de l'annuaire dans lequel on va travailler
921
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
919
	 * @param Array $champs_mappage les noms des champs que l'on veut récupérer
922
	 * @param string order_by le champ par lequel on ordonne les résultats
920
	 * @param string order_by le champ par lequel on ordonne les résultats
923
	 * @param limit la limite au nombre de résultats
921
	 * @param limit la limite au nombre de résultats
924
	 * @return Array les informations demandées
922
	 * @return Array les informations demandées
925
	 */
923
	 */
926
	public function obtenirTableauIdsUtilisateurs($id_annuaire, $champs_mappage, $order_by = 'champ_id', $dir= 'DESC', $limit = '20') {
924
	public function obtenirTableauIdsUtilisateurs($id_annuaire, $champs_mappage, $order_by = 'champ_id', $dir= 'DESC', $limit = '20') {
927
 
925
 
928
		$requete_infos_annuaire = 'SELECT * '.
926
		$requete_infos_annuaire = 'SELECT * '.
929
					'FROM annu_annuaire '.
927
					'FROM annu_annuaire '.
930
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
928
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
931
 
929
 
932
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
930
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
933
 
931
 
934
		// en cas d'erreur on renvoie false
932
		// en cas d'erreur on renvoie false
935
		// TODO: lever une exception
933
		// TODO: lever une exception
936
		if(!$resultat_infos_annuaire) {
934
		if(!$resultat_infos_annuaire) {
937
			return false;
935
			return false;
938
		}
936
		}
939
 
937
 
940
		$champ_order_by = $champs_mappage[$order_by];
938
		$champ_order_by = $champs_mappage[$order_by];
941
 
939
 
942
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
940
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
943
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
941
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
944
										 'ORDER BY '.$champ_order_by.' '.$dir.' LIMIT '.$limit;
942
										 'ORDER BY '.$champ_order_by.' '.$dir.' LIMIT '.$limit;
945
		
943
		
946
		$resultat_selection_utilisateur = $this->requeteTous($requete_selection_utilisateur);
944
		$resultat_selection_utilisateur = $this->requeteTous($requete_selection_utilisateur);
947
 
945
 
948
		// en cas d'erreur on renvoie false
946
		// en cas d'erreur on renvoie false
949
		// TODO: lever une exception
947
		// TODO: lever une exception
950
		if(!$resultat_selection_utilisateur) {
948
		if(!$resultat_selection_utilisateur) {
951
			return false;
949
			return false;
952
		} else {
950
		} else {
953
			return $resultat_selection_utilisateur;
951
			return $resultat_selection_utilisateur;
954
		}
952
		}
955
	}
953
	}
956
	
954
	
957
	
955
	
958
 
956
 
959
	/**
957
	/**
960
	 * Supprime une inscription dans une table annuaire
958
	 * Supprime une inscription dans une table annuaire
961
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
959
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
962
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
960
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
963
	 * @return boolean true si la suppression a réussi, false sinon
961
	 * @return boolean true si la suppression a réussi, false sinon
964
	 */
962
	 */
965
	public function supprimerInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur) {
963
	public function supprimerInscriptionDansAnnuaireMappe($id_annuaire, $id_utilisateur) {
966
 
964
 
967
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
965
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
968
 
966
 
969
		$requete_infos_annuaire = 'SELECT * '.
967
		$requete_infos_annuaire = 'SELECT * '.
970
			'FROM annu_annuaire '.
968
			'FROM annu_annuaire '.
971
			'WHERE aa_id_annuaire = '.$id_annuaire.' ';
969
			'WHERE aa_id_annuaire = '.$id_annuaire.' ';
972
 
970
 
973
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
971
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
974
 
972
 
975
		// en cas d'erreur on renvoie false
973
		// en cas d'erreur on renvoie false
976
		// TODO: lever une exception
974
		// TODO: lever une exception
977
		if(!$resultat_infos_annuaire) {
975
		if(!$resultat_infos_annuaire) {
978
			return false;
976
			return false;
979
		}
977
		}
980
 
978
 
981
		//$supprimer_donnes = false;
979
		//$supprimer_donnes = false;
982
		$valeurs_mappees = array();
980
		$valeurs_mappees = array();
983
 
981
 
984
		$champs_date = $this->obtenirChampDateEtValidite($id_annuaire);
982
		$champs_date = $this->obtenirChampDateEtValidite($id_annuaire);
985
 
983
 
986
		// si on a défini un champ de validite d'inscription, on ne supprime pas l'enregistrement
984
		// si on a défini un champ de validite d'inscription, on ne supprime pas l'enregistrement
987
		// mais on remplace cette valeur par 0
985
		// mais on remplace cette valeur par 0
988
		/*if(isset($champs_date['champ_validite_inscription'])) {
986
		/*if(isset($champs_date['champ_validite_inscription'])) {
989
			$valeurs_mappees[$champs_date['champ_validite_inscription']] = '1';
987
			$valeurs_mappees[$champs_date['champ_validite_inscription']] = '1';
990
			$supprimer_donnees = true;
988
			$supprimer_donnees = true;
991
		}
989
		}
992
 
990
 
993
		// si on a défini un champ date de desinscription, on met à jour avec la valeur NOW
991
		// si on a défini un champ date de desinscription, on met à jour avec la valeur NOW
994
		// avec la valeur NOW
992
		// avec la valeur NOW
995
		if(isset($champs_date['champ_date_desinscription'])) {
993
		if(isset($champs_date['champ_date_desinscription'])) {
996
			$valeurs_mappees[$champs_date['champ_date_desinscription']] = 'NOW()';
994
			$valeurs_mappees[$champs_date['champ_date_desinscription']] = 'NOW()';
997
		}*/
995
		}*/
998
 
996
 
999
		//if($supprimer_donnees) {
997
		//if($supprimer_donnees) {
1000
			$requete_suppression_utilisateur = 'DELETE FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
998
		$requete_suppression_utilisateur = 'DELETE FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
1001
											 'WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
999
											 'WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
1002
 
1000
 
1003
		/*} else {
1001
		/*} else {
1004
 
1002
 
1005
			$champs_valeurs = '';
1003
			$champs_valeurs = '';
1006
			foreach($valeurs_mappees as $cle => $valeur) {
1004
			foreach($valeurs_mappees as $cle => $valeur) {
1007
				$champs_valeurs .= $cle.' = '.$valeur.', ';
1005
				$champs_valeurs .= $cle.' = '.$valeur.', ';
1008
			}
1006
			}
1009
 
1007
 
1010
			$requete_suppression_utilisateur = 'UPDATE '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
1008
			$requete_suppression_utilisateur = 'UPDATE '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
1011
											 	'SET '.$champs_valeurs.' '.
1009
											 	'SET '.$champs_valeurs.' '.
1012
												'WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
1010
												'WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
1013
		}*/
1011
		}*/
1014
 
1012
 
1015
		$resultat_suppression_utilisateur = $this->requeteUn($requete_suppression_utilisateur);
1013
		$resultat_suppression_utilisateur = $this->requeteUn($requete_suppression_utilisateur);
1016
 
1014
 
1017
		// en cas d'erreur on renvoie false
1015
		// en cas d'erreur on renvoie false
1018
		// TODO: lever une exception
1016
		// TODO: lever une exception
1019
		if($this->utilisateurExisteParId($id_annuaire, $id_utilisateur, $champs_mappage)) {
1017
		if($this->utilisateurExisteParId($id_annuaire, $id_utilisateur, $champs_mappage)) {
1020
			return false;
1018
			return false;
1021
		}
1019
		}
1022
 
1020
 
1023
		return true;
1021
		return true;
1024
	}
1022
	}
1025
 
1023
 
1026
	/**
1024
	/**
1027
	 * Renvoie vrai si un utilisateur existe suivant un id donné
1025
	 * Renvoie vrai si un utilisateur existe suivant un id donné
1028
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
1026
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel on supprime les données
1029
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
1027
	 * @param int $id_utilisateur l'identifiant de l'utilisateur à supprimer
1030
	 * @return boolean true si l'utilisateur existe, false sinon
1028
	 * @return boolean true si l'utilisateur existe, false sinon
1031
	 */
1029
	 */
1032
	public function utilisateurExisteParId($id_annuaire, $id_utilisateur) {
1030
	public function utilisateurExisteParId($id_annuaire, $id_utilisateur) {
1033
 
1031
 
1034
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1032
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1035
 
1033
 
1036
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1034
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1037
					'FROM  annu_annuaire '.
1035
					'FROM  annu_annuaire '.
1038
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1036
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1039
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1037
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1040
 
1038
 
1041
		if(!$resultat_informations_annuaire) {
1039
		if(!$resultat_informations_annuaire) {
1042
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
1040
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
1043
		}
1041
		}
1044
 
1042
 
1045
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit'.
1043
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit'.
1046
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1044
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1047
				' WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
1045
				' WHERE '.$champs_mappage[0]['champ_id'].' = '.$this->proteger($id_utilisateur);
1048
 
1046
 
1049
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
1047
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
1050
 
1048
 
1051
		if(!$resultat_nombre_inscrits) {
1049
		if(!$resultat_nombre_inscrits) {
1052
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
1050
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
1053
		}
1051
		}
1054
 
1052
 
1055
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
1053
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
1056
 
1054
 
1057
	}
1055
	}
1058
 
1056
 
1059
	 /** Renvoie vrai si un utilisateur existe suivant un mail donné
1057
	 /** Renvoie vrai si un utilisateur existe suivant un mail donné
1060
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel recherche
1058
	 * @param int $id_annuaire l'identifiant de l'annuaire dans lequel recherche
1061
	 * @param int $id_utilisateur le mail de l'utilisateur à chercher
1059
	 * @param int $id_utilisateur le mail de l'utilisateur à chercher
1062
	 * @return boolean true si l'utilisateur existe, false sinon
1060
	 * @return boolean true si l'utilisateur existe, false sinon
1063
	 */
1061
	 */
1064
	public function utilisateurExisteParMail($id_annuaire, $mail) {
1062
	public function utilisateurExisteParMail($id_annuaire, $mail) {
1065
 
1063
 
1066
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1064
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1067
 
1065
 
1068
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1066
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1069
					'FROM  annu_annuaire '.
1067
					'FROM  annu_annuaire '.
1070
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1068
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1071
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1069
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1072
 
1070
 
1073
		if(!$resultat_informations_annuaire) {
1071
		if(!$resultat_informations_annuaire) {
1074
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
1072
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
1075
		}
1073
		}
1076
 
1074
 
1077
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit '.
1075
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit '.
1078
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1076
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1079
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
1077
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
1080
 
1078
 
1081
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
1079
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
1082
 
1080
 
1083
		if(!$resultat_nombre_inscrits) {
1081
		if(!$resultat_nombre_inscrits) {
1084
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
1082
			trigger_error('impossible de vérifier l\'existence de cet utilisateur ');
1085
		}
1083
		}
1086
 
1084
 
1087
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
1085
		return ($resultat_nombre_inscrits['est_inscrit'] > 0) ;
1088
 
1086
 
1089
	}
1087
	}
1090
 
1088
 
1091
	/**
1089
	/**
1092
	 * @param int $id_annuaire identifiant de l'annuaire dans lequel on recherche
1090
	 * @param int $id_annuaire identifiant de l'annuaire dans lequel on recherche
1093
	 * @param array $valeurs un tableau de valeurs à rechercher
1091
	 * @param array $valeurs un tableau de valeurs à rechercher
1094
	 * @param array $id_a_inclure un tableau d'identifiants à inclure (pour chainer des recherches)
1092
	 * @param array $id_a_inclure un tableau d'identifiants à inclure (pour chainer des recherches)
1095
	 * @param boolean $exclusive indique si l'on recherche effectue une recherche exclusive ou inclusive (AND, ou OR)
1093
	 * @param boolean $exclusive indique si l'on recherche effectue une recherche exclusive ou inclusive (AND, ou OR)
1096
	 */
1094
	 */
1097
	public function rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, $id_a_inclure = array(), $exclusive = true, $numero_page = 1, $taille_page = 50) {
1095
	public function rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, $id_a_inclure = array(), $exclusive = true, $numero_page = 1, $taille_page = 50) {
1098
 
1096
 
1099
		// Si la fonction est appelée et que tous les critères sont vides
1097
		// Si la fonction est appelée et que tous les critères sont vides
1100
		if(count($valeurs) == 0 && count($id_a_inclure) == 0) {
1098
		if(count($valeurs) == 0 && count($id_a_inclure) == 0) {
1101
			// on sort directement
1099
			// on sort directement
1102
			return array();
1100
			return array();
1103
		}
1101
		}
1104
 
1102
 
1105
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1103
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1106
					'FROM  annu_annuaire '.
1104
					'FROM  annu_annuaire '.
1107
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1105
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1108
 
1106
 
1109
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1107
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1110
				
1108
				
1111
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1109
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1112
 
1110
 
1113
		$requete_recherche_inscrits = 'SELECT '.$champs_mappage[0]['champ_id'].
1111
		$requete_recherche_inscrits = 'SELECT '.$champs_mappage[0]['champ_id'].
1114
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1112
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1115
				' WHERE ';
1113
				' WHERE ';
1116
 
1114
 
1117
		$requete_conditions_inscrits = '';
1115
		$requete_conditions_inscrits = '';
1118
 
1116
 
1119
		if($exclusive) {
1117
		if($exclusive) {
1120
			$separateur = ' AND ';
1118
			$separateur = ' AND ';
1121
		} else {
1119
		} else {
1122
			$separateur = ' OR ';
1120
			$separateur = ' OR ';
1123
		}
1121
		}
1124
 
1122
 
1125
		// on inclut les identifiants déjà trouvé par les critères de métadonnées
1123
		// on inclut les identifiants déjà trouvé par les critères de métadonnées
1126
		if(is_array($id_a_inclure) && count($id_a_inclure) != 0) {
1124
		if(is_array($id_a_inclure) && count($id_a_inclure) != 0) {
1127
 
1125
 
1128
			$id_inclus = implode(',',$id_a_inclure);
1126
			$id_inclus = implode(',',$id_a_inclure);
1129
 
1127
 
1130
			$requete_conditions_inscrits .= $champs_mappage[0]['champ_id'].' IN '.
1128
			$requete_conditions_inscrits .= $champs_mappage[0]['champ_id'].' IN '.
1131
			'('.$id_inclus.')'.$separateur ;
1129
			'('.$id_inclus.')'.$separateur ;
1132
		}
1130
		}
1133
 
1131
 
1134
		// si le champ contient un % alors on ne cherche pas une valeur exacte : on utilise LIKE
1132
		// si le champ contient un % alors on ne cherche pas une valeur exacte : on utilise LIKE
1135
		foreach($valeurs as $champ => $valeur) {
1133
		foreach($valeurs as $champ => $valeur) {
1136
			if(trim($valeur) != '') {
1134
			if(trim($valeur) != '') {
1137
				if(strpos($valeur,"%") != false) {
1135
				if(strpos($valeur,"%") != false) {
1138
					$operateur = ' LIKE ';
1136
					$operateur = ' LIKE ';
1139
				} else {
1137
				} else {
1140
					$operateur = ' = ';
1138
					$operateur = ' = ';
1141
				}
1139
				}
1142
				$requete_conditions_inscrits .= $champ.$operateur.$this->proteger($valeur).$separateur;
1140
				$requete_conditions_inscrits .= $champ.$operateur.$this->proteger($valeur).$separateur;
1143
			}
1141
			}
1144
		}
1142
		}
1145
 
1143
 
1146
		$requete_conditions_inscrits = rtrim($requete_conditions_inscrits, $separateur);
1144
		$requete_conditions_inscrits = rtrim($requete_conditions_inscrits, $separateur);
1147
 
1145
 
1148
		$requete_recherche_inscrits .= $requete_conditions_inscrits;
1146
		$requete_recherche_inscrits .= $requete_conditions_inscrits;
1149
		
1147
		
1150
		$requete_nb_inscrits = 'SELECT COUNT( * ) as nb '.' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
1148
		$requete_nb_inscrits = 'SELECT COUNT( * ) as nb '.' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'];
1151
 
1149
 
1152
		if(trim($requete_conditions_inscrits) != '') {
1150
		if(trim($requete_conditions_inscrits) != '') {
1153
			$requete_nb_inscrits .= ' WHERE '.$requete_conditions_inscrits;
1151
			$requete_nb_inscrits .= ' WHERE '.$requete_conditions_inscrits;
1154
		}
1152
		}
1155
 
1153
 
1156
		$resultat_nb_inscrits = $this->requeteUn($requete_nb_inscrits);
1154
		$resultat_nb_inscrits = $this->requeteUn($requete_nb_inscrits);
1157
 
1155
 
1158
		$nb_inscrits = 0;
1156
		$nb_inscrits = 0;
1159
		if($resultat_nb_inscrits) {
1157
		if($resultat_nb_inscrits) {
1160
			$nb_inscrits = $resultat_nb_inscrits['nb'];
1158
			$nb_inscrits = $resultat_nb_inscrits['nb'];
1161
		}
1159
		}
1162
 
1160
 
1163
		$requete_recherche_inscrits .= ' LIMIT '.(($numero_page-1)*$taille_page).','.($taille_page);
1161
		$requete_recherche_inscrits .= ' LIMIT '.(($numero_page-1)*$taille_page).','.($taille_page);
1164
 
1162
 
1165
		$resultat_recherche_inscrits = $this->requeteTous($requete_recherche_inscrits);
1163
		$resultat_recherche_inscrits = $this->requeteTous($requete_recherche_inscrits);
1166
 
1164
 
1167
		if(!$resultat_recherche_inscrits) {
1165
		if(!$resultat_recherche_inscrits) {
1168
			$resultat_recherche_inscrits = array();
1166
			$resultat_recherche_inscrits = array();
1169
		}
1167
		}
1170
 
1168
 
1171
		return array('total' => $nb_inscrits, 'resultat' => $resultat_recherche_inscrits) ;
1169
		return array('total' => $nb_inscrits, 'resultat' => $resultat_recherche_inscrits) ;
1172
	}
1170
	}
1173
 
1171
 
1174
	/**
1172
	/**
1175
	 * Reinitialise un mot de passe associé à un mail donné et en renvoie un nouveau,
1173
	 * Reinitialise un mot de passe associé à un mail donné et en renvoie un nouveau,
1176
	 * généré aléatoirement
1174
	 * généré aléatoirement
1177
	 * @param int $id_annuaire l'identifiant de l'annuaire
1175
	 * @param int $id_annuaire l'identifiant de l'annuaire
1178
	 * @param string $mail le mail dont on doit réinitialiser le mot de passe
1176
	 * @param string $mail le mail dont on doit réinitialiser le mot de passe
1179
	 * @return string le nouveau mot de passe ou false si l'utilisateur n'existe pas
1177
	 * @return string le nouveau mot de passe ou false si l'utilisateur n'existe pas
1180
	 */
1178
	 */
1181
	public function reinitialiserMotDePasse($id_annuaire, $mail) {
1179
	public function reinitialiserMotDePasse($id_annuaire, $mail) {
1182
 
1180
 
1183
		$str = "";
1181
		$str = "";
1184
		$chaine = "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789";
1182
		$chaine = "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789";
1185
 
1183
 
1186
		srand((double)microtime()*1000000);
1184
		srand((double)microtime()*1000000);
1187
		for($i = 0; $i < 10; $i++){
1185
		for($i = 0; $i < 10; $i++){
1188
			$str .= $chaine[rand()%strlen($chaine)];
1186
			$str .= $chaine[rand()%strlen($chaine)];
1189
		}
1187
		}
1190
 
1188
 
1191
		$nouveau_mdp = $str;
1189
		$nouveau_mdp = $str;
1192
 
1190
 
1193
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1191
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
1194
					'FROM  annu_annuaire '.
1192
					'FROM  annu_annuaire '.
1195
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1193
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
1196
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1194
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
1197
 
1195
 
1198
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1196
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
1199
 
1197
 
1200
		$requete_modification_mdp = 'UPDATE '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1198
		$requete_modification_mdp = 'UPDATE '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
1201
				' SET '.$champs_mappage[0]['champ_pass'].' = '.$nouveau_mdp.
1199
				' SET '.$champs_mappage[0]['champ_pass'].' = '.$nouveau_mdp.
1202
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
1200
				' WHERE '.$champs_mappage[0]['champ_mail'].' = '.$this->proteger($mail);
1203
 
1201
 
1204
		return $nouveau_mdp;
1202
		return $nouveau_mdp;
1205
 
1203
 
1206
		$resultat_modification_mdp = $this->requete($requete_modification_mdp);
1204
		$resultat_modification_mdp = $this->requete($requete_modification_mdp);
1207
 
1205
 
1208
		if($resultat_modification_mdp) {
1206
		if($resultat_modification_mdp) {
1209
			return $nouveau_mdp;
1207
			return $nouveau_mdp;
1210
		}
1208
		}
1211
 
1209
 
1212
		return false;
1210
		return false;
1213
	}
1211
	}
1214
 
1212
 
1215
}
1213
}
1216
?>
1214
?>