/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; |
} |
} |