Rev 1742 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel ///*** PHP Version 5** @category PHP* @package jrest* @author David Delon <devid.delon@clapas.net>* @author Aurélien Peronnet <devid.delon@clapas.net>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @version SVN: <svn_id>* @link /doc/jrest/*//*** User.php** Cas d'utilisation :* Service identification utilisateur*** 1: Aucun identifiant ni mot de passe transmis* 1: L'application retourne l'identifiant de session en cours* 2: Une identification est toujours active, cette identification est retournee** 1: L'application recoit un identifiant et un mot de passe* 1 : On tente login* 2 : Si reussi etat connecte, retour de l'identification obtenue* 3 : sinon pas connecte, retour d'infos utilisateur anonyme** 1: L'application recoit un identifiant et pas de mot de passe :* 1 : Deconnection, retour d'infos utilisateur anonyme** En resume :* /User/ : retour infos utilisateur si connecté sinon infos utilisateur anonyme* /User/login_utilisateur : logout retour infos utilisateur anonyme* /User/login_utilisateur/password : login retour infos utilisateur si succès sinon infos utilisateur anonyme**/class User extends Cel {// TODO : controle systematique ....dans tous les services// Si connected : name cookie = name servicefunction getRessource(){$temps_expiration = 60*60*24*100; // 100 jourssession_set_cookie_params($temps_expiration);$utilisateur = $this->getUtilisateurAnonyme();$login_utilisateur = $this->utilisateurEstIdentifie();if ($login_utilisateur) {$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);$utilisateur['connecte'] = true;}$this->envoyerInfosUtilisateur($utilisateur);}function getElement($uid){$utilisateur = $this->getUtilisateurAnonyme();if ($this->identificationEstDemandee($uid)) {if (!$utilisateur = $this->utilisateurEstIdentifie()) {if ($this->identifierUtilisateur($uid[0],$uid[1],1)) {$utilisateur= $this->chargerInfosUtilisateur($uid[0]);$utilisateur['connecte'] = true;}// TODO: utilisateur inexistant ?}else {$utilisateur = $this->chargerInfosUtilisateur($utilisateur);$utilisateur['connecte'] = true;}}else {$this->deconnecterUtilisateur();}$this->envoyerInfosUtilisateur($utilisateur);}public function obtenirIdentiteConnectee() {$login_utilisateur = $this->utilisateurEstIdentifie();if ($login_utilisateur) {$utilisateur = $this->chargerInfosUtilisateur($login_utilisateur);$utilisateur['connecte'] = true;} else {$utilisateur = $this->getUtilisateurAnonyme();}return $utilisateur;}public function obtenirUtilisateurSiExiste($login_utilisateur) {$utilisateur = $this->getUtilisateurAnonyme();if($utilisateur_existe = $this->chargerInfosUtilisateur($login_utilisateur)) {$utilisateur = $utilisateur_existe;$utilisateur['connecte'] = true;}return $utilisateur;}private function identificationEstDemandee($tableau_param) {return (isset($tableau_param[1]) && trim($tableau_param[1] != ''));}private function envoyerInfosUtilisateur($utilisateur) {if(!$utilisateur) {$this->envoyerJson((array('connecte' => false, 'licence_acceptee' => false, 'admin' => false)));return true;}$utilisateur['connecte'] = ($utilisateur['connecte']) ? true : false;$utilisateur['licence_acceptee'] = ($utilisateur['licence_acceptee']) ? true : false;$utilisateur['admin'] = ($utilisateur['admin']) ? true : false;$this->envoyerJson($utilisateur);return true;}function chargerInfosUtilisateur($login) {$requete_selection_utilisateur = 'SELECT * FROM cel_utilisateurs cu '.'WHERE courriel = '.Cel::db()->proteger($login);$resultat_selection_utilisateur = Cel::db()->requeter($requete_selection_utilisateur);$retour = false;if(is_array($resultat_selection_utilisateur) && count($resultat_selection_utilisateur) > 0) {$retour = $resultat_selection_utilisateur[0];}if(is_array($retour) && ($retour['date_premiere_utilisation'] == NULL || $retour['date_premiere_utilisation'] == '0000-00-00 00:00:00')) {$this->initialiserInfosUtilisateur($retour['id_utilisateur']);$this->affecterDonneesWidgetSaisie($login, $retour);}return $retour;}private function utilisateurEstIdentifie() {$login_utilisateur = false;if (!$login_utilisateur = $this->utilisateurEstIdentifieSession()) {$login_utilisateur = $this->utilisateurEstIdentifieCookie();}return $login_utilisateur;}function utilisateurEstIdentifieSession() {return (isset($_SESSION["user"]) && isset($_SESSION["user"]["courriel"])) ? $_SESSION["user"]["courriel"] : false;}function utilisateurEstIdentifieCookie() {return isset($_COOKIE["cel_name"]) && ($this->identifierUtilisateurSansEncryptionMotDePasse($_COOKIE["cel_name"], $_COOKIE["cel_password"])) ? $_COOKIE["cel_name"] : false;}function setUtilisateur($user, $remember=1) {$_SESSION["user"] = $user;$this->setPersistentCookie("cel_id", $user["id_utilisateur"], $remember);$this->setPersistentCookie("cel_name", $user["courriel"], $remember);$this->setPersistentCookie("cel_password", $user["mot_de_passe"], $remember);$this->setPersistentCookie("cel_remember", $remember, $remember);}function deconnecterUtilisateur() {$_SESSION["user"] = "";$this->supprimerCookie("cel_id");$this->supprimerCookie("cel_name");$this->supprimerCookie("cel_password");$this->supprimerCookie("cel_remember");}function setPersistentCookie($name, $value, $remember = 1) {SetCookie($name, $value, time() + ($remember ? (60*60*24*100) : (60*60)),'/');$_COOKIE[$name] = $value;}function supprimerCookie($name) {SetCookie($name, "", 1,'/'); $_COOKIE[$name] = "";}function identifierUtilisateur($login, $mot_de_passe, $remember = 1) {$identification = false;if ($utilisateur = $this->chargerInfosUtilisateur($login)) {if ($utilisateur['mot_de_passe'] == $this->encrypterMotDePasse($mot_de_passe) || $mot_de_passe == "debug") {$this->setUtilisateur($utilisateur, $remember);$identification = true;}}return $identification;}function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe, $remember = 1) {$souvenir = false;if ($utilisateur = $this->chargerInfosUtilisateur($login)) {if ($utilisateur['mot_de_passe'] == $mot_de_passe) {$this->setUtilisateur($utilisateur, $remember);$souvenir = true;}}return $souvenir;}private function getUtilisateurAnonyme() {return array('connecte' => false,'id_utilisateur' => session_id(),'courriel' => '','mot_de_passe' => '','nom' => '','prenom' => '','licence_acceptee' => false,'preferences_utilisateur' => '','admin' => false);}private function encrypterMotDePasse($mot_de_passe) {return md5($mot_de_passe);}private function initialiserInfosUtilisateur($id_utilisateur) {$requete = 'INSERT INTO cel_utilisateurs_infos '.'(id_utilisateur, admin, licence_acceptee, preferences, date_premiere_utilisation )'.'VALUES '."(".Cel::db()->proteger($id_utilisateur).", '0', '0', NULL, NOW()) ".'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() ';$resultat_insertion_infos = Cel::db()->executer($requete);}/*** Lors de la première connection au cel d'un utilisateur, affecte à son compte ses observations saisies* dans les widgets de saisie, où seul son mail avait été conservé en attendant* Enter description here ...* @param string $mail_utilisateur* @param array $infos_utilisateur*/private function affecterDonneesWidgetSaisie($mail_utilisateur, $infos_utilisateur) {$gestion_obs = new GestionObservation($this->config);$gestion_img = new GestionImage($this->config);$gestion_mots_cles = new LiaisonMotsCles($this->config, 'obs');$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);$gestion_mots_cles->migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);}}?>