Subversion Repositories Applications.framework

Rev

Rev 88 | 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
/**
105 aurelien 4
 * Modèle d'accès à la base de données des administrateurs
5 aurelien 5
 * de papyrus
6
 */
7
class listeAdmin extends Modele {
8
 
83 jpm 9
    private $config = array();
5 aurelien 10
 
11
    /**
105 aurelien 12
     * Charge la liste complète des administrateurs
5 aurelien 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() {
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;
5 aurelien 25
            }
26
        }
83 jpm 27
        return $admin;
5 aurelien 28
    }
29
 
30
    /**
105 aurelien 31
     * Charge les informations liées à un administrateur
32
     * grâce à son id
5 aurelien 33
     * @param  int   l'identifiant de l'administrateur.
105 aurelien 34
     * @return object un object contenant les informations de l'administrateur demandé
5 aurelien 35
     */
83 jpm 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;
5 aurelien 45
        }
83 jpm 46
        return $admin;
5 aurelien 47
    }
48
 
49
 
50
    /**
105 aurelien 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é
5 aurelien 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
     */
83 jpm 62
    function modifDetailsAdmin($id, $nom, $prenom, $mail, $lang, $pass = '', $pass_conf = '') {
63
        $res = array();
64
        $nb_admin = 0;
5 aurelien 65
 
83 jpm 66
        if (!$this->validerMail($mail)) {
67
            $res['mail'] = 'Adresse mail invalide';
5 aurelien 68
        }
69
 
83 jpm 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)) {
5 aurelien 75
            $ligne = $res_nb->fetch();
76
            $nb_admin = $ligne['nb_admin'] ;
77
        } else {
105 aurelien 78
            $res['bdd'] = 'Erreur dans la base de données' ;
83 jpm 79
            return $res;
5 aurelien 80
        }
81
 
82
        if($nb_admin != 0) {
105 aurelien 83
            $res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur' ;
5 aurelien 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
 
105 aurelien 89
        // si on a entré quelque chose dans les deux champs de mot de passe
5 aurelien 90
        if($pass != '' || $pass_conf != '') {
105 aurelien 91
            // on vérifie si les deux concordent
5 aurelien 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 {
105 aurelien 110
            $res['bdd'] = 'Erreur de la requête dans la base de données' ;
5 aurelien 111
        }
112
 
83 jpm 113
        return $res;
5 aurelien 114
    }
115
 
116
    /**
105 aurelien 117
     * Supprime un administrateur ayant un id donné
5 aurelien 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 {
105 aurelien 131
            $res = 'Erreur dans la base de donn�es' ;
5 aurelien 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 {
105 aurelien 145
            $res = 'Erreur dans la base de données' ;
5 aurelien 146
            return $res ;
147
        }
148
    }
149
 
150
    /**
105 aurelien 151
     * Ajoute un administrateur dans la base de données
5 aurelien 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 {
105 aurelien 175
            $res['bdd'] = 'Erreur dans la base de données' ;
5 aurelien 176
            return $res ;
177
        }
178
 
179
        if($nb_admin != 0) {
105 aurelien 180
            $res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur' ;
5 aurelien 181
        }
182
 
183
        if($pass != '' || $pass_conf != '') {
105 aurelien 184
            // on vérifie si les deux concordent
5 aurelien 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 {
105 aurelien 214
            $res['bdd'] = 'Erreur de la requête dans la base de données' ;
5 aurelien 215
        }
216
 
217
        return $res ;
218
    }
219
 
220
    /**
105 aurelien 221
     * Fonction qui prend une chaine en paramètre et renvoie vrai
5 aurelien 222
     * si elle constitue un email syntaxiquement valide, faux sinon.
105 aurelien 223
     * @param string le mail à valider
5 aurelien 224
     * @return bool true si le mail est valide, false sinon
225
     */
226
    function validerMail($mail) {
105 aurelien 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)
5 aurelien 229
 
105 aurelien 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
83 jpm 232
        	'@'.// Suivis d'un arobase
105 aurelien 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
5 aurelien 235
 
83 jpm 236
        // Test de l'adresse e-mail
5 aurelien 237
        if (preg_match($regex, $mail)) {
83 jpm 238
            return true;
5 aurelien 239
        } else {
83 jpm 240
            return false;
5 aurelien 241
        }
242
    }
243
}
244
?>