Subversion Repositories Applications.papyrus

Rev

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