/trunk/services/configurations/config.defaut.ini |
---|
212,4 → 212,40 |
; Descriptions des flux |
commentaire_dsc = "Ce flux regroupe les dernières déterminations et commentaires rédigés dans l'application identiPlante" |
vote_dsc = "Ce flux regroupe les derniers votes sur les images de pictoFlora" |
tag_dsc = "Ce flux regroupe les derniers tags des images de pictoFlora" |
tag_dsc = "Ce flux regroupe les derniers tags des images de pictoFlora" |
[observations] |
; Masque de filtrage possible pour la consultation : |
masques_possibles = "masque,masque.famille,masque.genre,masque.ns,masque.nn,masque.auteur,masque.date,masque.commune,masque.departement,masque.tag,masque.espece,masque.type,masque.referentiel" |
; Mapping parmetres url / champs base de données : |
mapping = " |
id_observation = id_observation, |
date_observation = date_observation, |
date_transmission = date_transmission, |
famille = determination.famille, |
nom_sel = determination.ns, |
nom_sel_nn = determination.nn, |
nt = determination.nt, |
nom_referentiel = determination.referentiel, |
ce_zone_geo = id_zone_geo, |
zone_geo = zone_geo, |
lieudit = lieudit, |
station = station, |
milieu = milieu, |
nom = auteur.nom, |
prenom = auteur.prenom, |
ce_utilisateur = auteur.id, |
courriel = auteur.courriel, |
mots_cles_texte = mots_cles_texte, |
dob_commentaire = commentaire" |
; Texte du tag "à déterminer" |
tag_adeterminer = aDeterminer |
; |
nb_commentaires_discussion = 1 |
[images] |
; Masque de filtrage possible pour la consultation : |
masques_possibles = "masque,famille,genre,ns,nn,nt,auteur,date,commune,departement,tag,espece,referentiel" |
; Mapping parmetres url / champs base de données : |
mapping = " |
/trunk/services/bibliotheque/GestionUtilisateur.php |
---|
22,9 → 22,8 |
private $utilisateur = array(); |
public function __construct(Conteneur $conteneur = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_utilisateurs.ini'); |
public function __construct(Conteneur $conteneur) { |
$this->conteneur = $conteneur; |
$this->bdd = $this->conteneur->getBdd(); |
$this->contexte = $this->conteneur->getContexte(); |
$this->chargerUtilisateur(); |
69,34 → 68,36 |
); |
} |
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).') '. |
' -- '.__FILE__.' : '.__LINE__; |
$utilisateur = $this->bdd->recupererTous($requete); |
return $utilisateur; |
protected function identifierUtilisateur($login, $mot_de_passe) { |
return $this->recupererUtilisateurEnBdd($login, $mot_de_passe, 'MD5'); |
} |
protected function identifierUtilisateurSansEncryptionMotDePasse($login, $mot_de_passe) { |
return $this->recupererUtilisateurEnBdd($login, $mot_de_passe); |
} |
private function recupererUtilisateurEnBdd($login, $mot_de_passe, $cryptage = false) { |
$loginP = $this->bdd->proteger($login); |
$mdpP = $this->bdd->proteger($mot_de_passe); |
$mdpSql = $cryptage ? "$cryptage($mdpP)" : $mdpP; |
$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).' '. |
"WHERE courriel = $loginP ". |
"AND mot_de_passe = $mdpSql ". |
' -- '.__FILE__.' : '.__LINE__; |
$utilisateur = $this->bdd->recuperer($requete); |
return $utilisateur; |
return $this->bdd->recuperer($requete); |
} |
protected function setUtilisateur($utilisateur) { |
protected function completerInfosUtilisateur($utilisateur) { |
$utilisateur['session_id'] = session_id(); |
$utilisateur['connecte'] = true; |
return $utilisateur; |
} |
protected function poserCookieUtilisateur($utilisateur) { |
$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) { |
104,18 → 105,18 |
} |
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']); |
setcookie('del_courriel', $this->contexte->getCookie('del_courriel'), time()-3600, '/'); |
setcookie('del_mot_de_passe', $this->contexte->getCookie('del_mot_de_passe'), time()-3600, '/'); |
$this->contexte->setCookie('del_courriel', null); |
$this->contexte->setCookie('del_mot_de_passe', null); |
} |
public function etreAdmin() { |
//TODO: déplacer ceci dans une classe utilitaire |
$idUtilisateur = $this->bdd->proteger($this->utilisateur['id_utilisateur']); |
$idUtilisateurP = $this->bdd->proteger($this->utilisateur['id_utilisateur']); |
$requete = 'SELECT admin '. |
'FROM del_utilisateur_infos '. |
"WHERE id_utilisateur = $idUtilisateur ". |
"WHERE id_utilisateur = $idUtilisateurP ". |
' -- '.__FILE__.' : '.__LINE__; |
$resultat = $this->bdd->recuperer($requete); |
return ($resultat && $resultat['admin'] == 1); |
/trunk/services/bibliotheque/Contexte.php |
---|
31,7 → 31,8 |
'getServer' => 'server', |
'getSession' => 'session', |
'getCookie' => 'cookie', |
'getRessource' => 'urlRessource'); |
'getRessource' => 'urlRessource', |
'setCookie' => 'cookie'); |
public function __construct($conteneur, &$server, &$get, &$post, &$session, &$cookie) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
51,8 → 52,18 |
} |
$attributNom = $this->mapping[$nom]; |
$data = $this->$attributNom; |
$cle = isset($arguments[0]) ? $arguments[0] : null; |
if (substr($nom, 0, 3) == 'get') { |
$cle = isset($arguments[0]) ? $arguments[0] : null; |
return $this->getGenerique($data, $cle); |
} else if (substr($nom, 0, 3) == 'set') { |
$cle = isset($arguments[0]) ? $arguments[0] : null; |
$valeur = isset($arguments[1]) ? $arguments[1] : null; |
return $this->setGenerique($data, $cle, $valeur); |
} |
} |
private function getGenerique($data, $cle) { |
$retour = null; |
if ($cle === null) { |
$retour = $data; |
62,6 → 73,14 |
return $retour; |
} |
private function setGenerique($data, $cle, $valeur) { |
if ($valeur === null) { |
unset($data[$cle]); |
} else { |
$data[$cle] = $valeur; |
} |
} |
private function nettoyerParametres(Array $parametres) { |
// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET |
if (isset($parametres) && count($parametres) > 0) { |
/trunk/services/index.php |
---|
25,7 → 25,7 |
$nom = substr($nom_classe, strrpos($nom_classe, "\\") + 1); |
//echo "Recherche : $nom / $ns\n"; |
// Routes selon les namespaces |
$routes = array('TelaBotanica\Del\Commun' => Config::get('cheminDelCommun')); |
$routes = array('TelaBotanica\Del\Commun' => Config::get('chemin_del_commun')); |
if (array_key_exists($ns, $routes)) { |
//echo "Route trouvée: " . $routes[$ns] . "\n"; |
$fichier_a_inclure = dirname(__FILE__) . DS . $routes[$ns] . DS . $nom . '.php'; |
/trunk/services/modules/0.1/Utilisateurs.php |
---|
16,12 → 16,11 |
*/ |
class Utilisateurs extends RestService { |
private $parametres = array(); |
private $ressources = array(); |
private $methode = null; |
private $projetNom = array(); |
private $serviceNom = array(); |
private $serviceNom = 'utilisateurs'; |
private $sousServiceNom = null; |
private $cheminCourant = null; |
private $conteneur; |
31,32 → 30,29 |
public function __construct() { |
$this->cheminCourant = dirname(__FILE__).DS; |
$this->conteneur = new Conteneur(); |
} |
public function consulter($ressources, $parametres) { |
$this->methode = 'consulter'; |
$resultat = ''; |
$reponseHttp = new ReponseHttp(); |
try { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$this->conteneur = new Conteneur($this->parametres); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
} catch (Exception $e) { |
$reponseHttp->ajouterErreur($e); |
} |
$reponseHttp->emettreLesEntetes(); |
$corps = $reponseHttp->getCorps(); |
return $corps; |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
return $this->executerService(); |
} |
public function modifier($ressources, $parametres) { |
public function modifier($ressources, $requeteDonnees) { |
$this->methode = 'modifier'; |
$resultat = ''; |
$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees); |
return $this->executerService(); |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres = array()) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
private function executerService() { |
$reponseHttp = new ReponseHttp(); |
try { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$this->conteneur = new Conteneur($this->parametres); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
} catch (Exception $e) { |
67,56 → 63,68 |
return $corps; |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
private function traiterRessources() { |
$retour = ''; |
$this->initialiserProjet(); |
$this->analyserRessources(); |
$retour = $this->initialiserService(); |
return $retour; |
} |
private function analyserRessources() { |
if ($this->methode == 'consulter') { |
//S'il n'y a pas de ressources => envoyer sur identification anonyme |
if (!isset($this->ressources) || empty($this->ressources)) { |
$this->sousServiceNom = 'identification'; |
} else { |
if (count($this->ressources) == 1 && ($this->ressources[0] == 'deconnecter')) { |
$this->sousServiceNom = 'deconnecter'; |
} else if(count($this->ressources) == 2 && $this->ressources[1] == 'preferences') { |
$this->sousServiceNom = 'preferences'; |
} else if (count($this->ressources) == 2) { |
$this->sousServiceNom = 'connecter'; |
} else { |
$this->sousServiceNom = 'identification'; |
} |
} |
} else if ($this->methode == 'modifier') { |
if (count($this->ressources) == 2 && $this->ressources[1] == 'preferences') { |
$this->sousServiceNom = 'preferences'; |
} |
} |
/*------------------------------------------------------------------------------------------------------------------ |
CONFIGURATION DU PROJET |
------------------------------------------------------------------------------------------------------------------*/ |
private function initialiserProjet() { |
$this->projetNom = 'utilisateurs'; |
$this->chargerConfigProjet(); |
if ($this->sousServiceNom == null) { |
$this->lancerMessageErreurRessource(); |
} |
} |
private function chargerConfigProjet() { |
$projet = $this->projetNom; |
$chemin = Config::get('chemin_configurations')."config_$projet.ini"; |
Config::charger($chemin); |
private function lancerMessageErreurRessource() { |
$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources); |
$message = "La ressource demandée '$ressource' ". |
"n'est pas disponible pour le service ".$this->serviceNom." !\n". |
"Les URLs disponibles sont : \n". |
" * en GET : \n". |
" - utilisateurs : identification anonyme à partir des cookies (par défaut quelque soit l'url)\n". |
" - utilisateurs/#login/#mot-de-passe : connecte l'utilisateur\n". |
" - utilisateurs/deconnecter : déconnecte l'utilisateur actuellement connecté par cookie\n". |
" - utilisateurs/#id/preferences : fourni les préférences de l'utilisateur #id\n". |
" * en POST : \n". |
" - utilisateurs/#id/preferences : permet de modifier \n"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
/*------------------------------------------------------------------------------------------------------------------ |
CONFIGURATION DU SERVICE |
------------------------------------------------------------------------------------------------------------------*/ |
private function initialiserService() { |
$this->chargerNomService(); |
$classe = $this->obtenirNomClasseService($this->serviceNom); |
$classe = $this->obtenirNomClasseService($this->sousServiceNom); |
$chemins = array(); |
$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php'; |
$chemins[] = $this->cheminCourant.$this->serviceNom.DS.$classe.'.php'; |
$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php'; |
$retour = ''; |
$service = null; |
foreach ($chemins as $chemin) { |
if (file_exists($chemin)) { |
$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini'); |
require_once $chemin; |
$service = new $classe($this->conteneur); |
if ($this->methode == 'consulter') { |
$retour = $service->consulter($this->ressources, $this->parametres); |
} elseif ($this->methode == 'ajouter') { |
$retour = $service->ajouter($this->ressources, $this->parametres); |
} elseif ($this->methode == 'modifier') { |
$retour = $service->modifier($this->ressources, $this->parametres); |
} |
124,7 → 132,9 |
} |
if (is_null($service)) { |
$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !"; |
$ressource = $this->serviceNom.'/'.implode('/', $this->ressources); |
$message = "Le classe '$classe' correspondant à la ressource '$ressource' ". |
"n'existe pas dans le service '{$this->serviceNom}' !"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
131,27 → 141,8 |
return $retour; |
} |
private function chargerNomService() { |
//S'il n'y a pas de ressources => envoyer sur identification anonyme |
if (!isset($this->ressources) || empty($this->ressources)) { |
$this->serviceNom = 'identification-anonyme'; |
} else { |
//S'il y a 1 ressource et que celle ci est 'deconnecter', envoyer vers deconnecter |
if (sizeof($this->ressources) == 1 && ($this->ressources[0] == 'deconnecter')) { |
$this->serviceNom = 'deconnecter'; |
} else if(sizeof($this->ressources) == 2 && $this->ressources[1] == 'preferences') { |
$this->serviceNom = 'preferences'; |
} else if (sizeof($this->ressources) == 2) { |
$this->serviceNom = 'connecter'; |
} else { |
$this->serviceNom = 'identification-anonyme'; |
} |
} |
} |
private function obtenirNomClasseService($mot) { |
$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot)))); |
return $classeNom; |
} |
} |
?> |
} |
/trunk/services/modules/0.1/utilisateurs/IdentificationAnonyme.php |
---|
File deleted |
\ No newline at end of file |
/trunk/services/modules/0.1/utilisateurs/Connecter.php |
---|
14,7 → 14,6 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class Connecter extends GestionUtilisateur { |
/** |
29,8 → 28,9 |
$motDePasse = $ressources[1]; |
$utilisateur = $this->identifierUtilisateur($login, $motDePasse); |
$utilisateur = $this->verifierUtilisateur($utilisateur); |
$utilisateur = $this->setUtilisateur($utilisateur); |
$this->verifierUtilisateur($utilisateur); |
$utilisateur = $this->completerInfosUtilisateur($utilisateur); |
$this->poserCookieUtilisateur($utilisateur); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
39,11 → 39,9 |
} |
private function verifierUtilisateur($utilisateur) { |
if ($utilisateur == null || sizeof($utilisateur) == 0 || sizeof($utilisateur) > 1) { |
$e = 'Accès non autorisé'; |
throw new Exception($e, RestServeur::HTTP_CODE_ACCES_NON_AUTORISE); |
} else { |
return $utilisateur[0]; |
if ($utilisateur == false) { |
$msg = "Accès non autorisé"; |
throw new Exception($msg, RestServeur::HTTP_CODE_ACCES_NON_AUTORISE); |
} |
} |
} |
/trunk/services/modules/0.1/utilisateurs/Preferences.php |
---|
20,10 → 20,9 |
private $conteneur; |
private $bdd; |
public function __construct(Conteneur $conteneur = null) { |
public function __construct(Conteneur $conteneur) { |
session_start(); |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->conteneur->chargerConfiguration('config_utilisateurs.ini'); |
$this->conteneur = $conteneur; |
$this->bdd = $this->conteneur->getBdd(); |
} |
34,15 → 33,18 |
* */ |
public function consulter($ressources, $parametres) { |
$id_utilisateur = $ressources[0]; |
$prefs = $this->obtenirPreferencesUtilisateur($id_utilisateur); |
// Mettre en forme le résultat et l'envoyer pour affichage |
$resultat = new ResultatService(); |
$resultat->corps = $prefs; |
$resultat->corps = $this->obtenirPreferencesUtilisateur($id_utilisateur); |
return $resultat; |
} |
private function obtenirPreferencesUtilisateur($id_utilisateur) { |
$requete = 'SELECT * FROM del_utilisateur_infos WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur); |
$requete = 'SELECT * '. |
'FROM del_utilisateur_infos '. |
'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '. |
' -- '.__FILE__.' : '.__LINE__; |
$prefs_utilisateur = $this->bdd->recupererTous($requete); |
if (empty($prefs_utilisateur)) { |
62,12 → 64,11 |
$prefsEncodeesP = $this->bdd->proteger(json_encode($preferences_defaut)); |
$idUtilisateurP = $this->bdd->proteger($id_utilisateur); |
$requete = 'INSERT INTO del_utilisateur_infos '. |
'(id_utilisateur, admin, preferences, date_premiere_utilisation )'. |
"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ". |
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '; |
$resultat = $this->bdd->requeter($requete); |
return $resultat; |
'(id_utilisateur, admin, preferences, date_premiere_utilisation )'. |
"VALUES ($idUtilisateurP, 0, $prefsEncodeesP, NOW()) ". |
'ON DUPLICATE KEY UPDATE date_premiere_utilisation = NOW() '. |
' -- '.__FILE__.' : '.__LINE__; |
return $this->bdd->executer($requete); |
} |
private function obtenirTableauPreferenceDefaut() { |
76,9 → 77,9 |
private function renvoyerInfosUtilisateurDefaut($id_utilisateur) { |
return array('id_utilisateur' => $id_utilisateur, |
'admin' => '0', |
'preferences' => $this->obtenirTableauPreferenceDefaut(), |
'date_premiere_utilisation' => date('Y-m-d H:i:s')); |
'admin' => '0', |
'preferences' => $this->obtenirTableauPreferenceDefaut(), |
'date_premiere_utilisation' => date('Y-m-d H:i:s')); |
} |
/** |
99,9 → 100,9 |
private function modifierPreferencesUtilisateur($id_utilisateur, $prefs) { |
$requete = 'UPDATE del_utilisateur_infos '. |
'SET preferences = '.$this->bdd->proteger(json_encode($prefs)).' '. |
'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur); |
$resultat = $this->bdd->requeter($requete); |
'WHERE id_utilisateur = '.$this->bdd->proteger($id_utilisateur).' '. |
' -- '.__FILE__.' : '.__LINE__; |
$resultat = $this->bdd->executer($requete); |
return $resultat; |
} |
} |
/trunk/services/modules/0.1/utilisateurs/Deconnecter.php |
---|
14,7 → 14,6 |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
class Deconnecter extends GestionUtilisateur { |
/** |
29,8 → 28,6 |
$this->oublierUtilisateur(); |
// renvoyer identification anonyme |
$utilisateur = $this->getUtilisateurAnonyme(); |
return $utilisateur; |
return $this->getUtilisateurAnonyme(); |
} |
} |
?> |
} |
/trunk/services/modules/0.1/utilisateurs/Identification.php |
---|
New file |
0,0 → 1,38 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Permt de gérer "l'identification" anonyme. |
* |
* @category DEL |
* @package Services |
* @subpackage Utilisateurs |
* @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 Identification extends GestionUtilisateur { |
/** |
* Méthode principale de la classe. |
* Lance la récupération des images dans la base et les place dans un objet ResultatService |
* pour l'afficher. |
* @param array $ressources les ressources situées après l'url de base (ex : http://url/ressource1/ressource2) |
* @param array $parametres les paramètres situés après le ? dans l'url |
* */ |
public function consulter($ressources, $parametres) { |
$utilisateur = $this->getUtilisateurIdentifie(); |
if ($utilisateur != null) { |
$utilisateur['connecte'] = true; |
} else { |
$utilisateur = $this->getUtilisateurAnonyme(); |
} |
$resultat = new ResultatService(); |
$resultat->corps = $utilisateur; |
return $resultat; |
} |
} |