Subversion Repositories eFlore/Applications.del

Rev

Rev 1694 | 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 DEL
 * @package Commun
 * @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
 */
//TODO : initialiser tous les objets dans le conteneur
//TODO : créer un tableau de partage
class Conteneur {

        protected $parametres;
        protected $navigation;
        protected $masque;
        protected $gestionBdd;
        protected $sansLimite = false;

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

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

        /**
         * Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
         * et le transformer en tableau s'il est de la forme : "cle=valeur,cle=valeur,..."
         * @param String $cle le nom du paramètre
         * @return la valeur du paramètre
         */
        public function getParametreTableau($cle) {
                $tableau = array();
                $parametre = $this->getParametre($cle);
                if (empty($parametre) === false) {
                        $tableauPartiel = explode(',', $parametre);
                        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;
        }

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


        /**
         * 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 GestionBdd
         * */
        public function getGestionBdd() {
                return $this->gestionBdd;
        }

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

        public function getRestClient() {
                if (!isset($this->restClient)) {
                        $this->restClient = new RestClient();
                }
                return $this->restClient;
        }

        public function getControleAcces() {
                if (!isset($this->controleAcces)) {
                        $this->controleAcces = new ControleAcces($this);
                }
                return $this->controleAcces;
        }
}
?>