Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 61 | Rev 79 | 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();
        protected $urlBase = null;
        protected $urlCourante = 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->urlBase = Registre::get('eFlore.urlBase');
                $this->urlCourante = Registre::get('eFlore.urlCourante');
                $this->urlRedirection = Registre::get('eFlore.urlRedirection');
                
                parent::__construct();
        }
        
        //+------------------------------------------------------------------------------------------------------+
        // GESTION de l'AFFICHAGE en SORTIE
        
        /**
        * 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;
        }

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

        /**
         * 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());
                
        }
        
        //+------------------------------------------------------------------------------------------------------+
        // GESTION du VUES COMMUNES
        /**
         * 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));
        }
        
        //+------------------------------------------------------------------------------------------------------+
        // GESTION du CHARGEMENT des CLASSES MÉTIERS
        protected function getEfloreNoms() {
                if (! isset($this->EfloreNoms)) {
                        $this->EfloreNoms = new Noms();
                }
                return $this->EfloreNoms;
        }
        
        protected function getEfloreTaxons() {
                if (! isset($this->EfloreTaxons)) {
                        $this->EfloreTaxons = new Taxons();
                }
                return $this->EfloreTaxons;
        }
        
        //+------------------------------------------------------------------------------------------------------+
        // GESTION des URLs
        protected function obtenirUrlBase() {
                $url = $this->urlBase->getURL();
                return $url;
        }
        
        protected function redirigerVers($url) {
                $url = str_replace('&amp;', '&', $url);
                header("Location: $url");
        }
        
        private function getParametresUrlListe() {
                $parametres = array(
                        'referentiel' => Registre::get('parametres.referentiel'),
                        'module' => 'liste',
                        'action' => 'liste',
                        'rang' => $this->rang,
                        'lettre' => $this->lettre
                );
                return $parametres;
        }
        
        protected function obtenirUrlListeFamille() {
                $parametres = $this->getParametresUrlListe();
                $parametres['rang'] = 'F';
                $this->urlBase->setRequete($parametres);
                $url = $this->urlBase->getURL();
                return $url;
        }
        
        protected function obtenirUrlListeGenre() {
                $parametres = $this->getParametresUrlListe();
                $parametres['rang'] = 'G';
                $this->urlBase->setRequete($parametres);
                $url = $this->urlBase->getURL();
                return $url;
        }
        
        private function getParametresUrlRecherche() {
                $parametres = array(
                        'referentiel' => Registre::get('parametres.referentiel'),
                        'module' => 'recherche-simple',
                        'action' => 'rechercheNom',
                        'submit' => 'Rechercher'
                );
                return $parametres;
        }
        
        protected function obtenirUrlRechercheSimple($nom = null, $type = 'nom_scientifique') {
                $parametres = $this->getParametresUrlRecherche();
                $parametres['module'] = 'recherche-simple';
                $parametres['type_nom'] = $type;
                $parametres['nom'] = $nom;
                $this->urlBase->setRequete($parametres);
                $url = $this->urlBase->getURL();
                return $url;
        }
        
        private function getParametresUrlFiche() {
                $parametres = array(
                        'referentiel' => Registre::get('parametres.referentiel'),
                        'module' => 'fiche',
                        'action' => 'fiche'
                );
                return $parametres;
        }
        
        protected function obtenirUrlFiche($numNom) {
                $parametres = $this->getParametresUrlFiche();
                $parametres['nn'] = $numNom;
                $this->urlBase->setRequete($parametres);
                $url = $this->urlBase->getURL();
                return $url;
        }
}
?>