* @author Delphine CAUQUIL * @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 ENTETE = 'entete'; 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; protected $urls = null; public function __construct(AppUrls $urls = null) { $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'); $this->urls = (is_null($urls)) ? new AppUrls() : $urls; 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) { if (isset($this->sortie[$position])) { $this->sortie[$position] .= $contenu; } else { $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::ENTETE && $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($nouvelleSortie) { $sortieActuelle = $this->getSortie(); foreach ($nouvelleSortie as $position => $nouveauContenu) { if ($nouveauContenu != '') { $contenuPrecedent = isset($sortieActuelle[$position]) ? $sortieActuelle[$position] : null; if ($nouveauContenu != $contenuPrecedent) { $this->setSortie($position, $nouveauContenu, true); } } } } /** * Vide toutes les sorties (utile en cas de classe statique et de module ajax) */ protected function viderSorties() { $this->setSortie(self::RENDU_TETE, ''); $this->setSortie(self::RENDU_CORPS, ''); $this->setSortie(self::RENDU_PIED, ''); $this->setSortie(self::RENDU_NAVIGATION, ''); $this->setSortie(self::RENDU_MENU, ''); } /** * 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, $parametres = array()) { $module = new $ClasseModule(); $sortiePrecedente = $this->getSortie(); // Initialisation du module demandé if (method_exists($module, 'initialiser')) { $module->initialiser(); } // Lancement de l'action demandé du module chargé if (method_exists($module, $action)) { if (isset($parametres)) { $module->$action($parametres); } else { $module->$action(); } $nouvelleSortie = $module->getSortie(); $this->fusionnerSortie($nouvelleSortie); } else { $m = "La méthode '$action' du controleur '$ClasseModule' est introuvable."; trigger_error($m, E_USER_ERROR); } } //+------------------------------------------------------------------------------------------------------+ // 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')); $donnees['prod'] = Config::get('info.prod'); $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'); $donnees['url_widget_remarques'] = Config::get('url_widget_remarques'); $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; } public function obtenirUrlBase() { $url = $this->urlBase->getURL(); return $url; } public function redirigerVers($url) { $url = str_replace('&', '&', $url); header("Location: $url"); } public function getParametresUrlListe() { $parametres = array( 'referentiel' => Registre::get('parametres.referentiel'), 'module' => 'liste', 'action' => 'liste', 'rang' => $this->rang, 'lettre' => $this->lettre ); return $parametres; } public function obtenirUrlListeFamille() { $parametres = $this->getParametresUrlListe(); $parametres['rang'] = 'F'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } public function obtenirUrlListeGenre() { $parametres = $this->getParametresUrlListe(); $parametres['rang'] = 'G'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } public function getParametresUrlResultat() { $parametres = array( 'referentiel' => Registre::get('parametres.referentiel'), 'module' => 'recherche', 'action' => Registre::get('parametres.action'), 'submit' => 'Rechercher', 'type_nom' => isset($_GET['type_nom']) ? $_GET['type_nom'] : 'nom_scientifique', 'nom' => isset($_GET['nom']) ? $_GET['nom'] : '' ); return $parametres; } public function obtenirUrlResultatDetermination() { $parametres = $this->getParametresUrlResultat(); $parametres['resultat'] = 'determination'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } public function obtenirUrlResultatAlphab() { $parametres = $this->getParametresUrlResultat(); $parametres['resultat'] = 'alphab'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } public function obtenirUrlResultatRetenu() { $parametres = $this->getParametresUrlResultat(); $parametres['resultat'] = 'retenu'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } public function obtenirUrlResultatDecompo() { $parametres = $this->getParametresUrlResultat(); $parametres['resultat'] = 'decompo'; $this->urlBase->setRequete($parametres); $url = $this->urlBase->getURL(); return $url; } } ?>