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