Subversion Repositories Applications.annuaire

Rev

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