Rev 177 | 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 128 2009-09-02 12:20:55Z aurelien $$* @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 passeif($pass != '' || $pass_conf != '') {// on vérifie si les deux concordentif($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 concordentif($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-mailif (preg_match($regex, $mail)) {return true;} else {return false;}}}?>