Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 716 → Rev 723

/trunk/services/bibliotheque/Masque.php
New file
0,0 → 1,79
<?php
/**
* 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 $
*/
class Masque {
const prefixe = 'masque.';
private $masquesPossibles;
private $parametres;
private $masque;
/**
* Constructeur de la classe Masque
* @param $masquesPossibles la liste des masques autorisés séparé par des ','
* */
public function __construct($masquesPossibles, $parametres = null) {
if ($masquesPossibles == null) {
$message = 'La liste des masques possibles est obligatoire';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
$this->masquesPossibles = explode(',', $masquesPossibles);
$this->parametres = $parametres;
$this->chargerMasque();
}
/**
* Parcourir le tableau Paramètres pour trouver tous les champs masque
*/
public function chargerMasque() {
if ($this->parametres != null) {
foreach ($this->parametres as $id => $parametre) {
if (strpos($id, self::prefixe) === 0) {
if (in_array(str_replace(self::prefixe, '', $id), $this->masquesPossibles)) {
$this->masque[$id] = $parametre;
}
}
}
}
}
/**
* Retourner les masques sous forme de chaine
* @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 '';
}
}
/**
* Récupérer tout ou partie du masque
* @param String $id (optionnel) l'idenfiant du masque
* @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;
}
}
}
?>
/trunk/services/bibliotheque/Navigation.php
New file
0,0 → 1,126
<?php
/**
* 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 $
*/
class Navigation {
private $parametres;
private $urlNavigation;
private $total;
/**
* 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;
}
/**
* Obtenir la valeur courante de départ
* */
public function getDepart() {
return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0;
}
/**
* Obtenir la limite courante
* */
public function getLimite() {
return isset($this->parametres['navigation.limite']) ? $this->parametres['navigation.limite'] : 10;
}
/**
* 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
* */
private function obtenirUrlNavigation($depart, $limite) {
$parametres = $this->parametres;
$parametres['navigation.depart'] = $depart;
$parametres['navigation.limite'] = $limite;
$this->urlNavigation->setRequete($parametres);
$url = $this->urlNavigation->getURL();
return $url;
}
/**
* 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);
}
return $url;
}
/**
* Récupérer le lien pour afficher les images suivantes en fonction des paramètres
* */
public function recupererHrefSuivant() {
$departActuel = $this->getDepart();
$limite = $this->getLimite();
$departSuivant = $departActuel + $limite;
$url = null;
if ($departSuivant < $this->total) {
$url = $this->getUrl($departSuivant, $limite);
}
return $url;
}
/**
* Retourner le nombre total d'éléments
* */
public function getTotal() {
return $this->total;
}
/**
* Enregistrer le nombre total d'éléments
* @param int $total le nombre d'éléments
* */
public function setTotal($total) {
$this->total = $total;
}
}
?>
/trunk/services/bibliotheque/Conteneur.php
1,101 → 1,121
<?php
/**
* Le conteneur encapsule les classe Masque, Navigation et GestionBdd
* Il gère leur instanciation, ainsi que la récupération des paramètres depuis l'url ou
* les fichiers de configuration
*
* */
* @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 $
*/
class Conteneur {
protected $parametres = array();
protected $partages = array();
protected $masque = array();
protected $urlNavigation;
protected $total;
protected $parametres;
protected $navigation;
protected $masque;
protected $gestionBdd;
//TODO : initialiser tous les objets dans le conteneur
//TODO : créer un tableau de partage
/**
* Constructeur de la classe
* @param Array $parametres (optionnel) les paramètres additionnels à ajouter à ceux des fichiers de config
* */
public function __construct(array $parametres = null) {
$this->parametres = is_null($parametres) ? array() : $parametres;
}
/**
* Charger la configuration depuis le fichier
* @param String $chemin le chemin relatif depuis le dossier configurations du fichier
* */
public function chargerConfiguration($chemin) {
$cheminConfigurations = Config::get('chemin_configurations');
if ($cheminConfigurations == null || $cheminConfigurations == '') {
$message = 'Le chemin vers le répertoire Configurations n\'est pas renseigné';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
Config::charger($cheminConfigurations.DS.$chemin);
$this->chargerMasque();
$this->chargerUrl();
}
public function getDepart() {
return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0;
}
public function getLimite() {
return isset($this->parametres['navigation.limite']) ? $this->parametres['navigation.limite'] : 10;
}
private function chargerMasque() {
$masques = Config::get('masques_possibles');
$masquesPossibles = explode(',', $masques);
foreach ($this->parametres as $id => $parametre) {
if (strpos($id, 'masque.') === 0) {
if (in_array(str_replace('masque.', '', $id), $masquesPossibles)) {
$this->masque[$id] = $parametre;
}
}
if ($this->masque = $this->creerMasque()) {
$this->masque->chargerMasque();
} else {
$message = 'Erreur lors de la création du Masque';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
}
private function chargerUrl() {
$this->UrlNavigation = new Url(Config::get('url_service'));
$this->UrlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true);
}
public function getUrl($depart = null, $limite = null) {
if ($depart == null && $limite == null) {
return $this->urlNavigation;
if ($this->navigation = $this->creerNavigation()) {
$this->navigation->chargerUrl();
} else {
return $this->obtenirUrlNavigation($depart, $limite);
$message = 'Erreur lors de la création de la Navigation';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
}
$this->creerGestionBdd($this->navigation, Config::get('schemaBdd'));
}
/**
* 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['navigation.depart'] = $depart;
$parametres['navigation.limite'] = $limite;
* Créer l'objet Masque en fonction des configurations
* */
private function creerMasque() {
$this->masque = new Masque(Config::get('masques_possibles'), $this->parametres);
return $this->masque;
$this->UrlNavigation->setRequete($parametres);
$url = $this->UrlNavigation->getURL();
return $url;
}
public function getTotal() {
return $this->total;
/**
* Créer l'objet navigation avec les paramètres
* */
private function creerNavigation() {
return ($this->navigation = new Navigation($this->parametres));
}
public function setTotal($total) {
$this->total = $total;
/**
* Créer l'objet Gestion BDD
* */
private function creerGestionBdd($navigation, $schemaBdd) {
$this->gestionBdd = new GestionBdd($navigation, $schemaBdd);
}
/**
* Récupérer l'objet GestionBdd
* */
public function getGestionBdd() {
return $this->gestionBdd;
}
 
/**
* Récupérer l'objet Navigation
* */
public function getNavigation() {
return $this->navigation;
}
/**
* Créer l'entête en fonction des paramètres donnés
* */
public function getEntete() {
$entete = array();
$entete['masque'] = $this->getChaineMasque();
$entete['depart'] = $this->getDepart();
$entete['limite'] = $this->getLimite();
$entete['total'] = $this->getTotal();
$lienPrecedent = $this->recupererHrefPrecedent();
$entete['masque'] = $this->masque->getChaineMasque();
$entete['depart'] = $this->navigation->getDepart();
$entete['limite'] = $this->navigation->getLimite();
$entete['total'] = $this->navigation->getTotal();
$lienPrecedent = $this->navigation->recupererHrefPrecedent();
if ($lienPrecedent != null) {
$entete['entete.precedent'] = $lienPrecedent;
}
$lienSuivant = $this->recupererHrefSuivant();
$lienSuivant = $this->navigation->recupererHrefSuivant();
if ($lienSuivant) {
$entete['entete.suivant'] = $lienSuivant;
}
103,189 → 123,27
}
/**
* Récupérer le lien pour afficher les images précédentes en fonction des paramètres
* */
private function recupererHrefPrecedent() {
$departActuel = $this->getDepart();
$limite = $this->getLimite();
$departPrecedent = $departActuel - $limite;
$url = null;
if ($departActuel > 0) {
$url = $this->getUrl($departPrecedent, $limite);
}
return $url;
* Récupérer l'objet Masque
* */
public function getMasque() {
return $this->masque;
}
/**
* Récupérer le lien pour afficher les images suivantes en fonction des paramètres
* Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
* @param String $cle le nom du paramètre
* @return la valeur du paramètre
* */
private function recupererHrefSuivant() {
$departActuel = $this->getDepart();
$limite = $this->getLimite();
$departSuivant = $departActuel + $limite;
$url = null;
if ($departSuivant < $this->total) {
$url = $this->getUrl($departSuivant, $limite);
}
return $url;
}
public function getMasque($id = null) {
if (isset($id)) {
return $this->masque['masque.'.$id];
} else {
return $this->masque;
}
}
public function getChaineMasque() {
$chaine = array();
foreach ($this->masque as $id => $valeur) {
$chaine[] = $id.'='.$valeur;
}
return implode('&', $chaine);
}
public function getParametre($cle) {
$valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
return $valeur;
}
public function getParametreTableau($cle) {
$tableau = array();
$parametre = $this->getParametre($cle);
if (empty($parametre) === false) {
$tableauPartiel = explode(',', $parametre);
$tableauPartiel = array_map('trim', $tableauPartiel);
foreach ($tableauPartiel as $champ) {
if (strpos($champ, '=') === false) {
$tableau[] = trim($champ);
} else {
list($cle, $val) = explode('=', $champ);
$tableau[trim($cle)] = trim($val);
}
}
}
return $tableau;
}
 
/**
* Enregistrer la valeur d'un paramètre
* */
public function setParametre($cle, $valeur) {
$this->parametres[$cle] = $valeur;
}
 
public function getParametresUrl() {
if (!isset($this->partages['Parametres'])){
$this->partages['Parametres'] = new Parametres($this->parametres['parametres'], $this->getBdd());
}
return $this->partages['Parametres'];
}
 
public function getParametresUrlVerificateur() {
if (!isset($this->partages['ParametresVerificateur'])){
$parametres = $this->getParametresUrl();
$parametresAPI = $this->getParametreTableau('parametresAPI');
$this->partages['ParametresVerificateur'] = new ParametresVerificateur($parametres, $parametresAPI);
}
return $this->partages['ParametresVerificateur'];
}
 
public function getRessourcesUrl() {
if (!isset($this->partages['Ressources'])){
$this->partages['Ressources'] = new Ressources($this->parametres['ressources']);
}
return $this->partages['Ressources'];
}
 
public function getRessourcesUrlVerificateur() {
if (!isset($this->partages['RessourcesVerificateur'])){
$ressources = $this->getRessourcesUrl();
$projetsDispo = $this->getParametreTableau('projetsDispo');
$servicesDispo = $this->getParametreTableau('servicesDispo');
$this->partages['RessourcesVerificateur'] = new RessourcesVerificateur($ressources, $projetsDispo, $servicesDispo);
}
return $this->partages['RessourcesVerificateur'];
}
 
public function getVersionVerificateur() {
if (!isset($this->partages['VersionVerificateur'])){
$ressources = $this->getRessourcesUrl();
$parametres = $this->getParametresUrl();
$versions = $this->getVersions();
$this->partages['VersionVerificateur'] = new VersionVerificateur($ressources, $parametres, $versions);
}
return $this->partages['VersionVerificateur'];
}
 
public function getBdd() {
if (!isset($this->partages['Bdd'])){
$this->partages['Bdd'] = new Bdd();
}
return $this->partages['Bdd'];
}
 
public function getCacheSimple($options = array()) {
$cache = new CacheSimple($options);
return $cache;
}
 
public function getVersions() {
if (!isset($this->partages['Versions'])){
$parametres = $this->getParametresUrl();
$ressources = $this->getRessourcesUrl();
$bdd = $this->getBdd();
$versions = new Versions($parametres, $ressources, $bdd);
$this->partages['Versions'] = $versions;
}
return $this->partages['Versions'];
}
 
public function getProjet() {
if (!isset($this->partages['Projet'])){
$ressources = $this->getRessourcesUrl();
$projet = new Projet($ressources);
$projet->setCheminBase($this->getParametre('cheminBase'));
$projet->setCheminConfig($this->getParametre('chemin_configurations'));
$projet->setCheminBiblio($this->getParametre('chemin_bibliotheque'));
$projet->initialiser();
$projet->setParamsVerif($this->getParametresUrlVerificateur());
$projet->setRessourcesVerif($this->getRessourcesUrlVerificateur());
$projet->setVersionVerif($this->getVersionVerificateur());
$projet->setServiceGenerique($this->getServiceGenerique());
$this->partages['Projet'] = $projet;
}
return $this->partages['Projet'];
}
 
/**
* Créer la chaine de limite de requête en fonction des paramètres donnés
* */
public function getLimitSql() {
return ' LIMIT '.$this->getDepart().', '.$this->getLimite();
}
public function getSchemaBdd() {
return $this->getParametre('schemaBdd');
}
public function getServiceGenerique() {
$ressources = $this->getRessourcesUrl();
$classe = $ressources->getServiceClasse();
$classeGenerique = $classe.'Generique';
if ($ressources->getServiceNom() == 'noms' || $ressources->getServiceNom() == 'taxons') {
$service = new $classeGenerique($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getNomDao(), $this->getNomFormateur());
if ($classe == 'NomsListe') {
$service->setListeUrl($this->getParametre('listeUrl'));
}
} else if ($ressources->getServiceNom() == 'ontologies') {
$service = new $classeGenerique($this->getRessourcesUrl(), $this->getParametresUrl(), $this->getOntologiesDao(), $this->getOntologiesFormateur());
if ($classe == 'OntologiesListe') {
$service->setListeUrl($this->getParametre('listeUrlOntologies'));
}
}
 
return $service;
}
}
?>
/trunk/services/bibliotheque/GestionBdd.php
New file
0,0 → 1,91
<?php
/**
* Gestion BDD permet l'appel à l'objet BDD du framework,
* gère les noms de table en fonction du schéma de la table
* ainsi que la limite SQL en fonction de l'objet Navigation
 
* @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 $
*/
class GestionBdd {
private $bdd;
private $schemaBdd;
private $navigation;
/**
* Constructeur de la classe GestionBdd
* @param Navigation $navigation l'objet navigation issu du Conteneur, et contenant les informations de départ et limite
* @param String $schemaBdd (optionnel) le schéma de la base issu du fichier de config
* @param Bdd $bdd (optionnel) un objet Bdd pour la connection à la base de données
* */
public function __construct($navigation, $schemaBdd = null, $bdd = null) {
if ($navigation == null) {
$message = 'L\'objet Navigation est nécessaire pour configurer l\'objet GestionBdd';
$code = RestServeur::HTTP_CODE_ERREUR;
throw new Exception($message, $code);
} else {
$this->navigation = $navigation;
$this->schemaBdd = $schemaBdd;
if ($bdd == null) {
$this->bdd = new Bdd();
} else {
$this->bdd = $bdd;
}
}
}
/**
* Créer la chaine de limite de requête en fonction des paramètres donnés
* */
public function getLimitSql() {
return ' LIMIT '.$this->navigation->getDepart().', '.$this->navigation->getLimite();
}
/**
* Récupérer l'objet Bdd ou le créer s'il n'existe pas
* @return Bdd l'objet Bdd
* */
public function getBdd() {
if (!isset($this->bdd)){
$this->bdd = new Bdd();
}
return $this->bdd;
}
/** Formater un nom de table avec le schéma de la base de données, s'il existe
* @param String $table le nom de la table
* @param String $as (optionnel) l'alias de la table
* @return String la chaine de caractère sous la forme "schema.nomtable as nt"
* */
public function formaterTable($table, $as = null) {
$chaineTable = $table;
if ($this->schemaBdd != null) {
$chaineTable = $this->schemaBdd.'.'.$table;
}
if ($as != null && $as != '') {
$chaineTable .= ' as '.$as;
}
return $chaineTable.' ';
}
/** Formater des noms de table avec le schéma de la base de données, s'il existe
* @param Array $tables un tableau à deux dimensions contenant le nom et l'alias de la table
* Ex : Array("nom" => "as", "table" => "")
* @return String la chaine de caractère sous la forme "schema.nomtable as nt, schema.nomtable2 as nt2"
* */
public function formaterTables($tables) {
$tablesFormatees = array();
foreach ($tables as $nom => $as) {
$tablesFormatees[] = $this->formaterTable($nom, $as);
}
return implode(',', $tablesFormatees);
}
}
?>