Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 41 | Rev 61 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe abstraite dont chaque controleur de l'application doit hériter.
 *
 * @category    PHP 5.2
 * @package             eflore-consultation
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author              Delphine CAUQUIL <delphine@tela-botanica.org>
 * @copyright   2011 Tela-Botanica
 * @license             http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 * @license             http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
 * @version             $Id$
 */
abstract class aControleur extends Controleur {
        
        const META_TITRE = 'titre';
        const META_DESCRIPTION = 'description';
        const META_TAGS = 'tags';
        const RENDU_TETE = 'tete';
        const RENDU_CORPS = 'corps';
        const RENDU_PIED = 'pied';
        const RENDU_NAVIGATION = 'navigation';
        const RENDU_MENU = 'menu';
        
        private $sortie = array();
        private $parametres = array();
        protected $url = null;
        
        public function __construct()  {
                $chemin = Config::get('chemin_modules').
                        AppControleur::getNomDossierDepuisClasse(get_class($this)).DS.
                        Config::get('dossier_squelettes').DS;
                Registre::set('tbf.chemin_squelettes', $chemin);
                $this->parametres = Registre::get('parametres');
                $this->url = $this->parametres['url'];
                parent::__construct();
        }
        
        /**
        * Attribue une position de sortie à un contenu.
        */
        protected function setSortie($position, $contenu, $fusionner = false) {
                if ($this->verifierExistenceTypeSortie($position)) {
                        if ($fusionner) {
                                $this->sortie[$position] .= $contenu;
                        } else {
                                $this->sortie[$position] = $contenu;
                        }
                }
        }
        
        /**
         * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
         * @param string le type de sortie à tester.
         * @return bool true si le type de sortie est valide, sinon false.
         */
        private function verifierExistenceTypeSortie($type) {
                $existe = true;
                if ($type != self::RENDU_TETE &&
                        $type != self::RENDU_CORPS &&
                        $type != self::RENDU_PIED &&
                        $type != self::RENDU_NAVIGATION &&
                        $type != self::RENDU_MENU &&
                        $type != self::META_TITRE &&
                        $type != self::META_DESCRIPTION &&
                        $type != self::META_TAGS) {
                        trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
                        $existe = false;
                }
                return $existe;
        }
        
        /**
         * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
         */
        public function getSortie() {
                return $this->sortie;
        }

        /**
         * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
         * Permet à une action d'un module donnée de charger le résultat d'une autre action de module.
         */
        protected function executerAction($ClasseModule, $action) {
                $module = new $ClasseModule();
                $module->$action();
                $this->fusionnerSortie($module->getSortie());
                
        }
        
        /**
         * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
         * @param array le tableau à fusionner
         */
        private function fusionnerSortie($sortie) {
                $this->sortie = array_merge($this->sortie, $sortie);
        }
        
        /**
         * Charge un squelette de vue depuis l'emplacement commune. 
         * @param String $tpl le nom du squelette à charger sans l'extenssion de fichier.
         * @param Array $donnees les données à passer au squelette PHP.
         */
        private function getVueCommune($tpl, $donnees) {
                $cheminOrigine = $this->getCheminSquelette();
                $this->setCheminSquelette(Config::get('chemin_squelettes'));
                $vue = $this->getVue($tpl, $donnees);
                $this->setCheminSquelette($cheminOrigine);
                return $vue;
        }
        
        /**
         * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
         */
        public function chargerEnteteGeneral() {
                $donnees['appli'] = Framework::getInfoAppli();
                $donnees['i18n'] = array_merge(I18n::get('Entete'), I18n::get('General'));
                $donnees['referentiel_titre'] = I18n::get('Referentiels-titres.'.Registre::get('parametres.referentiel'));
                
                $this->setSortie(self::RENDU_TETE, $this->getVueCommune('entete_page', $donnees));
        }
        
        /**
         * Pour mutualiser la création du menu de l'application, sa gestion est gérée dans cette classe.
         */
        public function chargerMenuGeneral() {
                $donnees['appli'] = Framework::getInfoAppli();
                $donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
                $donnees['courrielContact'] = Config::get('courriel_contact');
                
                $this->setSortie(self::RENDU_MENU, $this->getVueCommune('menu', $donnees));
        }
        
        /**
         * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
         */
        public function chargerPiedGeneral() {
                $donnees['appli'] = Framework::getInfoAppli();
                $donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
                $donnees['courrielContact'] = Config::get('courriel_contact');
                
                $this->setSortie(self::RENDU_PIED, $this->getVueCommune('pied_page', $donnees));
        }
        
        protected function obtenirUrlRecherche($txt = null) {
                $this->url->setRequete(false);
                $this->url->setVariableRequete('module', 'Recherche');
                $this->url->setVariableRequete('action', 'rechercher');
                if (!is_null($txt)) {
                        $this->url->setVariableRequete('recherche', $txt);
                }
                $url = $this->url->getURL();
                $this->url->unsetVariablesRequete(array('module', 'action', 'recherche'));
                return $url;
        }
}
?>