Subversion Repositories Applications.annuaire

Rev

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

Rev 18 Rev 38
Line 19... Line 19...
19
class AnnuaireModele extends Modele {
19
class AnnuaireModele extends Modele {
Line 20... Line 20...
20
 
20
 
Line 21... Line 21...
21
	private $config = array();
21
	private $config = array();
22
 
22
 
23
	/**
23
	/**
24
	 * Charge la liste complète des listes
-
 
25
	 * return array un tableau contenant des objets d'informations sur les listes
24
	 * Charge la liste complète des annuaires gérés par l'application
26
	 * @return array un tableau d'objets contenant la liste des listes
25
	 * @return array un tableau contenant des informations sur les annuaires gérés par l'application
27
	 */
26
	 */
28
   	public function chargerListeAnnuaire() {
27
   	public function chargerListeAnnuaire() {
29
		$requete = 	'SELECT * '.
28
		$requete = 	'SELECT * '.
Line 67... Line 66...
67
 
66
 
Line 68... Line 67...
68
	public function obtenirChampsMappageAnnuaire($id_annuaire) {
67
	public function obtenirChampsMappageAnnuaire($id_annuaire) {
Line 69... Line -...
69
 
-
 
70
		$tableau_mappage = array();
-
 
71
 
-
 
72
		$tableau_mappage[0]['champ_id'] = 'U_ID';
68
 
73
		$tableau_mappage[0]['champ_mail'] = 'U_MAIL';
-
 
74
		$tableau_mappage[0]['champ_nom'] = 'U_NAME';
69
		$tableau_mappage = array();
Line -... Line 70...
-
 
70
 
Line 75... Line 71...
75
		$tableau_mappage[0]['champ_prenom'] = 'U_SURNAME';
71
		$requete_champs_mappage = 'SELECT * FROM annu_triples WHERE at_ce_annuaire = '.$this->proteger($id_annuaire).' '.
-
 
72
		"AND at_action IN ('champ_id', 'champ_mail', 'champ_nom', 'champ_prenom', 'champ_pass', 'champ_lettre', 'champ_code_postal', 'champ_ville')";
76
		$tableau_mappage[0]['champ_pass'] = 'U_PASSWD';
73
 
-
 
74
		$resultat_champs_mappage = $this->requeteTous($requete_champs_mappage);
-
 
75
 
-
 
76
		$tableau_mappage = array();
77
		$tableau_mappage[0]['champ_lettre'] = 'U_LETTRE';
77
 
78
 
78
		if(!$resultat_champs_mappage) {
79
 
79
			trigger_error('impossible de récupérer les champs de mappage de l\'annuaire '.$id_annuaire);
-
 
80
		}
-
 
81
 
-
 
82
		foreach ($resultat_champs_mappage as  $champ) {
Line 80... Line -...
80
		$tableau_mappage[1]['champ_mail'] = '16';
-
 
81
		$tableau_mappage[1]['champ_nom'] = '1';
83
			$tableau_mappage[0][$champ['at_action']] = $champ['at_ressource'];
82
		$tableau_mappage[1]['champ_prenom'] = '7';
84
			$tableau_mappage[1][$champ['at_action']] = $champ['at_valeur'];
Line 83... Line 85...
83
		$tableau_mappage[1]['champ_pass'] = '11';
85
		}
84
		$tableau_mappage[1]['champ_lettre'] = '14';
86
 
Line 111... Line 113...
111
 
113
 
112
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
114
		$resultat_nombre_inscrits = $this->requeteUn($requete_nombre_inscrits);
113
		return $resultat_nombre_inscrits['nom_inscrits'] ;
115
		return $resultat_nombre_inscrits['nom_inscrits'] ;
Line -... Line 116...
-
 
116
	}
-
 
117
 
-
 
118
	public function chargerNombreAnnuaireListeInscritsParDepartement($identifiant) {
-
 
119
 
-
 
120
		$requete_informations_annuaire = 	'SELECT aa_bdd, aa_table '.
-
 
121
					'FROM  annu_annuaire '.
-
 
122
					'WHERE aa_id_annuaire = '.$identifiant.' ';
-
 
123
		$resultat_informations_annuaire = $this->requeteUn($requete_informations_annuaire);
-
 
124
 
-
 
125
		if(!$resultat_informations_annuaire) {
-
 
126
			trigger_error('impossible de récupérer les informations de la table '.$identifiant);
-
 
127
		}
-
 
128
 
-
 
129
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($identifiant);
-
 
130
		$champ_code_postal = $tableau_mappage[0]['champ_code_postal'];
-
 
131
 
-
 
132
		$requete_nombre_inscrits = 'SELECT IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
-
 
133
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
-
 
134
						'		SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) AS id, '.
-
 
135
						'	COUNT(*) AS nbre '.
-
 
136
						'FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].' '.
-
 
137
						'GROUP BY IF ( SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) >= 96, '.
-
 
138
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 3 ), '.
-
 
139
						'	SUBSTRING( '.$champ_code_postal.' FROM 1 FOR 2 ) ) '.
-
 
140
						'ORDER BY id ASC ';
-
 
141
 
-
 
142
			// Récupération des résultats
-
 
143
			try {
-
 
144
				$donnees = $this->requeteTous($requete_nombre_inscrits);
-
 
145
				if ($donnees === false) {
-
 
146
					$this->messages[] = "La requête n'a retourné aucun résultat.";
-
 
147
				} else {
-
 
148
					foreach ($donnees as $donnee) {
-
 
149
						$resultat_nombre_inscrits[$donnee['id']] = $donnee['nbre'];
-
 
150
					}
-
 
151
				}
-
 
152
			} catch (PDOException $e) {
-
 
153
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
154
			}
-
 
155
 
-
 
156
		if(!$resultat_informations_annuaire) {
-
 
157
			trigger_error('impossible de récupérer le nombre d\'inscrits de la table '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table']);
-
 
158
		}
-
 
159
 
-
 
160
		return $resultat_nombre_inscrits;
-
 
161
	}
-
 
162
 
-
 
163
	public function rechercherInscritDansAnnuaireMappeParChamp($id_annuaire, $champ_critere, $valeur, $modele = false) {
-
 
164
 
-
 
165
		$sep = '';
-
 
166
 
-
 
167
		if($modele) {
-
 
168
			$sep = '%';
-
 
169
		}
-
 
170
 
-
 
171
		$valeurs = array($champ_critere => $valeur.$sep);
-
 
172
 
-
 
173
		return $this->rechercherInscritDansAnnuaireMappe($id_annuaire, $valeurs, array(), true);
114
	}
174
	}
115
 
175
 
116
	/**
176
	/**
117
	 * Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
177
	 * Charge les inscrits d'une table annuaire mappée, en ne conservant que les champs de mappage indiqués
118
	 * @param int $identifiant l'identifiant de l'annuaire mappé
178
	 * @param int $identifiant l'identifiant de l'annuaire mappé
Line 158... Line 218...
158
	 */
218
	 */
159
	public function ajouterNouvelleInscriptionTemporaire($identifiant, $donnees) {
219
	public function ajouterNouvelleInscriptionTemporaire($identifiant, $donnees) {
Line 160... Line 220...
160
 
220
 
161
		// on protège et on sérialise les données
221
		// on protège et on sérialise les données
162
		$identifiant = $this->proteger($identifiant);
222
		$identifiant = $this->proteger($identifiant);
163
		$donnees = serialize($donnees);
223
		$donnees = base64_encode(serialize($donnees));
Line -... Line 224...
-
 
224
		$donnees = $this->proteger($donnees);
-
 
225
 
164
		$donnees = $this->proteger($donnees);
226
		//echo $donnees ;
165
 
227
 
166
		// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
228
		// FIXME: les accents sautent alors que l'encodage est le bon ! Pourquoi ?
167
		$requete = 	'INSERT INTO annu_inscription_temp '.
229
		$requete = 	'INSERT INTO annu_inscription_temp '.
Line 168... Line 230...
168
					'VALUES '.
230
					'VALUES '.
169
					'('.$identifiant.','.$donnees.', NOW()) ';
231
					'('.$identifiant.','.$donnees.', NOW())';
Line 170... Line 232...
170
 
232
 
Line 186... Line 248...
186
					'ait_id = '.$identifiant;
248
					'ait_id = '.$identifiant;
Line 187... Line 249...
187
 
249
 
Line 188... Line 250...
188
		$donnees_inscription = $this->requeteUn($requete);
250
		$donnees_inscription = $this->requeteUn($requete);
189
 
251
 
190
		if($donnees_inscription) {
252
		if($donnees_inscription) {
Line 191... Line 253...
191
			return unserialize($donnees_inscription['ait_donnees']);
253
			return unserialize(base64_decode($donnees_inscription['ait_donnees']));
192
		}
254
		}
Line 206... Line 268...
206
 
268
 
207
		$requete = 	'DELETE FROM annu_inscription_temp '.
269
		$requete = 	'DELETE FROM annu_inscription_temp '.
208
					'WHERE '.
270
					'WHERE '.
Line 209... Line 271...
209
					'ait_id = '.$identifiant;
271
					'ait_id = '.$identifiant;
-
 
272
 
-
 
273
		//return $this->requete($requete);
210
 
274
 
Line 211... Line 275...
211
		return $this->requete($requete);
275
		return true;
212
	}
276
	}
213
 
277
 
Line 218... Line 282...
218
	 * @param string $nom_champs les noms des champs dans lesquels on va ajouter les données
282
	 * @param string $nom_champs les noms des champs dans lesquels on va ajouter les données
219
	 * @return int l'identifiant du nouvel enregistrement
283
	 * @return int l'identifiant du nouvel enregistrement
220
	 */
284
	 */
221
	public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
285
	public function ajouterInscriptionDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $nom_champs) {
Line 222... Line -...
222
 
-
 
223
		$id_annuaire = 1;
-
 
224
 
286
 
225
		$requete_infos_annuaire = 'SELECT * '.
287
		$requete_infos_annuaire = 'SELECT * '.
226
					'FROM  annu_annuaire '.
288
					'FROM  annu_annuaire '.
Line 227... Line 289...
227
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
289
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
Line 253... Line 315...
253
		if(!$this->requete($requete_insertion_annuaire)) {
315
		if(!$this->requete($requete_insertion_annuaire)) {
254
			return $id_nouvel_enregistrement;
316
			return $id_nouvel_enregistrement;
255
		}
317
		}
Line 256... Line 318...
256
 
318
 
257
		// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
319
		// le mail est censé être unique donc on l'utilise pour faire une selection pour retrouver l'enregistrement
258
		// (je n'aime pas les requete du style SELECT MAX(id)... qui ne garantissent pas qu'on récupère le bon id
320
		// (Les requetes du style SELECT MAX(id)... ne garantissent pas qu'on récupère le bon id
259
		// si une autre insertion a eu lieu entre temps)
-
 
260
		// TODO: voir si le standard sql propose quelque chose pour ce problème
321
		// si une autre insertion a eu lieu entre temps)
261
		$requete_nouvel_id = 	'SELECT '.$nom_champs['champ_id'].' '.
322
		$requete_nouvel_id = 	'SELECT '.$nom_champs['champ_id'].' '.
262
								'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
323
								'FROM '.$annuaire['aa_bdd'].'.'.$annuaire['aa_table'].' '.
263
								'WHERE '.
324
								'WHERE '.
Line 316... Line 377...
316
	}
377
	}
Line 317... Line 378...
317
 
378
 
Line 318... Line 379...
318
	public function obtenirMailParId($id_annuaire, $id_utilisateur) {
379
	public function obtenirMailParId($id_annuaire, $id_utilisateur) {
-
 
380
 
-
 
381
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
Line 319... Line 382...
319
 
382
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
320
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
383
		$champs_mappage = $champs_mappage[0];
321
 
384
 
Line 336... Line 399...
336
 
399
 
337
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_mail'].' '.
400
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_mail'].' '.
338
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
401
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
Line -... Line 402...
-
 
402
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
-
 
403
 
-
 
404
 
339
										 'WHERE '.$champs_mappage['champ_id'].' = '.$id_utilisateur;
405
 
Line 340... Line 406...
340
 
406
		//echo $requete_selection_utilisateur;
341
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
407
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
342
 
408
 
Line 348... Line 414...
348
			return $resultat_selection_utilisateur[$champs_mappage['champ_mail']];
414
			return $resultat_selection_utilisateur[$champs_mappage['champ_mail']];
349
		}
415
		}
Line 350... Line 416...
350
 
416
 
Line -... Line 417...
-
 
417
	}
-
 
418
 
-
 
419
	public function obtenirIdParMail($id_annuaire, $mail_utilisateur) {
-
 
420
 
-
 
421
		$champs_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
-
 
422
		// on ne garde que les champs de mappage correspondant au champ de l'annuaire principal
-
 
423
		$champs_mappage = $champs_mappage[0];
-
 
424
 
-
 
425
		$requete_infos_annuaire = 'SELECT * '.
-
 
426
					'FROM annu_annuaire '.
-
 
427
					'WHERE aa_id_annuaire = '.$id_annuaire.' ';
-
 
428
 
-
 
429
		$resultat_infos_annuaire = $this->requeteUn($requete_infos_annuaire);
-
 
430
 
-
 
431
		// en cas d'erreur on renvoie false
-
 
432
		// TODO: lever une exception
-
 
433
		if(!$resultat_infos_annuaire) {
-
 
434
			return false;
-
 
435
		}
-
 
436
 
-
 
437
		$champs_mappage_str = implode(',',$champs_mappage);
-
 
438
		$id_utilisateur = $this->proteger($id_utilisateur);
-
 
439
 
-
 
440
		$requete_selection_utilisateur = 'SELECT '.$champs_mappage['champ_id'].' '.
-
 
441
										 'FROM '.$resultat_infos_annuaire['aa_bdd'].'.'.$resultat_infos_annuaire['aa_table'].' '.
-
 
442
										 'WHERE '.$champs_mappage['champ_mail'].' = '.$this->proteger($mail_utilisateur);
-
 
443
 
-
 
444
 
-
 
445
		//echo $requete_selection_utilisateur;
-
 
446
		$resultat_selection_utilisateur = $this->requeteUn($requete_selection_utilisateur);
-
 
447
 
-
 
448
		// en cas d'erreur on renvoie false
-
 
449
		// TODO: lever une exception
-
 
450
		if(!$resultat_selection_utilisateur) {
-
 
451
			return false;
-
 
452
		} else {
-
 
453
			return $resultat_selection_utilisateur[$champs_mappage['champ_id']];
-
 
454
		}
-
 
455
 
351
	}
456
	}
352
 
457
 
353
	/**
458
	/**
354
	 * Récupère les champs demandé dans l'annuaire indiqué
459
	 * Récupère les champs demandé dans l'annuaire indiqué
355
	 * @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
Line 475... Line 580...
475
 
580
 
476
		if(!$resultat_informations_annuaire) {
581
		if(!$resultat_informations_annuaire) {
477
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
582
			trigger_error('impossible de récupérer les informations de la table '.$id_annuaire);
Line 478... Line 583...
478
		}
583
		}
479
 
584
 
480
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit'.
585
		$requete_nombre_inscrits = 'SELECT COUNT(*) AS est_inscrit '.
Line 481... Line 586...
481
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].
586
				' FROM '.$resultat_informations_annuaire['aa_bdd'].'.'.$resultat_informations_annuaire['aa_table'].