Subversion Repositories eFlore/Applications.del

Rev

Rev 1249 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?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;
        protected $navigation;
        protected $masque;
        protected $gestionBdd;
        protected $sansLimite = false;
        
        //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);
                
                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);
                }
                
                if ($this->navigation = $this->creerNavigation()) {
                        $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->creerGestionBdd($this->navigation, Config::get('schemaBdd'));
        }
        
        /**
         * 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;
                
        }
        
        /**
         * Créer l'objet navigation avec les paramètres
         * */
        private function creerNavigation() {
                return ($this->navigation = new Navigation($this->parametres));
        }
        
        /**
         * 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;
        }
        
        /**
         * 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->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;
        }
        
        public function getRestClient() {
                if (!isset($this->restClient)) {
                        $this->restClient = new RestClient();
                }
                return $this->restClient;
        }
        
        /**
         * Récupérer l'objet Masque 
         * */
        public function getMasque() {
                return $this->masque;
        }
        
        /**
         * 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
         * */
        public function getParametre($cle) {
                $valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
                return $valeur;
        }
        
        /**
         * Enregistrer la valeur d'un paramètre
         * */
        public function setParametre($cle, $valeur) {
                $this->parametres[$cle] = $valeur;
        }
}
?>