Subversion Repositories Applications.papyrus

Rev

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

Rev Author Line No. Line
2150 mathias 1
<?php
2
 
3
/**
4
 * Modèle d'accès à la base de données des administrateurs
5
 * de papyrus
6
 */
7
class listeAdmin extends Modele {
8
 
9
	var $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
	 */
16
	function chargerAdmin() {
17
 
18
		$query = 'SELECT * FROM  gen_annuaire ORDER BY ga_id_administrateur' ;
19
		$res = $this->requete($query) ;
20
		$admin = array() ;
21
		foreach ($res->fetchAll() as $ligne)
22
		{
23
			if($ligne['ga_id_administrateur'] != 0) {
24
				$admin[] = $ligne ;
25
			}
26
		}
27
 
28
		return $admin ;
29
	}
30
 
31
	/**
32
	 * Charge les informations liées à un administrateur
33
	 * grâce à son id
34
	 * @param  int   l'identifiant de l'administrateur.
35
	 * @return object un object contenant les informations de l'administrateur demandé
36
	 */
37
	function loadDetailsAdmin($id) {
38
 
39
		$query = 'SELECT * FROM  gen_annuaire where ga_id_administrateur="'.$id.'"' ;
40
		$res = $this->requete($query) ;
41
		$admin = array() ;
42
		foreach ($res->fetchAll() as $ligne) {
43
			$admin = $ligne ;
44
		}
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
 
64
		$res = array() ;
65
		$nb_admin = 0 ;
66
 
67
		if(!$this->validerMail($mail)) {
68
			$res['mail'] = 'Adresse mail invalide' ;
69
		}
70
 
71
		$query_verif_mail = 'SELECT COUNT(*) AS nb_admin FROM gen_annuaire WHERE ga_mail = '.$this->proteger($mail).' AND ga_id_administrateur !='.$id ;
72
		if($res_nb = $this->requete($query_verif_mail)) {
73
			$ligne = $res_nb->fetch();
74
			$nb_admin = $ligne['nb_admin'] ;
75
 
76
		} else {
77
			$res['bdd'] = 'Erreur dans la base de données' ;
78
			return $res ;
79
		}
80
 
81
		if($nb_admin != 0) {
82
			$res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur' ;
83
		}
84
 
85
		$query = 'UPDATE gen_annuaire SET ga_ce_i18n='.$this->proteger($lang).', ga_nom='.$this->proteger($nom).',ga_prenom='.
86
		$this->proteger($prenom).',ga_mail='.$this->proteger($mail) ;
87
 
88
		// si on a entré quelque chose dans les deux champs de mot de passe
89
		if($pass != '' || $pass_conf != '') {
90
			// on vérifie si les deux concordent
91
			if($pass == $pass_conf) {
92
				// si oui, on les modifie
93
				$query .= ',ga_mot_de_passe='.$this->proteger(md5($pass)) ;
94
			} else {
95
				// si non, on notifiera l'utilisateur
96
				$res['pass'] = 'mot de passe invalide' ;
97
			}
98
		}
99
 
100
		$query .= ' WHERE ga_id_administrateur='.$id ;
101
 
102
		if(count($res) != 0) {
103
			return $res ;
104
		}
105
 
106
		if($req_maj = $this->requete($query)) {
107
 
108
		} else {
109
			$res['bdd'] = 'Erreur de la requête dans la base de données' ;
110
		}
111
 
112
		return $res ;
113
 
114
	}
115
 
116
	/**
117
	 * Supprime un administrateur ayant un id donnée
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
 
228
		$atom   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // caractères autorisés avant l'arobase
229
		$domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
230
 
231
		$regex = '/^' . $atom . '+' .   // Une ou plusieurs fois les caractères autorisés avant l'arobase
232
		'(\.' . $atom . '+)*' .         // Suivis par zéro point ou plus
233
		                                // séparés par des caractères autorisés avant l'arobase
234
		'@' .                           // Suivis d'un arobase
235
		'(' . $domain . '{1,63}\.)+' .  // Suivis par 1 à 63 caractères autorisés pour le nom de domaine
236
		                                // séparés par des points
237
		$domain . '{2,63}$/i';          // Suivi de 2 à 63 caractères autorisés pour le nom de domaine
238
 
239
		// test de l'adresse e-mail
240
		if (preg_match($regex, $mail)) {
241
		    return true ;
242
		} else {
243
		    return false ;
244
		}
245
 
246
	}
247
 
248
}
249
 
2019 aurelien 250
?>