Subversion Repositories Applications.framework

Rev

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

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