Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1793 → Rev 1794

/trunk/services/bibliotheque/Commun.php
File deleted
\ No newline at end of file
/trunk/services/bibliotheque/GestionUtilisateur.php
1,4 → 1,18
<?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;
/trunk/services/bibliotheque/ControleAcces.php
1,19 → 1,21
<?php
/**
* Classe de controle d'accès aux services
*
* Cette classe propose des méthodes permettant :
* - l'authentification http pour bloquer ou autoriser l'accès
* - de déterminer les droits des utilisateurs
*
* @category DEL
* @package Commun
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @author Jean-Pascal Milcent <jpm@tela-botanica.org>
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @copyright Copyright (c) 1999-2014, Tela Botanica (accueil@tela-botanica.org)
*/
* Classe de controle d'accès aux services de DEL.
*
* Cette classe propose des méthodes permettant :
* - l'authentification http pour bloquer ou autoriser l'accès
* - de déterminer les droits des utilisateurs
*
* @category DEL
* @package 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 ControleAcces {
 
private $conteneur;
/trunk/services/bibliotheque/Masque.php
1,19 → 1,23
<?php
// declare(encoding='UTF-8');
/**
* Navigation gère les url de navigation en fonction d'un départ et d'une limite
 
* @category php 5.2
* @package del
* @author Grégoire Duché <gregoire@tela-botanica.org>
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version $Id: Bdd.php 403 2012-02-22 14:35:20Z gduche $
* Gère les paramètres de type "masque..." utilisés dans l'URL.
*
* @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 Masque {
 
const prefixe = 'masque.';
const masqueGeneral = 'masque';
const PREFIXE = 'masque.';
const MASQUE_GENERAL = 'masque';
 
private $masquesPossibles;
private $parametres;
37,11 → 41,11
/**
* Parcourir le tableau Paramètres pour trouver tous les champs masque
*/
public function chargerMasque() {
private function chargerMasque() {
if ($this->parametres != null) {
foreach ($this->parametres as $id => $parametre) {
if (strpos($id, self::prefixe) === 0 || $id == self::masqueGeneral) {
if (in_array(str_replace(self::prefixe, '', $id), $this->masquesPossibles)) {
if (strpos($id, self::PREFIXE) === 0 || $id == self::MASQUE_GENERAL) {
if (in_array(str_replace(self::PREFIXE, '', $id), $this->masquesPossibles)) {
$this->masque[$id] = $parametre;
}
}
71,7 → 75,7
* */
public function getMasque($id = null) {
if (isset($id)) {
return $this->masque[self::prefixe.$id];
return $this->masque[self::PREFIXE.$id];
} else {
return $this->masque;
}
/trunk/services/bibliotheque/Navigation.php
1,4 → 1,5
<?php
// declare(encoding='UTF-8');
/**
* Navigation gère les url de navigation en fonction d'un départ et d'une limite
*
15,66 → 16,50
*/
class Navigation {
 
private $parametres;
private $conteneur;
private $parametresUrl;
private $urlNavigation;
private $total;
private $sansLimite;
 
/**
* Constructeur de la classe Navigation
* @param Array $parametres (optionnel) la liste des paramètre issus du Conteneur
* */
public function __construct($parametres = null) {
$this->parametres = $parametres;
* @param Array $parametresUrl (optionnel) la liste des paramètre issus du Conteneur
*/
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->setOption(Url::OPTION_ENCODER_VALEURS, true);
}
 
/**
* Obtenir la valeur courante de départ
* */
*/
public function getDepart() {
return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0;
return isset($this->getParametre('navigation.depart')) ? $this->getParametre('navigation.depart') : 0;
}
 
/**
* Obtenir la limite courante
* */
*/
public function getLimite() {
$limite = 10;
if (isset($this->parametres['navigation.limite']) && is_numeric($this->parametres['navigation.limite'])) {
$limite = $this->parametres['navigation.limite'];
$limite = ($limite < 1000) ? $limite : 1000;// Pour éviter les abus !
if (isset($this->getParametre('navigation.limite')) && is_numeric($this->getParametre('navigation.limite'))) {
$limiteParam = $this->getParametre('navigation.limite');
$limite = ($limiteParam < 1000) ? $limiteParam : 1000;// Pour éviter les abus !
}
return $limite;
}
 
/**
* Configurer l'Url de navigation en fonction du fichier de configuration
* */
public function chargerUrl() {
$this->urlNavigation = new Url(Config::get('url_service'));
$this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);
}
 
/**
* Obtenir l'url en fonction d'un départ et d'une limite donnée
* @param int $depart l'entier de départ
* @param int $limite le nombre d'éléments limite
* */
public function getUrl($depart = null, $limite = null) {
if ($depart == null && $limite == null) {
return $this->urlNavigation;
} else {
return $this->obtenirUrlNavigation($depart, $limite);
}
}
 
/**
* Récupérer l'url de navigation en concaténant d'éventuels paramètres
* @param $depart l'entier de départ de la recherche
* @param $limite le nombre de résultats à retourner
* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels
* */
* Récupérer l'url de navigation en concaténant d'éventuels paramètres
* @param $depart l'entier de départ de la recherche
* @param $limite le nombre de résultats à retourner
* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels
*/
private function obtenirUrlNavigation($depart, $limite) {
$parametres = $this->parametres;
$parametres = $this->parametresUrl;
$parametres['navigation.depart'] = $depart;
$parametres['navigation.limite'] = $limite;
 
84,17 → 69,15
}
 
/**
* Récupérer le lien pour afficher les images précédentes en fonction des paramètres
* */
* Récupérer le lien pour afficher les images précédentes en fonction des paramètres
*/
public function recupererHrefPrecedent() {
$departActuel = $this->getDepart();
$limite = $this->getLimite();
$departPrecedent = $departActuel - $limite;
 
$url = null;
 
if ($departActuel > 0) {
$url = $this->getUrl($departPrecedent, $limite);
$url = $this->obtenirUrlNavigation($departPrecedent, $limite);
}
return $url;
}
101,7 → 84,7
 
/**
* Récupérer le lien pour afficher les images suivantes en fonction des paramètres
* */
*/
public function recupererHrefSuivant() {
$departActuel = $this->getDepart();
$limite = $this->getLimite();
108,7 → 91,7
$departSuivant = $departActuel + $limite;
$url = null;
if ($departSuivant < $this->total) {
$url = $this->getUrl($departSuivant, $limite);
$url = $this->obtenirUrlNavigation($departSuivant, $limite);
}
return $url;
}
115,7 → 98,7
 
/**
* Retourner le nombre total d'éléments
* */
*/
public function getTotal() {
return $this->total;
}
123,8 → 106,42
/**
* Enregistrer le nombre total d'éléments
* @param int $total le nombre d'éléments
* */
*/
public function setTotal($total) {
$this->total = $total;
}
 
/**
* Changer la valeur de sans limite pour ne pas l'afficher dans l'entete
* */
public function setSansLimite() {
$this->sansLimite = true;
}
 
/**
* Créer l'entête en fonction des paramètres donnés
*/
public function getEntete() {
$entete = array();
$entete['masque'] = $this->conteneur->getMasque()->getChaineMasque();
 
$entete['total'] = $this->getTotal();
if ($this->sansLimite == false) {
$entete['depart'] = $this->getDepart();
$entete['limite'] = $this->getLimite();
 
$lienPrecedent = $this->recupererHrefPrecedent();
 
if ($lienPrecedent != null) {
$entete['href.precedent'] = $lienPrecedent;
}
 
$lienSuivant = $this->recupererHrefSuivant();
if ($lienSuivant) {
$entete['href.suivant'] = $lienSuivant;
}
}
 
return $entete;
}
}
/trunk/services/bibliotheque/Conteneur.php
1,4 → 1,5
<?php
// declare(encoding='UTF-8');
/**
* Le conteneur encapsule l'instanciation des classes ainsi que la récupération des paramètres depuis l'url ou
* les fichiers de configuration
18,10 → 19,7
class Conteneur {
 
protected $parametres;
protected $navigation;
protected $masque;
protected $gestionBdd;
protected $sansLimite = false;
protected $parametresUrl;
protected $partages = array();
 
/**
30,6 → 28,10
* */
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;
}
 
/**
73,89 → 75,30
}
 
//--------------------------------------------------------------------------------------------------------
// Ci-dessous méthode à revoir !
// TODO : Supprimer le chargement de configuration présent dans des fichiers séparés.
/**
* Charger la configuration depuis le fichier
* @param String $chemin le chemin relatif depuis le dossier configurations du fichier
* Charger la configuration depuis un fichier .ini.
*
* @param String $fichier le nom du fichier de configuration
* */
public function chargerConfiguration($chemin) {
public function chargerConfiguration($fichier) {
$cheminConfigurations = Config::get('chemin_configurations');
if ($cheminConfigurations == null || $cheminConfigurations == '') {
$message = 'Le chemin vers le répertoire Configurations n\'est pas renseigné';
$message = "Le parametre de configuration 'chemin_configurations' n'est pas défini.";
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
Config::charger($cheminConfigurations.DS.$chemin);
 
if ($this->masque = new Masque(Config::get('masques_possibles'), $this->parametres)) {
$this->masque->chargerMasque();
} else {
$message = 'Erreur lors de la création du Masque';
$cheminConfigService = $cheminConfigurations.DS.$fichier;
if (file_exists($cheminConfigService) === false) {
$message = "Le fichier de configuration du service est introuvable : $cheminConfigService ";
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
 
if ($this->navigation = new Navigation($this->parametres)) {
$this->navigation->chargerUrl();
} else {
$message = 'Erreur lors de la création de la Navigation';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
 
$this->gestionBdd = new GestionBdd($this->navigation, Config::get('schemaBdd'));
Config::charger($cheminConfigService);
}
 
/**
* Changer la valeur de sans limite pour ne pas l'afficher dans l'entete
* */
public function setSansLimite() {
$this->sansLimite = true;
}
 
/**
* Récupérer l'objet Navigation
* */
public function getNavigation() {
return $this->navigation;
}
 
/**
* Récupérer l'objet Masque
* */
public function getMasque() {
return $this->masque;
}
 
/**
* Créer l'entête en fonction des paramètres donnés
* */
public function getEntete() {
$entete = array();
$entete['masque'] = $this->masque->getChaineMasque();
 
$entete['total'] = $this->navigation->getTotal();
if ($this->sansLimite == false) {
$entete['depart'] = $this->navigation->getDepart();
$entete['limite'] = $this->navigation->getLimite();
 
$lienPrecedent = $this->navigation->recupererHrefPrecedent();
 
if ($lienPrecedent != null) {
$entete['href.precedent'] = $lienPrecedent;
}
 
$lienSuivant = $this->navigation->recupererHrefSuivant();
if ($lienSuivant) {
$entete['href.suivant'] = $lienSuivant;
}
}
 
return $entete;
}
//--------------------------------------------------------------------------------------------------------
// Ci-dessous méthode ok !
 
public function getBdd() {
if (!isset($this->partages['Bdd'])){
$this->partages['Bdd'] = new Bdd();
170,6 → 113,10
return $this->partages['restClient'];
}
 
public function getUrl($base) {
return new Url($base);
}
 
public function getControleAcces() {
if (!isset($this->partages['controleAcces'])) {
$this->partages['controleAcces'] = new ControleAcces($this);
176,5 → 123,18
}
return $this->partages['controleAcces'];
}
}
?>
 
public function getNavigation() {
if (!isset($this->partages['navigation'])) {
$this->partages['navigation'] = new Navigation($this, $this->parametresUrl);
}
return $this->partages['navigation'];
}
 
public function getMasque() {
if (!isset($this->partages['masque'])) {
$this->partages['masque'] = new Masque($this->getparametre('masques_possibles'), $this->parametresUrl);
}
return $this->partages['masque'];
}
}