Subversion Repositories Applications.framework

Rev

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