Subversion Repositories Applications.framework

Rev

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

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