Subversion Repositories Applications.framework

Rev

Rev 120 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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