Rev 1059 | 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 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'));$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ÉTIERSprotected 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;}}?>