Subversion Repositories eFlore/Applications.del

Rev

Rev 1793 | Rev 1795 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/**
 * Contient les méthodes permettant d'identifier l'utilisateur de l'application DEL.
 *
 * @category DEL
 * @package Services
 * @subpackage Bibliotheque
 * @version 0.1
 * @author Mathias CHOUET <mathias@tela-botanica.org>
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */
class GestionUtilisateur {

        private $conteneur;
        private $bdd;

        public function __construct(Conteneur $conteneur = null) {
                $this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
                $this->conteneur->chargerConfiguration('config_utilisateurs.ini');
                $this->bdd = $this->conteneur->getBdd();
                $this->demarrerSession();
        }

        private function demarrerSession() {
                if (session_id() == '') {
                        // modifier ce test lors du passage en php 5.4
                        session_start();
                }
        }

        protected function getUtilisateurAnonyme() {
                return array('connecte' => false,
                        'id_utilisateur' => session_id(),
                        'courriel' => '',
                        'mot_de_passe' => '',
                        'nom' => '',
                        'prenom' => '',
                        'admin' => '0',
                        'session_id' => session_id()
                );
        }

        protected function utilisateurEstIdentifie() {
                $utilisateur = null;
                $utilisateur = $this->utilisateurEstIdentifieCookie();
                if ($utilisateur != null) {
                        $utilisateur['session_id'] = session_id();
                }
                return $utilisateur;
        }

        protected function utilisateurEstIdentifieCookie() {
                $retour = null;
                if (isset($_COOKIE['del_courriel']) && isset($_COOKIE['del_mot_de_passe'])) {
                        $retour = $this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE['del_courriel'], $_COOKIE['del_mot_de_passe']);
                }
                return $retour;
        }

        protected function identifierUtilisateur($login, $motDePasse) {
                $requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
                        'FROM del_utilisateur AS du '.
                        '       LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
                        'WHERE courriel = '.$this->bdd->proteger($login).' '.
                        'AND mot_de_passe = MD5('.$this->bdd->proteger($motDePasse).')';
                $utilisateur = $this->bdd->recupererTous($requete);
                return $utilisateur;
        }

        protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) {
                $requete = 'SELECT du.id_utilisateur, nom, prenom, courriel, mot_de_passe, dui.admin '.
                        'FROM del_utilisateur AS du '.
                        '       LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
                        'WHERE courriel = '.$this->bdd->proteger($login).' '.
                        'AND mot_de_passe = '.$this->bdd->proteger($mot_de_passe);
                $utilisateur = $this->bdd->recuperer($requete);
                return $utilisateur;
        }

        protected function setUtilisateur($utilisateur) {
                $utilisateur['session_id'] = session_id();
                $utilisateur['connecte'] = true;
                $this->setPersistentCookie('del_courriel', $utilisateur['courriel'], 1);
                $this->setPersistentCookie('del_mot_de_passe', $utilisateur['mot_de_passe'], 1);
                return $utilisateur;
        }

        protected function setPersistentCookie($name, $value, $remember = 1) {
                setcookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');
        }

        protected function oublierUtilisateur() {
                setcookie('del_courriel', $_COOKIE['del_courriel'], time()-3600, '/');
                setcookie('del_mot_de_passe', $_COOKIE['del_mot_de_passe'], time()-3600, '/');
                unset($_COOKIE['del_courriel']);
                unset($_COOKIE['del_mot_de_passe']);
        }
}