Subversion Repositories Applications.papyrus

Rev

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

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