Subversion Repositories Applications.annuaire

Rev

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

Rev 5 Rev 7
1
<?php
1
<?php
2
/**
2
/**
3
* PHP Version 5
3
* PHP Version 5
4
*
4
*
5
* @category  PHP
5
* @category  PHP
6
* @package   annuaire
6
* @package   annuaire
7
* @author    aurelien <aurelien@tela-botanica.org>
7
* @author    aurelien <aurelien@tela-botanica.org>
8
* @copyright 2010 Tela-Botanica
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
10
* @version   SVN: <svn_id>
11
* @link      /doc/annuaire/
11
* @link      /doc/annuaire/
12
*/
12
*/
13
 
13
 
14
class AnnuaireControleur extends Controleur {
14
class AnnuaireControleur extends Controleur {
-
 
15
 
15
 
16
 
16
	/**
17
	/**
17
	 * (fonction héritée de la classe Controleur)
18
	 * (fonction héritée de la classe Controleur)
18
	 * Avant chaque chargement de vue, on ajoute l'url de la page dans
19
	 * Avant chaque chargement de vue, on ajoute l'url de la page dans
19
	 * les variables à insérer.
20
	 * les variables à insérer.
20
	 * @param Array $donnes les données à insérer dans la vue
21
	 * @param Array $donnes les données à insérer dans la vue
21
	 * @return Array $donnees les données modifiées
22
	 * @return Array $donnees les données modifiées
22
	 */
23
	 */
23
	public function preTraiterDonnees($donnees) {
24
	public function preTraiterDonnees($donnees) {
24
		$donnees['base_url'] = Registre::getInstance()->get('base_url_application');
25
		$donnees['base_url'] = Registre::getInstance()->get('base_url_application');
25
		return $donnees;
26
		return $donnees;
26
	}
27
	}
27
 
28
 
28
	/**
29
	/**
29
	 * Fonction affichant la vue par défaut, ici le menu principal
30
	 * Fonction affichant la vue par défaut, ici le menu principal
30
	 * @return String la vue contenant le menu
31
	 * @return String la vue contenant le menu
31
	 */
32
	 */
32
	public function index() {
33
	public function index() {
33
		$data = array();
34
		$data = array();
34
		$this->chargerVue('index_annuaire', $data);
35
		$index_annuaire = $this->getVue('index_annuaire', $data);
35
 
36
 
36
		return $this->index_annuaire;
37
		return $index_annuaire;
37
	}
38
	}
38
 
39
 
39
/**-------- Fonctions de gestion des annuaires --------------------------------*/
40
/**-------- Fonctions de gestion des annuaires --------------------------------*/
40
 
41
 
41
	/**
42
	/**
42
	 * Charge la vue contenant la liste des annuaires gérés par l'application
43
	 * Charge la vue contenant la liste des annuaires gérés par l'application
43
	 * @return string la vue contenant la liste des annuaires
44
	 * @return string la vue contenant la liste des annuaires
44
	 */
45
	 */
45
	public function chargerListeAnnuaire() {
46
	public function chargerListeAnnuaire() {
46
		$this->chargerModele('AnnuaireModele');
47
		$this->chargerModele('AnnuaireModele');
47
		$data['erreurs'] = null;
48
		$data['erreurs'] = null;
48
		$data['annuaires'] = $this->AnnuaireModele->chargerListeAnnuaire();
49
		$data['annuaires'] = $this->AnnuaireModele->chargerListeAnnuaire();
49
		$this->chargerVue('liste_annu', $data);
50
		$liste_annu = $this->getVue(config::get('chemin_squelettes_annuaires').'liste_annu', $data);
50
 
51
 
51
		return $this->liste_annu;
52
		return $liste_annu;
52
	}
53
	}
53
 
54
 
54
	/**
55
	/**
55
	 * Charge la vue contenant les informations d'un annuaire donné en paramètre
56
	 * Charge la vue contenant les informations d'un annuaire donné en paramètre
56
	 * @param int $id l'identifiant de l'annuaire
57
	 * @param int $id l'identifiant de l'annuaire
57
	 * @return string la vue contenant les informations sur l'annuaire
58
	 * @return string la vue contenant les informations sur l'annuaire
58
	 */
59
	 */
59
	public function chargerAnnuaire($id) {
60
	public function chargerAnnuaire($id) {
60
		$this->chargerModele('AnnuaireModele');
61
		$this->chargerModele('AnnuaireModele');
61
		$this->chargerModele('MetadonneeModele');
62
		$this->chargerModele('MetadonneeModele');
62
		$data['erreurs'] = array();
63
		$data['erreurs'] = array();
63
		$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaire($id, true);
64
		$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaire($id, true);
64
		$data['metadonnees'] = $this->MetadonneeModele->chargerListeMetadonneeAnnuaire($id);
65
		$data['metadonnees'] = $this->MetadonneeModele->chargerListeMetadonneeAnnuaire($id);
65
		$this->chargerVue('annuaire', $data);
66
		$annuaire = $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire', $data);
66
 
67
 
67
		return $this->annuaire;
68
		return $annuaire;
68
	}
69
	}
69
 
70
 
70
	/**
71
	/**
71
	 * Charge et affiche la liste des inscrits à un annuaire donné en paramètre
72
	 * Charge et affiche la liste des inscrits à un annuaire donné en paramètre
72
	 * @param $id int l'identifiant de l'annuaire
73
	 * @param $id int l'identifiant de l'annuaire
73
	 * @return string la vue contenant les inscrits à l'annuaire
74
	 * @return string la vue contenant les inscrits à l'annuaire
74
	 */
75
	 */
75
	public function chargerAnnuaireListeInscrits($id) {
76
	public function chargerAnnuaireListeInscrits($id, $numero_page = 1, $taille_page = 50) {
76
 
77
 
77
		$this->chargerModele('AnnuaireModele');
78
		$this->chargerModele('AnnuaireModele');
78
		$data['erreurs'] = array();
79
		$data['erreurs'] = array();
79
		$champs = $this->obtenirChampsMappageAnnuaire($id);
80
		$data['champs'] = $this->obtenirChampsMappageAnnuaire($id);
80
		$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id, $champs[0], 1);
81
		$data['annuaire'] = $this->AnnuaireModele->chargerAnnuaireListeInscrits($id, $data['champs'][0], $numero_page, $taille_page);
-
 
82
		$data['pagination'] = array('numero_page' => $numero_page, 'taille_page' => $taille_page);
-
 
83
 
81
		$this->chargerVue('annuaire_inscrits', $data);
84
		$annuaires_inscrits = $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire_inscrits', $data);
82
 
85
 
83
		return $this->annuaire_inscrits;
86
		return $annuaires_inscrits;
84
	}
87
	}
85
 
88
 
86
/**-------- Fonctions d'affichage du formulaire de saisie d'un champ de metadonnée suivant le type de champ---------*/
89
/**-------- Fonctions d'affichage du formulaire de saisie d'un champ de metadonnée suivant le type de champ---------*/
87
 
90
 
88
	/**
91
	/**
89
	 * Affiche le formulaire d'inscription pour un annuaire donné
92
	 * Affiche le formulaire d'inscription pour un annuaire donné
90
	 * @param int $id_annuaire l'identifiant de l'annuaire pour lequel on veut afficher le formulaire
93
	 * @param int $id_annuaire l'identifiant de l'annuaire pour lequel on veut afficher le formulaire
91
	 * @param Array $donnees le tableau de données pour préremplir le formulaire si besoin (en cas de retour erreur)
94
	 * @param Array $donnees le tableau de données pour préremplir le formulaire si besoin (en cas de retour erreur)
92
	 */
95
	 */
93
	public function afficherFormulaireInscription($id_annuaire, $donnees=array()) {
96
	public function afficherFormulaireInscription($id_annuaire, $donnees=array()) {
94
 
97
 
95
		$this->chargerModele('AnnuaireModele');
98
		$this->chargerModele('AnnuaireModele');
96
		$annuaire = $this->AnnuaireModele->chargerAnnuaire($id_annuaire, false);
99
		$annuaire = $this->AnnuaireModele->chargerAnnuaire($id_annuaire, false);
97
 
100
 
98
		$this->chargerModele('MetadonneeModele');
101
		$this->chargerModele('MetadonneeModele');
99
		$donnees['aa_id_annuaire'] = $id_annuaire;
102
		$donnees['aa_id_annuaire'] = $id_annuaire;
100
		$metadonnees = $this->MetadonneeModele->chargerListeMetadonneeAnnuaire($id_annuaire);
103
		$metadonnees = $this->MetadonneeModele->chargerListeMetadonneeAnnuaire($id_annuaire);
101
 
104
 
102
		// TODO: ceci charge toutes les métadonnées, voir si l'on ne peut pas parser le formulaire
105
		// TODO: ceci charge toutes les métadonnées, voir si l'on ne peut pas parser le formulaire
103
		// pour ne charger que ce qui est nécéssaire
106
		// pour ne charger que ce qui est nécéssaire
104
		foreach($metadonnees as $metadonnee) {
107
		foreach($metadonnees as $metadonnee) {
105
 
108
 
106
			$id_champ = $metadonnee['amc_id_champ'];
109
			$id_champ = $metadonnee['amc_id_champ'];
107
			$nom_champ = $metadonnee['amc_abreviation'];
110
			$nom_champ = $metadonnee['amc_abreviation'];
108
			// on charge le formaulaire d'affichage de chacune des métadonnées
111
			// on charge le formaulaire d'affichage de chacune des métadonnées
109
			$donnees['champs'][$nom_champ] = $this->afficherFormulaireChampMetadonnees($id_champ,$metadonnee);
112
			$donnees['champs'][$nom_champ] = $this->afficherFormulaireChampMetadonnees($id_champ,$metadonnee);
110
		}
113
		}
111
 
114
 
112
		// le nom du formulaire d'inscription est le même que le code de l'annuaire
115
		// le nom du formulaire d'inscription est le même que le code de l'annuaire
113
		// TODO: réfléchir à une meilleure manière de stocker ça
116
		// TODO: réfléchir à une meilleure manière de stocker ça
-
 
117
		// Générer un fichier s'il n'existe pas ? et ensuite le lire ?
114
		$this->ChargerVue($annuaire['informations']['aa_code'].'_inscription',$donnees);
118
		if(!$this->formulaireExiste($annuaire['informations']['aa_code'])) {
-
 
119
			$formulaire_inscription = $this->genererFormulaireInscription($donnees);
115
 
120
		} else {
116
		$formulaire_inscription = $annuaire['informations']['aa_code'].'_inscription';
121
			$formulaire_inscription = $this->GetVue(config::get('chemin_squelettes_formulaires').$annuaire['informations']['aa_code'].'_inscription',$donnees);
-
 
122
		}
117
 
123
 
118
		return $this->$formulaire_inscription;
124
		return $formulaire_inscription;
119
	}
125
	}
120
 
126
 
121
	/**
127
	/**
122
	 * Charge et affiche le champ correspondant à la modification ou l'ajout d'un champ de metadonnée
128
	 * Charge et affiche le champ correspondant à la modification ou l'ajout d'un champ de metadonnée
123
	 * @param int $id_champ l'identifiant du champ demandé
129
	 * @param int $id_champ l'identifiant du champ demandé
124
	 * @return string la vue contenant le champ de formulaire correspondant
130
	 * @return string la vue contenant le champ de formulaire correspondant
125
	 */
131
	 */
126
	public function afficherFormulaireChampMetadonnees($id_champ, $donnees=array()) {
132
	public function afficherFormulaireChampMetadonnees($id_champ, $donnees=array()) {
127
 
133
 
128
		// si le champ est restreint à une valeur de liste
134
		// si le champ est restreint à une valeur de liste
129
		if($donnees['amc_ce_ontologie'] != 0) {
135
		if($donnees['amc_ce_ontologie'] != 0) {
130
				$this->chargerModele('OntologieModele');
136
				$this->chargerModele('OntologieModele');
131
				$donnees['liste_valeurs'] = $this->OntologieModele->chargerListeOntologie($donnees['amc_ce_ontologie']);
137
				$donnees['liste_valeurs'] = $this->OntologieModele->chargerListeOntologie($donnees['amc_ce_ontologie']);
132
		}
138
		}
133
		$donnees['amc_id_champ'] = $id_champ;
139
		$donnees['amc_id_champ'] = $id_champ;
134
		$this->chargerModele('MetadonneeModele');
140
		$this->chargerModele('MetadonneeModele');
135
		$nom__type_champ = $this->MetadonneeModele->renvoyerCorrespondanceNomTemplateChamp($donnees['amc_ce_type_affichage']);
141
		$nom__type_champ = $this->MetadonneeModele->renvoyerCorrespondanceNomTemplateChamp($donnees['amc_ce_type_affichage']);
136
		return $this->getVue($nom__type_champ,$donnees);
142
		return $this->getVue(config::get('chemin_squelettes_champs').$nom__type_champ,$donnees);
137
	}
143
	}
138
 
144
 
139
/**-------- Fonctions d'inscription -------------------------------------------------------------------------------*/
145
/**-------- Fonctions d'inscription -------------------------------------------------------------------------------*/
140
 
146
 
141
	/**
147
	/**
142
	 * Lors d'une tentative d'inscription, ajoute une les infos dans la tables d'inscription
148
	 * Lors d'une tentative d'inscription, ajoute les infos dans la table d'inscription
143
	 * temporaire et envoie le mail contenant le lien de confirmation si tout s'est bien passé
149
	 * temporaire et envoie le mail contenant le lien de confirmation si tout s'est bien passé
144
	 * @param Array $valeurs les valeurs à ajouter
150
	 * @param Array $valeurs les valeurs à ajouter
145
	 * @return string la vue contenant la confirmation de l'inscription
151
	 * @return string la vue contenant la confirmation de l'inscription
146
	 */
152
	 */
147
	public function ajouterInscriptionTemporaire($valeurs) {
153
	public function ajouterInscriptionTemporaire($valeurs) {
148
 
154
 
149
		$this->chargerModele('MetadonneeModele');
155
		$this->chargerModele('MetadonneeModele');
150
		$id_annuaire = $valeurs['aa_id_annuaire'];
156
		$id_annuaire = $valeurs['aa_id_annuaire'];
-
 
157
		unset($valeurs['aa_id_annuaire']);
151
 
158
 
152
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
159
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
153
		$valeurs_mappees = array();
160
		$valeurs_mappees = array();
154
 
161
 
155
		// on itère sur le tableau de valeur pour récupérer les champs de mappage;
162
		// on itère sur le tableau de valeur pour récupérer les champs de mappage;
156
		foreach($valeurs as $nom_champ => $valeur) {
163
		foreach($valeurs as $nom_champ => $valeur) {
-
 
164
 
-
 
165
 
157
			// pour chaque valeur
166
			// pour chaque valeur
158
			// on extrait l'id du champ
167
			// on extrait l'id du champ
159
			$ids_champ = mb_split("_",$nom_champ);
168
			$ids_champ = mb_split("_",$nom_champ, 3);
-
 
169
 
-
 
170
			if(count($ids_champ) == 3) {
-
 
171
 
-
 
172
				$type = $ids_champ[0];
-
 
173
				$id_champ = $ids_champ[2];
-
 
174
				$confirmation = $valeurs[$type.'_'.$id_champ];
-
 
175
 
-
 
176
			} else {
-
 
177
				$type = $ids_champ[0];
-
 
178
				$confirmation = false;
160
			$id_champ = $ids_champ[count($ids_champ) - 1];
179
				$id_champ = $ids_champ[1];
-
 
180
			}
-
 
181
 
-
 
182
			// on fait des vérifications et des remplacements sur certaines valeurs
-
 
183
			$valeurs[$nom_champ] = $this->verifierEtRemplacerValeurChamp($type,$valeur,$confirmation);
161
 
184
 
162
			// Si le champ fait partie des champs mappés
185
			// Si le champ fait partie des champs mappés
163
			$cle_champ = array_search($id_champ, $tableau_mappage[1]);
186
			$cle_champ = array_search($id_champ, $tableau_mappage[1]);
164
 
187
 
165
			if($cle_champ) {
188
			if($cle_champ) {
166
				// on ajoute sa clé correspondante dans le tableau des champs mappés
189
				// on ajoute sa clé correspondante dans le tableau des champs mappés
167
				// qui sont les champs à vérifier
190
				// qui sont les champs à vérifier
168
				$valeurs_mappees[$ids_champ] = $valeur;
191
				$valeurs_mappees[$cle_champ] = $valeur;
169
			}
192
			}
170
		}
193
		}
171
 
194
 
172
		// vérification des champs minimaux : nom, prénom, mail, mot de passe
195
		// vérification des champs minimaux : nom, prénom, mail, mot de passe
173
		// TODO: des champs minimaux différents pour chaque annuaire ? comment les stocke t'on ?
196
		// TODO: des champs minimaux différents pour chaque annuaire ? comment les stocke t'on ?
174
		/*if($erreurs = $this->verifierErreursChamps($id_annuaire,$valeurs_mappees, $tableau_mappage)) {
197
		if($erreurs = $this->verifierErreursChamps($id_annuaire,$valeurs_mappees, $tableau_mappage)) {
175
			$valeurs['erreurs'] = $erreurs;
198
			$valeurs['erreurs'] = $erreurs;
176
			return $this->afficherFormulaireInscription($id_annuaire, $valeurs);
199
			return $this->afficherFormulaireInscription($id_annuaire, $valeurs);
177
		}*/
200
		}
178
 
201
 
179
		$code_confirmation = $this->InsererDansTableTemporaireEtcreerCodeConfirmationInscription($valeurs);
202
		$code_confirmation = $this->InsererDansTableTemporaireEtCreerCodeConfirmationInscription($valeurs);
180
 
203
 
181
		$this->envoyerMailConfirmationInscription($valeurs_mappees['champ_mail'],
204
		$this->envoyerMailConfirmationInscription($valeurs_mappees['champ_mail'],
182
													$valeurs_mappees['champ_nom'],
205
													$valeurs_mappees['champ_nom'],
183
													$valeurs_mappees['champ_prenom'],
206
													$valeurs_mappees['champ_prenom'],
184
													$code_confirmation);
207
													$code_confirmation);
185
		// Si tout s'est bien passé, on affiche la page de confirmation
208
		// Si tout s'est bien passé, on affiche la page de confirmation
186
		return $this->getVue('annuaire_inscription_reussie',array());
209
		return $this->getVue(config::get('chemin_squelettes_annuaires').'annuaire_inscription_reussie',array());
187
	}
210
	}
188
 
211
 
189
	/**
212
	/**
190
	 * Ajoute une nouvelle inscription à un annuaire à partir de données d'une table temporaire.
213
	 * Ajoute une nouvelle inscription à un annuaire à partir de données d'une table temporaire.
191
	 * Typiquement, on déclenche cette fonction en cliquant sur le lien contenu dans le mail de confirmation
214
	 * Typiquement, on déclenche cette fonction en cliquant sur le lien contenu dans le mail de confirmation
192
	 * @param int $indentifant L'identifant de session d'une tentative d'inscription
215
	 * @param int $indentifant L'identifant de session d'une tentative d'inscription
193
	 */
216
	 */
194
	public function ajouterNouvelleInscription($identifiant) {
217
	public function ajouterNouvelleInscription($identifiant) {
195
 
218
 
196
		$this->chargerModele('AnnuaireModele');
219
		$this->chargerModele('AnnuaireModele');
197
 
220
 
198
		$valeurs = $this->AnnuaireModele->chargerDonneesInscriptionTemporaire($identifiant);
221
		$valeurs = $this->AnnuaireModele->chargerDonneesInscriptionTemporaire($identifiant);
199
 
222
 
200
		if(!$valeurs || count($valeurs) == 0) {
223
		if(!$valeurs || count($valeurs) == 0) {
201
			// TODO afficher vue en cas d'echec
224
			// TODO afficher vue en cas d'echec
202
		}
225
		}
203
 
226
 
204
		$id_annuaire = $valeurs['aa_id_annuaire'];
227
		$id_annuaire = $valeurs['aa_id_annuaire'];
205
		unset($valeurs['aa_id_annuaire']);
228
		unset($valeurs['aa_id_annuaire']);
206
 
229
 
207
		$this->chargerModele('MetadonneeModele');
230
		$this->chargerModele('MetadonneeModele');
208
		// TODO: faire un tri par l'id ou selon autre critère pour séparer champs
-
 
209
		// normaux des meta champs
-
 
-
 
231
 
210
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
232
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
211
 
233
 
212
		$valeurs_mappees = array();
234
		$valeurs_mappees = array();
213
 
235
 
214
		// on itère sur le tableau de valeur pour récupérer les métadonnées;
236
		// on itère sur le tableau de valeur pour récupérer les métadonnées;
215
		foreach($valeurs as $nom_champ => $valeur) {
237
		foreach($valeurs as $nom_champ => $valeur) {
216
			// pour chaque valeur
238
			// pour chaque valeur
217
			// on extrait l'id du champ
239
			// on extrait l'id du champ
218
			$ids_champ = mb_split("_",$nom_champ);
240
			$ids_champ = mb_split("_",$nom_champ);
219
			$id_champ = $ids_champ[count($ids_champ) - 1];
241
			$id_champ = $ids_champ[count($ids_champ) - 1];
220
 
242
 
221
			// Si le champ fait partie des champs mappés
243
			// Si le champ fait partie des champs mappés
222
			$cle_champ = array_search($id_champ, $tableau_mappage[1]);
244
			$cle_champ = array_search($id_champ, $tableau_mappage[1]);
223
			if($cle_champ) {
245
			if($cle_champ) {
224
				// on ajoute sa clé correspondante dans l'annuaire mappé et sa valeur dans le tableau des champs mappés
246
				// on ajoute sa clé correspondante dans l'annuaire mappé et sa valeur dans le tableau des champs mappés
225
				$valeurs_mappees[$tableau_mappage[0][$cle_champ]] = $valeur;
247
				$valeurs_mappees[$tableau_mappage[0][$cle_champ]] = $valeur;
226
				// et on supprime sa valeur du tableau de valeurs pour ne pas la retrouver lors
248
				// et on supprime sa valeur du tableau de valeurs pour ne pas la retrouver lors
227
				// de l'instertion des métadonnées
249
				// de l'instertion des métadonnées
228
				unset($valeurs[$nom_champ]);
250
				unset($valeurs[$nom_champ]);
229
			}
251
			}
230
		}
252
		}
231
 
253
 
232
		// obtenir l'id du nouvel arrivant en faisant un select sur le mail qui doit être unique
254
		// obtenir l'id du nouvel arrivant en faisant un select sur le mail qui doit être unique
233
		$id_nouvel_inscrit = $this->ajouterNouvelleInscriptionDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $tableau_mappage[0]);
255
		$id_nouvel_inscrit = $this->ajouterNouvelleInscriptionDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $tableau_mappage[0]);
234
 
256
 
235
		// les champs de metadonnees arrivent avec un identifiant sous la forme type_xxx_id
257
		// les champs de metadonnees arrivent avec un identifiant sous la forme type_xxx_id
236
		foreach($valeurs as $nom_champ => $valeur) {
258
		foreach($valeurs as $nom_champ => $valeur) {
237
 
259
 
238
			// l'identifiant du champ est la dernière valeur du tableau
260
			// l'identifiant du champ est la dernière valeur du tableau
239
			$ids_champ = mb_split("_",$nom_champ);
261
			$ids_champ = mb_split("_",$nom_champ);
240
			$id_champ = $ids_champ[count($ids_champ) - 1];
262
			$id_champ = $ids_champ[count($ids_champ) - 1];
241
 
263
 
242
			// Si l'insertion dans la base a réussi
264
			// Si l'insertion dans la base a réussi
243
			if($this->MetadonneeModele->ajouterNouvelleValeurMetadonnee($id_champ,$id_nouvel_inscrit,$valeur)) {
265
			if($this->MetadonneeModele->ajouterNouvelleValeurMetadonnee($id_champ,$id_nouvel_inscrit,$valeur)) {
244
				// on continue
266
				// on continue
245
			} else {
267
			} else {
246
 
268
 
247
				// Si une des insertions échoue, on supprime les méta valeurs déjà entrées.
269
				// Si une des insertions échoue, on supprime les méta valeurs déjà entrées.
248
				$this->MetadonneeModele->supprimerValeursMetadonneesParIdEnregistrementLie($id_nouvel_inscrit);
270
				$this->MetadonneeModele->supprimerValeursMetadonneesParIdEnregistrementLie($id_nouvel_inscrit);
249
				return false;
271
				return false;
250
			}
272
			}
251
		}
273
		}
252
 
274
 
253
		//TODO: gérer le cas de spip et de wikini par un multimapping des champs
275
		//TODO: gérer le cas de spip et de wikini par un multimapping des champs
254
		//TODO: voir openid
276
		//TODO: voir openid
255
 
277
 
256
		// Si tout a réussi on supprime les données d'inscription temporaire
278
		// Si tout a réussi on supprime les données d'inscription temporaire
257
		$this->AnnuaireModele->supprimerDonneesInscriptionTemporaire($identifiant);
279
		$this->AnnuaireModele->supprimerDonneesInscriptionTemporaire($identifiant);
258
 
280
 
259
		// TODO: renvoyer l'utilisateur sur sa fiche
281
		// TODO: renvoyer l'utilisateur sur sa fiche
260
		return true;
282
		return true;
261
	}
283
	}
262
 
284
 
263
	/**
285
	/**
264
	 * Ajoute un nouvel inscrit dans l'annuaire mappé donné en paramètre.
286
	 * Ajoute un nouvel inscrit dans l'annuaire mappé donné en paramètre.
265
	 * En cas de succès, renvoie l'identifiant du nouvel inscrit qui sera
287
	 * En cas de succès, renvoie l'identifiant du nouvel inscrit qui sera
266
	 * utilisé pour insérer les métadonnées liées
288
	 * utilisé pour insérer les métadonnées liées
267
	 *
289
	 *
268
	 * @param int $id_annuaire identifiant de l'annuaire auquel sera lié le nouvel inscrit
290
	 * @param int $id_annuaire identifiant de l'annuaire auquel sera lié le nouvel inscrit
269
	 * @param Array $valeurs_mappees Tableau contenant les valeurs à insérer et ayant comme clés des noms de colonnes
291
	 * @param Array $valeurs_mappees Tableau contenant les valeurs à insérer et ayant comme clés des noms de colonnes
270
	 * @param Array $noms_champs Tableau contenant les noms des champs à insérer
292
	 * @param Array $noms_champs Tableau contenant les noms des champs à insérer
271
	 * @return int l'identifiant unique du nouvel inscrit
293
	 * @return int l'identifiant unique du nouvel inscrit
272
	 */
294
	 */
273
	public function ajouterNouvelleInscriptionDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $noms_champs) {
295
	public function ajouterNouvelleInscriptionDansAnnuaireMappe($id_annuaire,$valeurs_mappees, $noms_champs) {
274
 
296
 
275
		$this->chargerModele('AnnuaireModele');
297
		$this->chargerModele('AnnuaireModele');
276
		$resultat = $this->AnnuaireModele->ajouterDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $noms_champs);
298
		$resultat = $this->AnnuaireModele->ajouterDansAnnuaireMappe($id_annuaire, $valeurs_mappees, $noms_champs);
277
 
299
 
278
		return $resultat;
300
		return $resultat;
279
	}
301
	}
280
 
302
 
281
	/**
303
	/**
282
	 * Affiche la fiche principale d'un utilisateur
304
	 * Affiche la fiche principale d'un utilisateur
283
	 * @param int $id_annuaire l'identifiant de l'annuaire
305
	 * @param int $id_annuaire l'identifiant de l'annuaire
284
	 * @param int $id_utilisateur l'identifiant de l'utilisateur
306
	 * @param int $id_utilisateur l'identifiant de l'utilisateur
285
	 * @return string la vue contenant la fiche utilisateur
307
	 * @return string la vue contenant la fiche utilisateur
286
	 */
308
	 */
287
	public function afficherFicheUtilisateur($id_annuaire, $id_utilisateur) {
309
	public function afficherFicheUtilisateur($id_annuaire, $id_utilisateur) {
288
 
310
 
289
		$this->chargerModele('AnnuaireModele');
311
		$this->chargerModele('AnnuaireModele');
290
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
312
		$tableau_mappage = $this->obtenirChampsMappageAnnuaire($id_annuaire);
291
		$tableau_valeurs = $this->AnnuaireModele->obtenirValeursUtilisateur($id_annuaire, $id_utilisateur,$tableau_mappage[0]);
313
		$tableau_valeurs = $this->AnnuaireModele->obtenirValeursUtilisateur($id_annuaire, $id_utilisateur,$tableau_mappage[0]);
292
 
314
 
293
		// pour le moment on considère que les champs de mappage ne sont pas des valeurs d'ontologies
315
		// pour le moment on considère que les champs de mappage ne sont pas des valeurs d'ontologies
294
		// stockées dans la table ontologie
316
		// stockées dans la table ontologie
295
		foreach($tableau_mappage[0] as $cle => $nom_champ) {
317
		foreach($tableau_mappage[0] as $cle => $nom_champ) {
296
			$valeur = $tableau_valeurs[$nom_champ] ;
318
			$valeur = $tableau_valeurs[$nom_champ] ;
297
			$tableau_valeurs[$cle] = $valeur;
319
			$tableau_valeurs[$cle] = $valeur;
298
			unset($tableau_valeurs[$nom_champ]);
320
			unset($tableau_valeurs[$nom_champ]);
299
		}
321
		}
300
 
-
 
301
		//print_r($tableau_valeurs);
-
 
302
 
322
 
303
		$this->chargerModele('MetadonneeModele');
323
		$this->chargerModele('MetadonneeModele');
304
		$champs_metadonnees= $this->MetadonneeModele->chargerListeValeursMetadonneesUtilisateur($id_annuaire, $id_utilisateur);
324
		$champs_metadonnees= $this->MetadonneeModele->chargerListeValeursMetadonneesUtilisateur($id_annuaire, $id_utilisateur);
305
 
325
 
306
		$donnees['champs'] =  array_merge($tableau_valeurs, $champs_metadonnees);
326
		$donnees['champs'] =  array_merge($tableau_valeurs, $champs_metadonnees);
307
		$this->chargerVue('annuaire_tela_inscrits_fiche',$donnees);
-
 
-
 
327
 
-
 
328
		$annuaire_inscrits = $this->getVue(config::get('chemin_squelettes_fiches').'annuaire_tela_inscrits_fiche',$donnees);
308
 
329
 
309
		return $this->annuaire_tela_inscrits_fiche;
330
		return $annuaire_inscrits;
310
	}
331
	}
311
 
332
 
312
	/**
333
	/**
313
	 * En cas de tentative d'inscription, envoie un mail contenant un lien de confirmation à l'utilisateur
334
	 * En cas de tentative d'inscription, envoie un mail contenant un lien de confirmation à l'utilisateur
314
	 * @param string $adresse_mail adresse mail
335
	 * @param string $adresse_mail adresse mail
315
	 * @param string $nom nom
336
	 * @param string $nom nom
316
	 * @param string $prenom prénom
337
	 * @param string $prenom prénom
317
	 * @param string $code_confirmation_inscription code de confirmation à inclure dans le mail
338
	 * @param string $code_confirmation_inscription code de confirmation à inclure dans le mail
318
	 *
339
	 *
319
	 * @return boolean le succès ou l'échec de l'envoi du mail
340
	 * @return boolean le succès ou l'échec de l'envoi du mail
320
	 */
341
	 */
321
	public function envoyerMailConfirmationInscription($adresse_mail, $nom, $prenom, $code_confirmation_inscription) {
342
	public function envoyerMailConfirmationInscription($adresse_mail, $nom, $prenom, $code_confirmation_inscription) {
322
 
343
 
323
		$base_url = clone(Registre::getInstance()->get('base_url_application'));
344
		$base_url = clone(Registre::getInstance()->get('base_url_application'));
324
 
345
 
325
		$base_url->setVariableRequete('m','annuaire_inscription_confirmation');
346
		$base_url->setVariableRequete('m','annuaire_inscription_confirmation');
326
		$base_url->setVariableRequete('id',$code_confirmation_inscription);
347
		$base_url->setVariableRequete('id',$code_confirmation_inscription);
327
 
348
 
328
		$donnees = array('nom' => $nom, 'prenom' => $prenom, 'lien_confirmation_inscription' => $base_url->getURL());
349
		$donnees = array('nom' => $nom, 'prenom' => $prenom, 'lien_confirmation_inscription' => $base_url->getURL());
329
		$contenu_mail = $this->getVue('mail_confirmation_inscription',$donnees);
350
		$contenu_mail = $this->getVue(config::get('chemin_squelettes_mails').'mail_confirmation_inscription',$donnees);
-
 
351
 
-
 
352
		 // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
-
 
353
	     $entetes  = 'MIME-Version: 1.0' . "\r\n";
-
 
354
	     $entetes .= 'Content-type: text/html; charset='.Config::get('appli_encodage'). "\r\n";
-
 
355
	     // En-têtes additionnels
-
 
356
	     $entetes .= 'To: '.$adresse_mail."\r\n";
-
 
357
	     $entetes .= 'From: '.Config::get('adresse_mail_annuaire')."\r\n";
330
 
358
 
331
		return mail($adresse_mail,'Inscription au site Tela Botanica',$contenu_mail);
359
		return mail($adresse_mail,'Inscription au site Tela Botanica',$contenu_mail, $entetes);
332
 
360
 
333
	}
361
	}
334
 
362
 
335
	/**
363
	/**
336
	 * Insère les données dans la table d'inscription temporaire et crée un code de confirmation (à insérer dans le mail)
364
	 * Insère les données dans la table d'inscription temporaire et crée un code de confirmation (à insérer dans le mail)
337
	 * @param Array $valeurs les valeurs à insérer
365
	 * @param Array $valeurs les valeurs à insérer
338
	 */
366
	 */
339
	private function InsererDansTableTemporaireEtcreerCodeConfirmationInscription($valeurs) {
367
	private function InsererDansTableTemporaireEtCreerCodeConfirmationInscription($valeurs) {
340
		// Le code de confirmation est constitué des 8 premiers caractères de l'identifiant de session
368
		// Le code de confirmation est constitué des 8 premiers caractères de l'identifiant de session
341
		$code_confirmation = substr(session_id(), 0, 8) ;
369
		$code_confirmation = substr(session_id(), 0, 8) ;
342
 
370
 
343
		$this->chargerModele('AnnuaireModele');
371
		$this->chargerModele('AnnuaireModele');
344
 
372
 
345
		if(!$this->AnnuaireModele->ajouterNouvelleInscriptionTemporaire($code_confirmation, $valeurs)) {
373
		if(!$this->AnnuaireModele->ajouterNouvelleInscriptionTemporaire($code_confirmation, $valeurs)) {
346
			return false;
374
			return false;
347
		}
375
		}
348
 
376
 
349
		return $code_confirmation;
377
		return $code_confirmation;
350
	}
378
	}
351
 
379
 
352
 
380
 
353
/**--------------------------- Fonctions de vérification et de correspondance des champs --------------------*/
381
/**--------------------------- Fonctions de vérification et de correspondance des champs --------------------*/
354
 
382
 
355
	/**
383
	/**
356
	 * Renvoie les champs de mappage correspondant à un annuaire donné
384
	 * Renvoie les champs de mappage correspondant à un annuaire donné
357
	 * @param int $id_annuaire l'indentifant de l'annuaire pour lequel on veut ces informations
385
	 * @param int $id_annuaire l'indentifant de l'annuaire pour lequel on veut ces informations
358
	 * @return Array un tableau de mappage des champs
386
	 * @return Array un tableau de mappage des champs
359
	 *
387
	 *
360
	 */
388
	 */
361
	private function obtenirChampsMappageAnnuaire($id_annuaire) {
389
	private function obtenirChampsMappageAnnuaire($id_annuaire) {
362
 
390
 
363
		$tableau_mappage = array();
391
		$tableau_mappage = array();
364
 
392
 
365
		$tableau_mappage[0]['champ_id'] = 'U_ID';
393
		$tableau_mappage[0]['champ_id'] = 'U_ID';
366
		$tableau_mappage[0]['champ_mail'] = 'U_MAIL';
394
		$tableau_mappage[0]['champ_mail'] = 'U_MAIL';
367
		$tableau_mappage[0]['champ_nom'] = 'U_NAME';
395
		$tableau_mappage[0]['champ_nom'] = 'U_NAME';
368
		$tableau_mappage[0]['champ_prenom'] = 'U_SURNAME';
396
		$tableau_mappage[0]['champ_prenom'] = 'U_SURNAME';
369
		$tableau_mappage[0]['champ_pass'] = 'U_PASSWD';
397
		$tableau_mappage[0]['champ_pass'] = 'U_PASSWD';
370
 
398
 
371
		//$tableau_mappage[1]['champ_id'] = 'U_ID';
399
		//$tableau_mappage[1]['champ_id'] = 'U_ID';
372
		$tableau_mappage[1]['champ_mail'] = '16';
400
		$tableau_mappage[1]['champ_mail'] = '16';
373
		$tableau_mappage[1]['champ_nom'] = '1';
401
		$tableau_mappage[1]['champ_nom'] = '1';
374
		$tableau_mappage[1]['champ_prenom'] = '7';
402
		$tableau_mappage[1]['champ_prenom'] = '7';
375
		$tableau_mappage[1]['champ_pass'] = '11';
403
		$tableau_mappage[1]['champ_pass'] = '11';
376
 
404
 
377
		// TODO: voir comment stocker les correspondances de mappage
405
		// TODO: voir comment stocker les correspondances de mappage
378
		return $tableau_mappage;
406
		return $tableau_mappage;
379
	}
407
	}
380
 
408
 
381
	// TODO: utiliser les fonction de mappage définies plus haut
409
	// TODO: utiliser les fonction de mappage définies plus haut
382
	/**
410
	/**
383
	 * Vérifie que les valeurs pour des champs de mappage d'un annuaire donné
411
	 * Vérifie que les valeurs pour des champs de mappage d'un annuaire donné
384
	 * sont correctes
412
	 * sont correctes
385
	 * @param int $id_annuaire l'identifiant de l'annuaire
413
	 * @param int $id_annuaire l'identifiant de l'annuaire
386
	 * @param Array $valeurs les valeurs à vérifier
414
	 * @param Array $valeurs les valeurs à vérifier
387
	 */
415
	 */
388
	private function verifierErreursChamps($id_annuaire, $valeurs, $tableau_mappage) {
416
	private function verifierErreursChamps($id_annuaire, $valeurs, $tableau_mappage) {
389
 
417
 
390
		$erreurs = false;
418
		$erreurs = false;
391
 
-
 
392
		$champ_mail = '16';
-
 
393
		$champ_prenom = '7';
-
 
394
		$champ_nom = '1';
-
 
395
		$champ_pass = '11';
419
 
396
 
420
 
397
		if(!$this->mailValide($valeurs[$tableau_mappage[0]['champ_mail']])) {
421
		if(!$this->mailValide($valeurs['champ_mail'])) {
398
			$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'mail invalide';
422
			$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'mail invalide';
399
		}
423
		}
400
 
424
 
401
		if(trim($valeurs['pass_'.$tableau_mappage[0]['champ_mail']]) != ''
-
 
402
		|| trim($valeurs['pass_conf'.$tableau_mappage[1]['champ_mail']]) != '') {
-
 
403
 
425
		if(trim($valeurs['pass']) == ''
404
			if($valeurs['pass_'.$champ_pass] =! $valeurs['pass_conf_'.$champ_pass]) {
426
		|| $valeurs['pass_conf'] != $valeurs['pass']) {
405
				$erreurs['pass_'.$tableau_mappage[1]['champ_mail']] = 'mot de passe invalide';
-
 
406
			}
-
 
407
 
427
				$erreurs['pass_'.$tableau_mappage[1]['champ_pass']] = 'mot de passe invalide';
408
		}
428
		}
409
 
429
 
410
		if(trim($valeurs['text_'.$tableau_mappage[0]['champ_mail']]) == '') {
430
		if(trim($valeurs['champ_nom']) == '') {
411
			$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'le nom est obligatoire';
431
			$erreurs['text_'.$tableau_mappage[1]['champ_prenom']] = 'le nom est obligatoire';
412
		}
432
		}
413
 
433
 
414
		if(trim($valeurs['text_'.$tableau_mappage[0]['champ_mail']]) == '') {
434
		if(trim($valeurs['champ_prenom']) == '') {
415
			$erreurs['text_'.$tableau_mappage[1]['champ_mail']] = 'le prénom est obligatoire';
435
			$erreurs['text_'.$tableau_mappage[1]['champ_nom']] = 'le prénom est obligatoire';
416
		}
436
		}
417
 
437
 
418
		return $erreurs;
438
		return $erreurs;
419
	}
439
	}
-
 
440
 
-
 
441
	private function verifierEtRemplacerValeurChamp($type, $valeur) {
-
 
442
 
-
 
443
		$valeur_modifiee = $valeur;
-
 
444
 
-
 
445
		switch($type) {
-
 
446
 
-
 
447
			// cas du champ texte, à priori, rien de particulier
-
 
448
			case 'text':
-
 
449
				$valeur_modifiee = $valeur;
-
 
450
			break;
-
 
451
 
-
 
452
			// cas du champ password : on le crypte
-
 
453
			case 'password':
-
 
454
				$valeur_modifiee = $this->encrypterMotDePasse($valeur);
-
 
455
			break;
-
 
456
 
-
 
457
			// cas du champ checkbox
-
 
458
			case 'checkbox':
-
 
459
				// Si c'est un groupe checkbox, alors c'est une liste de checkbox liée à une ontologie
-
 
460
				if(is_array($valeur)) {
-
 
461
					// on stocke les valeurs d'ontologies liées au cases cochées
-
 
462
					$valeur_modifiee = implode(Config::get('separateur_metadonnee'), array_keys($valeur));
-
 
463
				} else {
-
 
464
					// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
-
 
465
					$valeur_modifiee = 1;
-
 
466
				}
-
 
467
			break;
-
 
468
 
-
 
469
			default:
-
 
470
				$valeur_modifiee = $valeur;
-
 
471
			break;
-
 
472
		}
-
 
473
 
-
 
474
		return $valeur_modifiee;
-
 
475
	}
420
 
476
 
421
	/**
477
	/**
422
	 * Renvoie vrai ou faux suivant qu'un mail donné en paramètre est syntaxiquement valide (ne vérifie pas l'existence
478
	 * Renvoie vrai ou faux suivant qu'un mail donné en paramètre est syntaxiquement valide (ne vérifie pas l'existence
423
	 * de l'adresse)
479
	 * de l'adresse)
424
	 * @param string $mail le mail à tester
480
	 * @param string $mail le mail à tester
425
	 * @return boolean vrai ou faux suivant que le mail est valide ou non
481
	 * @return boolean vrai ou faux suivant que le mail est valide ou non
426
	 */
482
	 */
427
	private function mailValide($mail) {
483
	private function mailValide($mail) {
428
 
484
 
429
		$regexp_mail = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$';
485
		$regexp_mail = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
-
 
486
		return preg_match($regexp_mail, $mail);
-
 
487
 
-
 
488
	}
-
 
489
 
-
 
490
	/**
-
 
491
	 * Renvoie un mot de passe crypté selon la fonction d'encryptage définie dans le fichier de configuration
-
 
492
	 * (si celle-ci n'existe pas on utilise une fonction par défaut)
-
 
493
	 * @param string $pass le mot de passe à encrypter
-
 
494
	 * @return string le mot de passe encrypté
-
 
495
	 */
-
 
496
	private function encrypterMotDePasse($pass) {
-
 
497
 
-
 
498
		$fonction = Config::get('pass_crypt_fonct');
-
 
499
 
-
 
500
		if(function_exists($fonction)) {
-
 
501
			return $fonction($pass);
-
 
502
		} else {
-
 
503
			return md5($pass);
-
 
504
		}
-
 
505
	}
-
 
506
 
-
 
507
	/**
-
 
508
	 * Renvoie le formulaire demandé s'il existe, sinon faux
-
 
509
	 * @param string $nom_formulaire le nom du formulaire demandé (qui est normalement le code d'un annuaire)
-
 
510
	 * @return boolean true si le formulaire existe, false sinon
-
 
511
	 */
-
 
512
	private function formulaireExiste($nom_formulaire) {
-
 
513
 
-
 
514
	  //echo Config::get('chemin_squelettes_formulaires').$nom_formulaire.'_inscription.tpl.html';
-
 
515
		return file_exists(Config::get('chemin_squelettes').Config::get('chemin_squelettes_formulaires').$nom_formulaire.'_inscription.tpl.html');
-
 
516
	}
-
 
517
 
-
 
518
	/**
-
 
519
	 * Renvoie un formulaire d'inscription minimal auto-généré
-
 
520
	 * @param string $donnees les donnée à inclure dans le formulaire
-
 
521
	 * @return string la vue contenant le formulaire généré
-
 
522
	 */
-
 
523
	private function GenererFormulaireInscription($donnees) {
-
 
524
 
-
 
525
		$formulaire_modele = $this->getVue(config::get('chemin_squelettes_formulaires').'inscription',$donnees);
-
 
526
 
-
 
527
		if($formulaire_modele) {
-
 
528
			return $formulaire_modele;
-
 
529
		} else {
-
 
530
			trigger_error("impossible de trouver le squelette de référence pour le formulaire");
-
 
531
		}
430
		return eregi($regexp_mail, $mail);
532
 
431
 
533
		return false;
432
	}
534
	}
433
}
535
}
434
?>
536
?>