New file |
0,0 → 1,296 |
<?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'); |
$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; |
} |
} |
?> |