* @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$$ * @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->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; } } } ?>