Subversion Repositories eFlore/Applications.del

Rev

Blame | Last modification | View Log | RSS feed

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

        protected $parametres;
        protected $partages = array();

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

        //--------------------------------------------------------------------------------------------------------
        // TODO : Supprimer le chargement de configuration présent dans des fichiers séparés.
        /**
         * Charger la configuration depuis un fichier .ini.
         *
         * @param String $fichier le nom du fichier de configuration
         * */
        public function chargerConfiguration($fichier) {
                $cheminConfigurations = Config::get('chemin_configurations');
                if ($cheminConfigurations == null || $cheminConfigurations == '') {
                        $message = "Le parametre de configuration 'chemin_configurations' n'est pas défini.";
                        $code = RestServeur::HTTP_CODE_ERREUR;
                        throw new Exception($message, $code);
                }

                $cheminConfigService = $cheminConfigurations.$fichier;
                if (file_exists($cheminConfigService) === false) {
                        $nomClasse = get_class($this);
                        $message = "Classe $nomClasse : le fichier de configuration du service est introuvable : $cheminConfigService ";
                        $code = RestServeur::HTTP_CODE_ERREUR;
                        throw new Exception($message, $code);
                }

                Config::charger($cheminConfigService);
        }

        public function getBdd() {
                if (!isset($this->partages['Bdd'])){
                        $this->partages['Bdd'] = new Bdd();
                }
                return $this->partages['Bdd'];
        }

        public function getRestClient() {
                if (!isset($this->partages['restClient'])){
                        $this->partages['restClient'] = new RestClient();
                }
                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);
                }
                return $this->partages['controleAcces'];
        }

        public function getNavigation() {
                if (!isset($this->partages['navigation'])) {
                        $this->partages['navigation'] = new Navigation($this);
                }
                return $this->partages['navigation'];
        }

        public function getContexte() {
                if (!isset($this->partages['contexte'])) {
                        $this->partages['contexte'] = new Contexte($this, $_SERVER, $_GET, $_POST, $_SESSION, $_COOKIE);
                }
                return $this->partages['contexte'];
        }

        public function getUtilisateur() {
                if (!isset($this->partages['utilisateur'])) {
                        $this->partages['utilisateur'] = new GestionUtilisateur($this);
                }
                return $this->partages['utilisateur'];
        }

        public function getSyndicationOutils() {
                if (!isset($this->partages['syndicationOutils'])) {
                        $this->partages['syndicationOutils'] = new SyndicationOutils($this);
                }
                return $this->partages['syndicationOutils'];
        }

        public function getParametresFiltrage() {
                if (!isset($this->partages['parametresFiltrage'])) {
                        $this->partages['parametresFiltrage'] = new ParametresFiltrage($this);
                }
                return $this->partages['parametresFiltrage'];
        }

        public function getSql() {
                if (!isset($this->partages['sql'])) {
                        $this->partages['sql'] = new Sql($this);
                }
                return $this->partages['sql'];
        }
        
        public function getSquelettePhp() {
                if (!isset($this->partages['SquelettePhp'])) {
                        $this->partages['SquelettePhp'] = new SquelettePhp();
                }
                return $this->partages['SquelettePhp'];
        }
        
        public function getMessagerie() {
                if (!isset($this->partages['Messagerie'])) {
                        $this->partages['Messagerie'] = new TelaBotanica\Del\Commun\Messagerie($this);
                }
                return $this->partages['Messagerie'];
        }
}