Subversion Repositories Applications.framework

Rev

Rev 236 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Modèle d'accès à la base de données des administrateurs
 * de papyrus
 *
 * PHP Version 5
 *
 * @package   Framework
 * @category  Class
 * @author      aurelien <aurelien@tela-botanica.org>
 * @copyright 2009 Tela-Botanica
 * @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 * @license   http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 * @version   SVN: $$Id: ListeAdmin.php 236 2010-11-23 12:31:08Z jpm $$
 * @link          /doc/framework/
 *
 */
class listeAdmin extends Modele {

        private $config = array();

        /**
         * Charge la liste complète des administrateurs
         * return array un tableau contenant des objets d'informations sur les administrateurs
         * @return array un tableau d'objets contenant la liste des administrateurs
         */
   public function chargerAdmin() {
                $requete =      'SELECT * '.
                                        'FROM  gen_annuaire '.
                                        'ORDER BY ga_id_administrateur';
                $resultat = $this->requeteTous($requete);
                $admin = array();
                if ($resultat !== false) {
                        foreach ($resultat as $ligne) {
                                if ($ligne['ga_id_administrateur'] != 0) {
                                        $admin[] = $ligne;
                                }
                        }
                }
                return $admin;
        }

        /**
         * Charge les informations liées à un administrateur
         * grâce à son id
         * @param  int   l'identifiant de l'administrateur.
         * @return object un object contenant les informations de l'administrateur demandé
         */
        public function loadDetailsAdmin($id) {
                $requete =      'SELECT * '.
                                        'FROM  gen_annuaire '.
                                        "WHERE ga_id_administrateur = '$id' ";
                $resultat = $this->requete($requete);

                $admin = array();
                foreach ($resultat->fetchAll() as $ligne) {
                        $admin = $ligne;
                }
                return $admin;
        }


        /**
         * Modifie les informations liées à un administrateur dans la base de données
         * Si le mot de passe n'est pas renseigné, il n'est pas changé
         * @param  int   identifiant de l'admiistrateur
         * @param  string   nom
         * @param  string   prenom
         * @param  string   le mail
         * @param  string   le code de langue
         * @param  string   le mot de passe (optionnel)
         * @param  string   la confirmation du mot de passe (optionnel)
         * @return array        un tableau contenant les erreurs s'il y en a, vide sinon
         */
        function modifDetailsAdmin($id, $nom, $prenom, $mail, $lang, $pass = '', $pass_conf = '') {
                $res = array();
                $nb_admin = 0;

                if (!$this->validerMail($mail)) {
                        $res['mail'] = 'Adresse mail invalide';
                }

                $query_verif_mail = 'SELECT COUNT(*) AS nb_admin '.
                                                        'FROM gen_annuaire '.
                                                        "WHERE ga_mail = '{$this->proteger($mail)}'".
                                                        "       AND ga_id_administrateur != $id ";
                if ($res_nb = $this->requete($query_verif_mail)) {
                        $ligne = $res_nb->fetch();
                        $nb_admin = $ligne['nb_admin'];
                } else {
                        $res['bdd'] = 'Erreur dans la base de données';
                        return $res;
                }

                if($nb_admin != 0) {
                        $res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur';
                }

                $query = 'UPDATE gen_annuaire SET ga_ce_i18n='.$this->proteger($lang).', ga_nom='.$this->proteger($nom).',ga_prenom='.
                $this->proteger($prenom).',ga_mail='.$this->proteger($mail);

                // si on a entré quelque chose dans les deux champs de mot de passe
                if($pass != '' || $pass_conf != '') {
                        // on vérifie si les deux concordent
                        if($pass == $pass_conf) {
                                // si oui, on les modifie
                                $query .= ',ga_mot_de_passe='.$this->proteger(md5($pass));
                        } else {
                                // si non, on notifiera l'utilisateur
                                $res['pass'] = 'mot de passe invalide';
                        }
                }

                $query .= ' WHERE ga_id_administrateur='.$id;

                if(count($res) != 0) {
                        return $res;
                }

                if($req_maj = $this->requete($query)) {

                } else {
                        $res['bdd'] = 'Erreur de la requête dans la base de données';
                }

                return $res;
        }

        /**
         * Supprime un administrateur ayant un id donné
         * @param  int   l'identifiant de l'administrateur
         * @return array        un tableau contenant les erreurs s'il y en a, vide sinon
         */
        function suppAdmin($id) {

                $nb_admin = 0;
                $res = '';

                $query_verif = 'SELECT COUNT(*) AS nb_admin FROM gen_annuaire';
                if($res_nb = $this->requete($query_verif)) {
                        $ligne = $res_nb->fetch();
                        $nb_admin = $ligne['nb_admin'];
                } else {
                        $res = 'Erreur dans la base de donn�es';
                        return $res ;
                }

                if($nb_admin == 2) {
                        $res = 'Impossible de supprimer le dernier administrateur';
                        return $res ;
                }

                $query = 'DELETE FROM gen_annuaire WHERE ga_id_administrateur='.$id;

                if($res_supp = $this->requete($query)) {
                        return $res ;
                } else {
                        $res = 'Erreur dans la base de données' ;
                        return $res ;
                }
        }

        /**
         * Ajoute un administrateur dans la base de données
         * @param  string   nom
         * @param  string   prenom
         * @param  string   le mail
         * @param  string   le code de langue
         * @param  string   le mot de passe
         * @param  string   la confirmation du mot de passe
         * @return array        un tableau contenant les erreurs s'il y en a, vide sinon
         */
        function ajoutAdmin($nom, $prenom, $mail, $lang, $pass, $pass_conf) {
                $nouvel_id = 0;
                $nb_admin = 0;
                $res = array();
Debug::printr('pppppppppp');
                if (!$this->validerMail($mail)) {
                        $res['mail'] = 'Adresse mail invalide.';
                }

                $query_verif_mail =     'SELECT COUNT(*) AS nb_admin '.
                                                                'FROM gen_annuaire '.
                                                                'WHERE ga_mail = '.$this->proteger($mail);
                if ($res_nb = $this->requete($query_verif_mail)) {
                        $ligne = $res_nb->fetch();
                        $nb_admin = $ligne['nb_admin'];
                } else {
                        $res['bdd'] = 'Erreur dans la base de données.';
                        return $res;
                }
                if ($nb_admin != 0) {
                        $res['mail'] = 'Cet email est déjà utilisé par un autre utilisateur.';
                }

                if ($pass != '' || $pass_conf != '') {
                        // on vérifie si les deux concordent
                        if ($pass != $pass_conf) {
                                // si non, on notifiera l'utilisateur
                                $res['pass'] = 'mot de passe invalide';
                        }
                }

                $query =        'SELECT MAX(ga_id_administrateur) as nouvel_id '.
                                        'FROM gen_annuaire';
                if ($res_requete_id = $this->requete($query)) {
                        $ligne = $res_requete_id->fetch() ;
                        $nouvel_id = $ligne['nouvel_id'] + 1;
                } else {
                        return $res ;
                }

                $query =        'INSERT INTO gen_annuaire '.
                                        'VALUES ('.$nouvel_id.','.$this->proteger($lang).','.
                                        $this->proteger($nom).','.$this->proteger($prenom).','.$this->proteger(md5($pass)).','.
                                        $this->proteger($mail).')';
                
                if (count($res) != 0) {
                        return $res;
                }

                if (!$res_ajout = $this->requete($query)) {
                        $res['bdd'] = 'Erreur de la requête dans la base de données';
                }

                return $res;
        }

        /**
         * Fonction qui prend une chaine en paramètre et renvoie vrai
         * si elle constitue un email syntaxiquement valide, faux sinon.
         * @param string le mail à valider
         * @return bool true si le mail est valide, false sinon
         */
        function validerMail($mail) {
                $atom = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]'; // Caractères autorisés avant l'arobase
                $domain = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // Caractères autorisés après l'arobase (nom de domaine)

                $regex = '/^'.$atom.'+'. // Une ou plusieurs fois les caractères autorisés avant l'arobase
                        '(\.'.$atom.'+)*'. // Suivis par zéro point ou plus, séparés par des caractères autorisés avant l'arobase
                        '@'.// Suivis d'un arobase
                        '('.$domain .'{1,63}\.)+'.// Suivis par 1 à 63 caractères autorisés pour le nom de domaine, séparés par des points
                        $domain.'{2,63}$/i';// Suivi de 2 à 63 caractères autorisés pour le nom de domaine

                // Test de l'adresse e-mail
                if (preg_match($regex, $mail)) {
                        return true;
                } else {
                        return false;
                }
        }
}
?>