Subversion Repositories Applications.framework

Rev

Rev 236 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
236 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Modèle d'accès à la base de données des administrateurs
5
 * de papyrus
6
 *
7
 * PHP Version 5
8
 *
9
 * @package   Framework
10
 * @category  Class
11
 * @author	aurelien <aurelien@tela-botanica.org>
12
 * @copyright 2009 Tela-Botanica
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
15
 * @version   SVN: $$Id: ListeAdmin.php 236 2010-11-23 12:31:08Z jpm $$
16
 * @link	  /doc/framework/
17
 *
18
 */
19
class listeAdmin extends Modele {
20
 
21
	private $config = array();
22
 
23
	/**
24
	 * Charge la liste complète des administrateurs
25
	 * return array un tableau contenant des objets d'informations sur les administrateurs
26
	 * @return array un tableau d'objets contenant la liste des administrateurs
27
	 */
28
   public function chargerAdmin() {
29
		$requete = 	'SELECT * '.
30
					'FROM  gen_annuaire '.
31
					'ORDER BY ga_id_administrateur';
32
		$resultat = $this->requeteTous($requete);
33
		$admin = array();
34
		if ($resultat !== false) {
35
			foreach ($resultat as $ligne) {
36
				if ($ligne['ga_id_administrateur'] != 0) {
37
					$admin[] = $ligne;
38
				}
39
			}
40
		}
41
		return $admin;
42
	}
43
 
44
	/**
45
	 * Charge les informations liées à un administrateur
46
	 * grâce à son id
47
	 * @param  int   l'identifiant de l'administrateur.
48
	 * @return object un object contenant les informations de l'administrateur demandé
49
	 */
50
	public function loadDetailsAdmin($id) {
51
		$requete = 	'SELECT * '.
52
					'FROM  gen_annuaire '.
53
					"WHERE ga_id_administrateur = '$id' ";
54
		$resultat = $this->requete($requete);
55
 
56
		$admin = array();
57
		foreach ($resultat->fetchAll() as $ligne) {
58
			$admin = $ligne;
59
		}
60
		return $admin;
61
	}
62
 
63
 
64
	/**
65
	 * Modifie les informations liées à un administrateur dans la base de données
66
	 * Si le mot de passe n'est pas renseigné, il n'est pas changé
67
	 * @param  int   identifiant de l'admiistrateur
68
	 * @param  string   nom
69
	 * @param  string   prenom
70
	 * @param  string   le mail
71
	 * @param  string   le code de langue
72
	 * @param  string   le mot de passe (optionnel)
73
	 * @param  string   la confirmation du mot de passe (optionnel)
74
	 * @return array	un tableau contenant les erreurs s'il y en a, vide sinon
75
	 */
76
	function modifDetailsAdmin($id, $nom, $prenom, $mail, $lang, $pass = '', $pass_conf = '') {
77
		$res = array();
78
		$nb_admin = 0;
79
 
80
		if (!$this->validerMail($mail)) {
81
			$res['mail'] = 'Adresse mail invalide';
82
		}
83
 
84
		$query_verif_mail = 'SELECT COUNT(*) AS nb_admin '.
85
							'FROM gen_annuaire '.
86
							"WHERE ga_mail = '{$this->proteger($mail)}'".
87
							"	AND ga_id_administrateur != $id ";
88
		if ($res_nb = $this->requete($query_verif_mail)) {
89
			$ligne = $res_nb->fetch();
90
			$nb_admin = $ligne['nb_admin'];
91
		} else {
92
			$res['bdd'] = 'Erreur dans la base de données';
93
			return $res;
94
		}
95
 
96
		if($nb_admin != 0) {
97
			$res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur';
98
		}
99
 
100
		$query = 'UPDATE gen_annuaire SET ga_ce_i18n='.$this->proteger($lang).', ga_nom='.$this->proteger($nom).',ga_prenom='.
101
		$this->proteger($prenom).',ga_mail='.$this->proteger($mail);
102
 
103
		// si on a entré quelque chose dans les deux champs de mot de passe
104
		if($pass != '' || $pass_conf != '') {
105
			// on vérifie si les deux concordent
106
			if($pass == $pass_conf) {
107
				// si oui, on les modifie
108
				$query .= ',ga_mot_de_passe='.$this->proteger(md5($pass));
109
			} else {
110
				// si non, on notifiera l'utilisateur
111
				$res['pass'] = 'mot de passe invalide';
112
			}
113
		}
114
 
115
		$query .= ' WHERE ga_id_administrateur='.$id;
116
 
117
		if(count($res) != 0) {
118
			return $res;
119
		}
120
 
121
		if($req_maj = $this->requete($query)) {
122
 
123
		} else {
124
			$res['bdd'] = 'Erreur de la requête dans la base de données';
125
		}
126
 
127
		return $res;
128
	}
129
 
130
	/**
131
	 * Supprime un administrateur ayant un id donné
132
	 * @param  int   l'identifiant de l'administrateur
133
	 * @return array	un tableau contenant les erreurs s'il y en a, vide sinon
134
	 */
135
	function suppAdmin($id) {
136
 
137
		$nb_admin = 0;
138
		$res = '';
139
 
140
		$query_verif = 'SELECT COUNT(*) AS nb_admin FROM gen_annuaire';
141
		if($res_nb = $this->requete($query_verif)) {
142
			$ligne = $res_nb->fetch();
143
			$nb_admin = $ligne['nb_admin'];
144
		} else {
145
			$res = 'Erreur dans la base de donn�es';
146
			return $res ;
147
		}
148
 
149
		if($nb_admin == 2) {
150
			$res = 'Impossible de supprimer le dernier administrateur';
151
			return $res ;
152
		}
153
 
154
		$query = 'DELETE FROM gen_annuaire WHERE ga_id_administrateur='.$id;
155
 
156
		if($res_supp = $this->requete($query)) {
157
			return $res ;
158
		} else {
159
			$res = 'Erreur dans la base de données' ;
160
			return $res ;
161
		}
162
	}
163
 
164
	/**
165
	 * Ajoute un administrateur dans la base de données
166
	 * @param  string   nom
167
	 * @param  string   prenom
168
	 * @param  string   le mail
169
	 * @param  string   le code de langue
170
	 * @param  string   le mot de passe
171
	 * @param  string   la confirmation du mot de passe
172
	 * @return array	un tableau contenant les erreurs s'il y en a, vide sinon
173
	 */
174
	function ajoutAdmin($nom, $prenom, $mail, $lang, $pass, $pass_conf) {
175
		$nouvel_id = 0;
176
		$nb_admin = 0;
177
		$res = array();
178
Debug::printr('pppppppppp');
179
		if (!$this->validerMail($mail)) {
180
			$res['mail'] = 'Adresse mail invalide.';
181
		}
182
 
183
		$query_verif_mail =	'SELECT COUNT(*) AS nb_admin '.
184
								'FROM gen_annuaire '.
185
								'WHERE ga_mail = '.$this->proteger($mail);
186
		if ($res_nb = $this->requete($query_verif_mail)) {
187
			$ligne = $res_nb->fetch();
188
			$nb_admin = $ligne['nb_admin'];
189
		} else {
190
			$res['bdd'] = 'Erreur dans la base de données.';
191
			return $res;
192
		}
193
		if ($nb_admin != 0) {
194
			$res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur.';
195
		}
196
 
197
		if ($pass != '' || $pass_conf != '') {
198
			// on vérifie si les deux concordent
199
			if ($pass != $pass_conf) {
200
				// si non, on notifiera l'utilisateur
201
				$res['pass'] = 'mot de passe invalide';
202
			}
203
		}
204
 
205
		$query =	'SELECT MAX(ga_id_administrateur) as nouvel_id '.
206
					'FROM gen_annuaire';
207
		if ($res_requete_id = $this->requete($query)) {
208
			$ligne = $res_requete_id->fetch() ;
209
			$nouvel_id = $ligne['nouvel_id'] + 1;
210
		} else {
211
			return $res ;
212
		}
213
 
214
		$query = 	'INSERT INTO gen_annuaire '.
215
					'VALUES ('.$nouvel_id.','.$this->proteger($lang).','.
216
					$this->proteger($nom).','.$this->proteger($prenom).','.$this->proteger(md5($pass)).','.
217
					$this->proteger($mail).')';
218
 
219
		if (count($res) != 0) {
220
			return $res;
221
		}
222
 
223
		if (!$res_ajout = $this->requete($query)) {
224
			$res['bdd'] = 'Erreur de la requête dans la base de données';
225
		}
226
 
227
		return $res;
228
	}
229
 
230
	/**
231
	 * Fonction qui prend une chaine en paramètre et renvoie vrai
232
	 * si elle constitue un email syntaxiquement valide, faux sinon.
233
	 * @param string le mail à valider
234
	 * @return bool true si le mail est valide, false sinon
235
	 */
236
	function validerMail($mail) {
237
		$atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; // Caractères autorisés avant l'arobase
238
		$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // Caractères autorisés après l'arobase (nom de domaine)
239
 
240
		$regex = '/^'.$atom.'+'. // Une ou plusieurs fois les caractères autorisés avant l'arobase
241
			'(\.'.$atom.'+)*'. // Suivis par zéro point ou plus, séparés par des caractères autorisés avant l'arobase
242
			'@'.// Suivis d'un arobase
243
			'('.$domain .'{1,63}\.)+'.// Suivis par 1 à 63 caractères autorisés pour le nom de domaine, séparés par des points
244
			$domain.'{2,63}$/i';// Suivi de 2 à 63 caractères autorisés pour le nom de domaine
245
 
246
		// Test de l'adresse e-mail
247
		if (preg_match($regex, $mail)) {
248
			return true;
249
		} else {
250
			return false;
251
		}
252
	}
253
}
254
?>