Subversion Repositories Applications.framework

Rev

Rev 88 | Go to most recent revision | Blame | 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
 */
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->requete($requete);
        $admin = array();
        foreach ($resultat->fetchAll() 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() ;
        
        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) {
                
            } else {
                // 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)) {
            
        } else {
            $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;
        }
    }
}
?>