Subversion Repositories Applications.annuaire

Rev

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

Rev Author Line No. Line
15 aurelien 1
<?php
2
/**
3
* PHP Version 5
4
*
5
* @category  PHP
6
* @package   annuaire
7
* @author    aurelien <aurelien@tela-botanica.org>
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
11
* @link      /doc/annuaire/
41 aurelien 12
*
15 aurelien 13
*/
14
 
41 aurelien 15
/**
16
 * Controleur chargé de la vérification des formulaire
17
 * Remplace aussi les valeurs lors des actions spéciales comme la modification du mail
18
 * (l'inscription à la lettre d'actu se fait aussi ici même si ça n'estp as totalement sa place)
19
 */
15 aurelien 20
class VerificationControleur extends Controleur {
21
 
22
	/**
41 aurelien 23
	 * Vérifie que les valeurs des champs de mappage et les valeurs obligatoires d'un annuaire donné
15 aurelien 24
	 * sont correctes
25
	 * @param int $id_annuaire l'identifiant de l'annuaire
26
	 * @param Array $valeurs les valeurs à vérifier
27
	 */
41 aurelien 28
	public function verifierErreursChampsSelonType($id_annuaire, $valeurs, $tableau_mappage) {
15 aurelien 29
 
30
		$erreurs = false;
31
 
32
		$this->chargerModele('AnnuaireModele');
41 aurelien 33
		$tableau_champs_obligatoire = $this->AnnuaireModele->obtenirChampsObligatoires($id_annuaire);
15 aurelien 34
 
41 aurelien 35
		foreach($valeurs as $id => $valeur_champ) {
15 aurelien 36
 
41 aurelien 37
			$type = $valeur_champ['type'];
38
			$valeur = $valeur_champ['valeur'];
39
			$condition = $valeur_champ['condition'];
15 aurelien 40
 
41 aurelien 41
			switch($type) {
42
 
43
				case 'text':
44
					if($this->estUnchampObligatoire($id, $tableau_champs_obligatoire) && trim($valeur) == '') {
45
						$erreurs[$id] = 'Ce champ est obligatoire';
46
					}
47
				break;
48
 
49
				case 'mail':
50
					if($this->estUnchampObligatoire($id, $tableau_champs_obligatoire) && trim($valeur) == '') {
51
						$erreurs[$id] = 'Le mail est obligatoire ';
52
					}
53
 
54
					if($this->estUnchampObligatoire($id, $tableau_champs_obligatoire) && !$this->mailValide($valeur)) {
55
						$erreurs[$id] .= 'Le mail est invalide ';
56
					}
57
 
58
					if($this->AnnuaireModele->utilisateurExisteParMail($id_annuaire, $valeur)) {
59
						$erreurs[$id] .= 'Cet email est déjà utilisé par quelqu\'un d\'autre ';
60
					}
61
				break;
62
 
63
				case 'password':
64
					if($this->estUnchampObligatoire($id, $tableau_champs_obligatoire) && trim($valeur) == ''
65
					|| $valeur != $condition) {
66
							$erreurs[$id] = 'Le mot de passe est invalide';
67
					}
68
				break;
69
 
70
				// cas du champ checkbox
71
				case 'checkbox':
72
					if($this->estUnchampObligatoire($id, $tableau_champs_obligatoire) && trim($condition) != 'on') {
73
						$erreurs[$id] = 'N\'oubliez pas de cocher cette case';
74
					}
75
				break;
76
 
77
				default:
78
					if($this->estUnchampObligatoire && trim($valeur['valeur']) == '') {
79
						$erreurs[$id] = 'Ce champ est obligatoire';
80
					}
81
				break;
82
			}
15 aurelien 83
		}
84
 
85
		return $erreurs;
86
	}
87
 
30 aurelien 88
	/**
89
	 * Vérifie les valeurs des champs pour la modification d'un formulaire
90
	 */
91
	public function verifierErreurChampModification($id_annuaire, $id_utilisateur, $type ,$valeur, $confirmation = false) {
15 aurelien 92
 
30 aurelien 93
		$retour = array(true,false);
15 aurelien 94
 
30 aurelien 95
		switch($type) {
96
			case 'mail':
97
				if(!$this->mailValide($valeur)) {
98
					$retour[0] = false;
99
					$retour[1] = 'mail invalide';
100
					break;
101
				}
15 aurelien 102
 
30 aurelien 103
				$this->chargerModele('AnnuaireModele');
104
				$ancien_mail = $this->AnnuaireModele->obtenirMailParId($id_annuaire,$id_utilisateur);
15 aurelien 105
 
30 aurelien 106
				if($ancien_mail != $valeur && $this->AnnuaireModele->utilisateurExisteParMail($id_annuaire, $valeur)) {
107
					$retour[0] = false;
108
					$retour[1] = 'cet email est déjà utilisé par quelqu\'un d\'autre';
109
				}
110
 
111
			break;
112
 
113
			case 'password':
114
 
115
				if(trim($valeur) != trim($confirmation)) {
116
					$retour[0] = false;
117
					$retour[1] = 'mot de passe invalide';
118
				}
15 aurelien 119
		}
120
 
30 aurelien 121
		return $retour;
15 aurelien 122
	}
123
 
124
	public function remplacerValeurChampPourInsertion($type, $valeur, $mail_utilisateur) {
125
 
126
		$valeur_modifiee = $valeur;
127
 
128
		switch($type) {
129
 
130
			// cas du champ texte, à priori, rien de particulier
131
			case 'text':
132
				$valeur_modifiee = $valeur;
133
			break;
134
 
135
			// cas du champ password : on le crypte
136
			case 'password':
137
				$valeur_modifiee = $this->encrypterMotDePasse($valeur);
138
			break;
139
 
140
			// cas du champ checkbox
141
			case 'checkbox':
142
				// Si c'est un groupe checkbox, alors c'est une liste de checkbox liée à une ontologie
143
				if(is_array($valeur)) {
144
					// on stocke les valeurs d'ontologies liées au cases cochées
145
					$valeur_modifiee = implode(Config::get('separateur_metadonnee'), array_keys($valeur));
146
 
147
				} else {
148
					if($valeur == 'on') {
149
						// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
150
						$valeur_modifiee = 1;
151
					} else {
152
						$valeur_modifiee = 0;
153
					}
154
				}
155
 
156
			break;
157
 
158
			case 'lettre':
159
					if($valeur == 'on') {
160
						// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
161
						$valeur_modifiee = 1;
162
						// Si c'est une inscription à la lettre d'actualité, on appelle la fonction d'inscription
163
						$lettre_controleur = new LettreControleur();
164
						$lettre_controleur->inscriptionLettreActualite($mail_utilisateur);
165
					} else {
166
						$valeur_modifiee = 0;
167
					}
30 aurelien 168
			break;
15 aurelien 169
 
170
			default:
171
				$valeur_modifiee = $valeur;
172
			break;
173
		}
174
 
175
		return $valeur_modifiee;
176
	}
177
 
30 aurelien 178
	public function remplacerValeurChampPourModification($id_annuaire, $id_utilisateur, $type, $valeur, $mail_utilisateur) {
15 aurelien 179
 
180
		$valeur_modifiee = $valeur;
181
 
182
		switch($type) {
183
 
184
			// cas du champ texte, à priori, rien de particulier
185
			case 'text':
186
				$valeur_modifiee = $valeur;
187
			break;
188
 
189
			// cas du champ password : on le crypte
190
			case 'password':
191
				$valeur_modifiee = $this->encrypterMotDePasse($valeur);
192
			break;
193
 
194
			// cas du champ checkbox
195
			case 'checkbox':
196
				// Si c'est un groupe checkbox, alors c'est une liste de checkbox liée à une ontologie
197
				if(is_array($valeur)) {
198
 
199
					// on stocke les valeurs d'ontologies liées au cases cochées
200
					$valeur_modifiee = implode(Config::get('separateur_metadonnee'), array_keys($valeur));
201
 
202
				} else {
203
					if($valeur == 'on') {
204
						// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
205
						$valeur_modifiee = 1;
206
					} else {
207
						$valeur_modifiee = 0;
208
					}
209
				}
210
 
211
			break;
212
 
213
			case 'lettre':
214
 
215
				// Si c'est une inscription à la lettre d'actualité, on appelle la fonction d'inscription
216
				$lettre_controleur = new LettreControleur();
217
 
30 aurelien 218
				$this->chargerModele('AnnuaireModele');
219
				$ancien_mail = $this->AnnuaireModele->obtenirMailParId($id_annuaire, $id_utilisateur);
220
 
221
				$changement_mail = false;
222
 
223
				if($ancien_mail != $mail_utilisateur) {
224
					$changement_mail = true;
225
				}
226
 
15 aurelien 227
				if($valeur == 'on') {
228
					// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
229
					$valeur_modifiee = 1;
30 aurelien 230
 
231
					if($changement_mail) {
232
						$lettre_controleur->ModificationInscriptionLettreActualite($ancien_mail, $mail_utilisateur);
233
					} else {
234
						$lettre_controleur->inscriptionLettreActualite($mail_utilisateur);
235
					}
236
 
15 aurelien 237
				} else {
238
					$valeur_modifiee = 0;
30 aurelien 239
					$mail_a_desinscrire = $mail_utilisateur;
240
					if($changement_mail) {
241
						$mail_a_desinscrire = $ancien_mail;
242
					}
243
					$lettre_controleur->desinscriptionLettreActualite($mail_a_desinscrire);
15 aurelien 244
				}
245
			break;
246
 
247
			default:
248
				$valeur_modifiee = $valeur;
249
			break;
250
		}
251
 
252
		return $valeur_modifiee;
253
	}
254
 
255
	public function verifierEtRemplacerValeurChampPourAffichage($type, $valeur, $id_annuaire) {
256
 
257
		if(!$type) {
258
			$valeur_modifiee = array();
259
 
260
			$valeur_modifiee['amv_type'] = 'champ_annuaire';
261
			$valeur_modifiee['amv_valeur_affichage'] = $valeur;
262
 
263
		} else {
264
 
265
			$valeur_modifiee = $valeur;
266
 
267
			switch($type) {
268
 
269
				// cas du champ texte, à priori, rien de particulier
270
				case 'text':
271
					$valeur_modifiee['amv_valeur_affichage'] = $valeur['amv_valeur'];
272
				break;
273
 
274
				// cas du champ checkbox
275
				case 'checkbox':
276
					// si c'est un groupe checkbox, alors c'est une liste de checkbox liée à une ontologie
277
					if(isset($valeur['amo_nom'])) {
278
						if(is_array($valeur['amo_nom']) && count($valeur['amo_nom']) > 0) {
279
						// on stocke les valeurs d'ontologies liées au cases cochées
280
							$valeur_modifiee['amv_valeur_affichage'] = implode(', ', $valeur['amo_nom']);
281
						} else {
282
							$valeur_modifiee['amv_valeur_affichage'] = $valeur['amo_nom'];
283
						}
284
					} else {
285
						// sinon on stocke 1 pour indique que la case est cochée (cas de la checkbox oui/non)
286
						if($valeur_modifiee == 1) {
287
							$valeur_modifiee['amv_valeur_affichage'] = 'oui';
288
						} else {
289
							$valeur_modifiee['amv_valeur_affichage'] = 'non';
290
						}
291
					}
292
				break;
293
 
294
				case 'select':
295
					$valeur_modifiee['amv_valeur_affichage'] = $valeur['amo_nom'];
296
				break;
297
 
298
				case 'radio':
299
					$valeur_modifiee['amv_valeur_affichage'] = $valeur['amo_nom'];
300
				break;
301
 
302
				case 'image':
303
					// si c'est une image, on recherche son url véritable à partir de l'id donnée en paramètre
304
					if(isset($valeur['amv_valeur']) && $valeur['amv_valeur'] != '') {
305
						$this->chargerModele('ImageModele');
306
						$valeur_modifiee['amv_valeur_affichage'] = $this->ImageModele->obtenirEmplacementFichierParId($valeur['amv_valeur'],$id_annuaire, 'S');
307
					}
308
				break;
309
 
310
				// cas du champ lettre
311
				case 'lettre':
312
 
313
					// on affiche oui ou non
314
					if($valeur_modifiee['amv_valeur'] == 1) {
315
						$valeur_modifiee['amv_valeur_affichage'] = 'oui';
316
					} else {
317
						$valeur_modifiee['amv_valeur_affichage'] = 'non';
318
					}
319
				break;
320
 
321
				default:
322
					$valeur_modifiee['amv_valeur_affichage'] = $valeur['amv_valeur'];
323
				break;
324
			}
325
		}
326
 
327
		return $valeur_modifiee;
328
	}
329
 
330
	/**
331
	 * Renvoie vrai ou faux suivant qu'un mail donné en paramètre est syntaxiquement valide (ne vérifie pas l'existence
332
	 * de l'adresse)
333
	 * @param string $mail le mail à tester
334
	 * @return boolean vrai ou faux suivant que le mail est valide ou non
335
	 */
336
	public function mailValide($mail) {
337
 
338
		$regexp_mail = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
339
		return preg_match($regexp_mail, $mail);
340
 
341
	}
342
 
343
	/**
344
	 * Renvoie un mot de passe crypté selon la fonction d'encryptage définie dans le fichier de configuration
345
	 * (si celle-ci n'existe pas on utilise une fonction par défaut)
346
	 * @param string $pass le mot de passe à encrypter
347
	 * @return string le mot de passe encrypté
348
	 */
349
	public function encrypterMotDePasse($pass) {
350
 
351
		$fonction = Config::get('pass_crypt_fonct');
352
 
353
		if(function_exists($fonction)) {
354
			return $fonction($pass);
355
		} else {
356
			return md5($pass);
357
		}
358
	}
41 aurelien 359
 
360
	private function estUnchampObligatoire($id_champ, $champs_obligatoire) {
361
 
362
		return in_array($id_champ, $champs_obligatoire) || in_array($id_champ, array_keys($champs_obligatoire));
363
	}
15 aurelien 364
}
365
?>