Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1794 → Rev 1795

/trunk/services/bibliotheque/Navigation.php
29,7 → 29,7
public function __construct($conteneur, $parametresUrl = null) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
$this->parametresUrl = $parametresUrl;
$this->urlNavigation = $this->conteneur->getUrl($this->conteneur->getParametre('url_service'));
$this->urlNavigation = $this->conteneur->getUrlService();
$this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);
}
 
37,7 → 37,7
* Obtenir la valeur courante de départ
*/
public function getDepart() {
return isset($this->getParametre('navigation.depart')) ? $this->getParametre('navigation.depart') : 0;
return $this->conteneur->getParametre('navigation.depart') == null ? 0 : $this->conteneur->getParametre('navigation.depart') ;
}
 
/**
45,8 → 45,8
*/
public function getLimite() {
$limite = 10;
if (isset($this->getParametre('navigation.limite')) && is_numeric($this->getParametre('navigation.limite'))) {
$limiteParam = $this->getParametre('navigation.limite');
if ($this->conteneur->getParametre('navigation.limite') != null && is_numeric($this->conteneur->getParametre('navigation.limite'))) {
$limiteParam = $this->conteneur->getParametre('navigation.limite');
$limite = ($limiteParam < 1000) ? $limiteParam : 1000;// Pour éviter les abus !
}
return $limite;
131,13 → 131,12
$entete['limite'] = $this->getLimite();
 
$lienPrecedent = $this->recupererHrefPrecedent();
 
if ($lienPrecedent != null) {
$entete['href.precedent'] = $lienPrecedent;
}
 
$lienSuivant = $this->recupererHrefSuivant();
if ($lienSuivant) {
if ($lienSuivant != null) {
$entete['href.suivant'] = $lienSuivant;
}
}
/trunk/services/bibliotheque/Conteneur.php
19,9 → 19,11
class Conteneur {
 
protected $parametres;
protected $parametresUrl;
protected $partages = array();
 
protected $parametresUrl;
protected $serviceNom;
 
/**
* Constructeur de la classe
* @param Array $parametres (optionnel) les paramètres additionnels à ajouter à ceux des fichiers de config
28,10 → 30,11
* */
public function __construct(array $parametres = null) {
$this->parametres = is_null($parametres) ? array() : $parametres;
// TODO [2014-05-13 - JPM]: améliorer la gestion des paramètres d'URL fournis au conteneur.
// Ce conteneur conscidère que les paramètres fournis à son constructeur correspondent aux paramètres de l'URL (GET ou POST)...
// Ce n'est pas vraiment générique.
$this->parametresUrl = $this->parametres;
 
// Récupération du contexte courrant et configuration du conteneur
$contexte = $this->getContexte();
$this->parametresUrl = $contexte->getQS();
$this->serviceNom = $contexte->getRessource(1);
}
 
/**
89,9 → 92,10
throw new Exception($message, $code);
}
 
$cheminConfigService = $cheminConfigurations.DS.$fichier;
$cheminConfigService = $cheminConfigurations.$fichier;
if (file_exists($cheminConfigService) === false) {
$message = "Le fichier de configuration du service est introuvable : $cheminConfigService ";
$nomClasse = get_class($this);
$message = "Classe $nomClasse : le fichier de configuration du service est introuvable : $cheminConfigService ";
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
117,6 → 121,10
return new Url($base);
}
 
public function getUrlService() {
return $this->getUrl($this->getParametre($this->serviceNom.'.url_service'));
}
 
public function getControleAcces() {
if (!isset($this->partages['controleAcces'])) {
$this->partages['controleAcces'] = new ControleAcces($this);
133,8 → 141,22
 
public function getMasque() {
if (!isset($this->partages['masque'])) {
$this->partages['masque'] = new Masque($this->getparametre('masques_possibles'), $this->parametresUrl);
$this->partages['masque'] = new Masque($this->getparametre($this->serviceNom.'.masques_possibles'), $this->parametresUrl);
}
return $this->partages['masque'];
}
 
public function getContexte() {
if (!isset($this->partages['contexte'])) {
$this->partages['contexte'] = new Contexte($this, $_SERVER, $_GET, $_POST, $_SESSION, $_COOKIE);
}
return $this->partages['contexte'];
}
 
public function getUtilisateur() {
if (!isset($this->partages['utilisateur'])) {
$this->partages['utilisateur'] = new GestionUtilisateur($this);
}
return $this->partages['utilisateur'];
}
}
/trunk/services/bibliotheque/GestionUtilisateur.php
16,24 → 16,48
class GestionUtilisateur {
 
private $conteneur;
private $contexte;
private $bdd;
 
private $utilisateur = array();
 
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->contexte = $this->conteneur->getContexte();
$this->chargerUtilisateur();
}
 
private function chargerUtilisateur() {
$this->demarrerSession();
$infos = $this->getUtilisateurIdentifie();
$this->utilisateur = ($infos == null) ? $this->getUtilisateurAnonyme() : $infos;
}
 
private function demarrerSession() {
if (session_id() == '') {
// modifier ce test lors du passage en php 5.4
// TODO : modifier ce test lors du passage en php 5.4
session_start();
}
}
 
protected function getUtilisateurAnonyme() {
return array('connecte' => false,
public function getUtilisateurIdentifie() {
$utilisateur = null;
$delCourriel = $this->contexte->getCookie('del_courriel');
$delMdp = $this->contexte->getCookie('del_courriel');
if ($delCourriel != null && $delMdp != null) {
$utilisateur = $this->identifierUtilisateurSansEncryptionMotDePasse($delCourriel, $delMdp);
}
if ($utilisateur != null) {
$utilisateur['session_id'] = session_id();
}
return $utilisateur;
}
 
public function getUtilisateurAnonyme() {
return array(
'connecte' => false,
'id_utilisateur' => session_id(),
'courriel' => '',
'mot_de_passe' => '',
44,29 → 68,13
);
}
 
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).')';
'AND mot_de_passe = MD5('.$this->bdd->proteger($motDePasse).') '.
' -- '.__FILE__.' : '.__LINE__;
$utilisateur = $this->bdd->recupererTous($requete);
return $utilisateur;
}
76,7 → 84,8
'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);
'AND mot_de_passe = '.$this->bdd->proteger($mot_de_passe).' '.
' -- '.__FILE__.' : '.__LINE__;
$utilisateur = $this->bdd->recuperer($requete);
return $utilisateur;
}
99,4 → 108,15
unset($_COOKIE['del_courriel']);
unset($_COOKIE['del_mot_de_passe']);
}
 
public function etreAdmin() {
//TODO: déplacer ceci dans une classe utilitaire
$idUtilisateur = $this->bdd->proteger($this->utilisateur['id_utilisateur']);
$requete = 'SELECT admin '.
'FROM del_utilisateur_infos '.
"WHERE id_utilisateur = $idUtilisateur ".
' -- '.__FILE__.' : '.__LINE__;
$resultat = $this->bdd->recuperer($requete);
return ($resultat && $resultat['admin'] == 1);
}
}
/trunk/services/bibliotheque/Contexte.php
New file
0,0 → 1,123
<?php
// declare(encoding='UTF-8');
/**
* Contexte permet d'encapsuler les super globales et de définir le contexte du web service courrant.
*
* @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 Contexte {
 
private $conteneur;
private $get;
private $getBrut;
private $post;
private $session;
private $cookie;
private $server;
private $urlRessource;
 
public function __construct($conteneur, &$server, &$get, &$post, &$session, &$cookie) {
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur;
$this->server = $server;
$this->get = $this->nettoyerParametres($get);
$this->getBrut = $this->recupererParametresBruts();
$this->post = $post;
$this->session = $session;
$this->cookie = $cookie;
$this->urlRessource = $this->decouperUrlChemin();
}
 
public function getPhp($cle = null) {
return $cle === null ? $this->get : $this->get[$cle];
}
 
public function getQS($cle = null) {
return $cle === null ? $this->getBrut : $this->getBrut[$cle];
}
 
public function getPost($cle = null) {
return $cle === null ? $this->post : $this->post[$cle];
}
 
public function getServer($cle = null) {
return $cle === null ? $this->server : $this->server[$cle];
}
 
public function getSession($cle = null) {
return $cle === null ? $this->session : $this->session[$cle];
}
 
public function getCookie($cle = null) {
$retour = null;
if ($cle === null) {
$retour = $this->cookie;
} else if (isset($this->cookie[$cle])) {
$retour = $this->cookie[$cle];
}
return $retour;
}
 
public function getRessource($position = null) {
return $position === null ? $this->urlRessource : $this->urlRessource[$position];
}
 
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) {
foreach ($parametres as $cle => $valeur) {
// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car
//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout
$verifier = array('NULL', "\\", "\x00", "\x1a");
$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
}
}
return $parametres;
}
 
private function recupererParametresBruts() {
$parametres_bruts = array();
if (isset($this->server['QUERY_STRING']) && !empty($this->server['QUERY_STRING'])) {
$paires = explode('&', $this->server['QUERY_STRING']);
foreach ($paires as $paire) {
$nv = explode('=', $paire);
$nom = urldecode($nv[0]);
$valeur = urldecode($nv[1]);
$parametres_bruts[$nom] = $valeur;
}
$parametres_bruts = $this->nettoyerParametres($parametres_bruts);
}
return $parametres_bruts;
}
 
private function decouperUrlChemin() {
if (isset($this->server['REDIRECT_URL']) && $this->server['REDIRECT_URL'] != '') {
if (isset($this->server['REDIRECT_QUERY_STRING']) && !empty($this->server['REDIRECT_QUERY_STRING'])) {
$url = $this->server['REDIRECT_URL'].'?'.$this->server['REDIRECT_QUERY_STRING'];
} else {
$url = $this->server['REDIRECT_URL'];
}
} else {
$url = $this->server['REQUEST_URI'];
}
 
$tailleQueryString = strlen($this->server['QUERY_STRING']);
$tailleURL = ($tailleQueryString == 0) ? strlen($url) : -($tailleQueryString + 1);
 
$urlChaine = '';
if (strpos($url, $this->conteneur->getParametre('serveur.baseURL')) !== false) {
$urlChaine = substr($url, strlen($this->conteneur->getParametre('serveur.baseURL')), $tailleURL);
} else if (strpos($url, $this->conteneur->getParametre('serveur.baseAlternativeURL')) !== false) {
$urlChaine = substr($url, strlen($this->conteneur->getParametre('serveur.baseAlternativeURL')), $tailleURL);
}
return explode('/', $urlChaine);
}
}
/trunk/services/bibliotheque/Masque.php
20,7 → 20,7
const MASQUE_GENERAL = 'masque';
 
private $masquesPossibles;
private $parametres;
private $parametresUrl;
private $masque;
 
/**
27,7 → 27,7
* Constructeur de la classe Masque
* @param $masquesPossibles la liste des masques autorisés séparé par des ','
* */
public function __construct($masquesPossibles, $parametres = null) {
public function __construct($masquesPossibles, $parametresUrl = null) {
if ($masquesPossibles != null && trim($masquesPossibles) == '') {
$message = 'La liste des masques possibles est obligatoire';
$code = RestServeur::HTTP_CODE_ERREUR;
34,7 → 34,7
throw new Exception($message, $code);
}
$this->masquesPossibles = explode(',', $masquesPossibles);
$this->parametres = $parametres;
$this->parametresUrl = $parametresUrl;
$this->chargerMasque();
}
 
42,12 → 42,10
* Parcourir le tableau Paramètres pour trouver tous les champs masque
*/
private function chargerMasque() {
if ($this->parametres != null) {
foreach ($this->parametres as $id => $parametre) {
if (strpos($id, self::PREFIXE) === 0 || $id == self::MASQUE_GENERAL) {
if (in_array(str_replace(self::PREFIXE, '', $id), $this->masquesPossibles)) {
$this->masque[$id] = $parametre;
}
if ($this->parametresUrl != null) {
foreach ($this->parametresUrl as $id => $parametre) {
if (in_array(str_replace(self::PREFIXE, '', $id), $this->masquesPossibles)) {
$this->masque[$id] = $parametre;
}
}
}
55,17 → 53,10
 
/**
* Retourner les masques sous forme de chaine
* @return String la chaine de caractère sous la forme masque=valeur&masque2=valeur*/
* @return String la chaine de caractère sous la forme masque=valeur&masque2=valeur
*/
public function getChaineMasque() {
if (!empty($this->masque)) {
$chaine = array();
foreach ($this->masque as $id => $valeur) {
$chaine[] = $id.'='.$valeur;
}
return implode('&', $chaine);
} else {
return '';
}
return (!empty($this->masque)) ? http_build_query($this->masque) : '';
}
 
/**
74,10 → 65,6
* @return une chaine de caractère si l'identifiant est passé en paramètre, un tableau sinon
* */
public function getMasque($id = null) {
if (isset($id)) {
return $this->masque[self::PREFIXE.$id];
} else {
return $this->masque;
}
return isset($id) ? $this->masque[self::PREFIXE.$id] : $this->masque;
}
}