Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 76 | Rev 83 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Classe abstraite dont chaque controleur de l'application doit hériter.
5
 *
6
 * @category	PHP 5.2
7
 * @package		eflore-consultation
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
10
 * @copyright	2011 Tela-Botanica
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
13
 * @version		$Id$
14
 */
15
abstract class aControleur extends Controleur {
11 jpm 16
 
17
	const META_TITRE = 'titre';
18
	const META_DESCRIPTION = 'description';
19
	const META_TAGS = 'tags';
20
	const RENDU_TETE = 'tete';
21
	const RENDU_CORPS = 'corps';
22
	const RENDU_PIED = 'pied';
14 jpm 23
	const RENDU_NAVIGATION = 'navigation';
24
	const RENDU_MENU = 'menu';
11 jpm 25
 
26
	private $sortie = array();
61 jpm 27
	protected $urlBase = null;
28
	protected $urlCourante = null;
11 jpm 29
 
37 jpm 30
	public function __construct()  {
34 jpm 31
		$chemin = Config::get('chemin_modules').
36 jpm 32
			AppControleur::getNomDossierDepuisClasse(get_class($this)).DS.
34 jpm 33
			Config::get('dossier_squelettes').DS;
34
		Registre::set('tbf.chemin_squelettes', $chemin);
61 jpm 35
 
36
		$this->urlBase = Registre::get('eFlore.urlBase');
37
		$this->urlCourante = Registre::get('eFlore.urlCourante');
38
		$this->urlRedirection = Registre::get('eFlore.urlRedirection');
39
 
11 jpm 40
		parent::__construct();
41
	}
42
 
61 jpm 43
	//+------------------------------------------------------------------------------------------------------+
44
	// GESTION de l'AFFICHAGE en SORTIE
45
 
11 jpm 46
	/**
47
 	* Attribue une position de sortie à un contenu.
48
 	*/
49
	protected function setSortie($position, $contenu, $fusionner = false) {
50
		if ($this->verifierExistenceTypeSortie($position)) {
51
			if ($fusionner) {
79 jpm 52
				if (isset($this->sortie[$position])) {
53
					$this->sortie[$position] .= $contenu;
54
				} else {
55
					$this->sortie[$position] = $contenu;
56
				}
11 jpm 57
			} else {
58
				$this->sortie[$position] = $contenu;
59
			}
60
		}
61
	}
62
 
63
	/**
64
	 * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
65
	 * @param string le type de sortie à tester.
66
	 * @return bool true si le type de sortie est valide, sinon false.
67
	 */
68
	private function verifierExistenceTypeSortie($type) {
69
		$existe = true;
70
		if ($type != self::RENDU_TETE &&
71
			$type != self::RENDU_CORPS &&
72
			$type != self::RENDU_PIED &&
14 jpm 73
			$type != self::RENDU_NAVIGATION &&
74
			$type != self::RENDU_MENU &&
11 jpm 75
			$type != self::META_TITRE &&
76
			$type != self::META_DESCRIPTION &&
77
			$type != self::META_TAGS) {
78
			trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
79
			$existe = false;
80
		}
81
		return $existe;
82
	}
83
 
84
	/**
85
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
86
	 */
87
	public function getSortie() {
88
		return $this->sortie;
89
	}
10 jpm 90
 
11 jpm 91
	/**
61 jpm 92
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
93
	 * @param array le tableau à fusionner
94
	 */
79 jpm 95
	private function fusionnerSortie($nouvelleSortie) {
96
		$sortieActuelle = $this->getSortie();
97
		foreach ($nouvelleSortie as $position => $nouveauContenu) {
98
			if ($nouveauContenu != '') {
99
				$contenuPrecedent = isset($sortieActuelle[$position]) ? $sortieActuelle[$position] : null;
100
				if ($nouveauContenu != $contenuPrecedent) {
101
					$this->setSortie($position, $nouveauContenu, true);
102
				}
103
			}
104
		}
61 jpm 105
	}
106
 
107
	/**
11 jpm 108
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
41 jpm 109
	 * Permet à une action d'un module donnée de charger le résultat d'une autre action de module.
11 jpm 110
	 */
111
	protected function executerAction($ClasseModule, $action) {
112
		$module = new $ClasseModule();
79 jpm 113
		$sortiePrecedente = $this->getSortie();
11 jpm 114
		$module->$action();
79 jpm 115
		$nouvelleSortie = $module->getSortie();
116
		$this->fusionnerSortie($nouvelleSortie);
11 jpm 117
	}
118
 
61 jpm 119
	//+------------------------------------------------------------------------------------------------------+
120
	// GESTION du VUES COMMUNES
11 jpm 121
	/**
41 jpm 122
	 * Charge un squelette de vue depuis l'emplacement commune.
123
	 * @param String $tpl le nom du squelette à charger sans l'extenssion de fichier.
124
	 * @param Array $donnees les données à passer au squelette PHP.
125
	 */
126
	private function getVueCommune($tpl, $donnees) {
127
		$cheminOrigine = $this->getCheminSquelette();
128
		$this->setCheminSquelette(Config::get('chemin_squelettes'));
129
		$vue = $this->getVue($tpl, $donnees);
130
		$this->setCheminSquelette($cheminOrigine);
131
		return $vue;
132
	}
133
 
134
	/**
11 jpm 135
	 * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
136
	 */
47 jpm 137
	public function chargerEnteteGeneral() {
11 jpm 138
		$donnees['appli'] = Framework::getInfoAppli();
41 jpm 139
		$donnees['i18n'] = array_merge(I18n::get('Entete'), I18n::get('General'));
140
		$donnees['referentiel_titre'] = I18n::get('Referentiels-titres.'.Registre::get('parametres.referentiel'));
141
 
142
		$this->setSortie(self::RENDU_TETE, $this->getVueCommune('entete_page', $donnees));
143
	}
144
 
145
	/**
47 jpm 146
	 * Pour mutualiser la création du menu de l'application, sa gestion est gérée dans cette classe.
147
	 */
148
	public function chargerMenuGeneral() {
149
		$donnees['appli'] = Framework::getInfoAppli();
150
		$donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
151
		$donnees['courrielContact'] = Config::get('courriel_contact');
152
 
153
		$this->setSortie(self::RENDU_MENU, $this->getVueCommune('menu', $donnees));
154
	}
155
 
156
	/**
41 jpm 157
	 * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
158
	 */
47 jpm 159
	public function chargerPiedGeneral() {
41 jpm 160
		$donnees['appli'] = Framework::getInfoAppli();
27 jpm 161
		$donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
41 jpm 162
		$donnees['courrielContact'] = Config::get('courriel_contact');
27 jpm 163
 
41 jpm 164
		$this->setSortie(self::RENDU_PIED, $this->getVueCommune('pied_page', $donnees));
11 jpm 165
	}
27 jpm 166
 
61 jpm 167
	//+------------------------------------------------------------------------------------------------------+
168
	// GESTION du CHARGEMENT des CLASSES MÉTIERS
169
	protected function getEfloreNoms() {
170
		if (! isset($this->EfloreNoms)) {
171
			$this->EfloreNoms = new Noms();
27 jpm 172
		}
61 jpm 173
		return $this->EfloreNoms;
174
	}
175
 
176
	protected function getEfloreTaxons() {
177
		if (! isset($this->EfloreTaxons)) {
178
			$this->EfloreTaxons = new Taxons();
179
		}
180
		return $this->EfloreTaxons;
181
	}
182
 
183
	//+------------------------------------------------------------------------------------------------------+
184
	// GESTION des URLs
185
	protected function obtenirUrlBase() {
186
		$url = $this->urlBase->getURL();
27 jpm 187
		return $url;
188
	}
61 jpm 189
 
69 delphine 190
	protected function redirigerVers($url) {
191
		$url = str_replace('&amp;', '&', $url);
192
		header("Location: $url");
193
	}
194
 
61 jpm 195
	private function getParametresUrlListe() {
196
		$parametres = array(
197
			'referentiel' => Registre::get('parametres.referentiel'),
198
			'module' => 'liste',
199
			'action' => 'liste',
200
			'rang' => $this->rang,
201
			'lettre' => $this->lettre
202
		);
203
		return $parametres;
204
	}
205
 
206
	protected function obtenirUrlListeFamille() {
207
		$parametres = $this->getParametresUrlListe();
208
		$parametres['rang'] = 'F';
209
		$this->urlBase->setRequete($parametres);
210
		$url = $this->urlBase->getURL();
211
		return $url;
212
	}
213
 
214
	protected function obtenirUrlListeGenre() {
215
		$parametres = $this->getParametresUrlListe();
216
		$parametres['rang'] = 'G';
217
		$this->urlBase->setRequete($parametres);
218
		$url = $this->urlBase->getURL();
219
		return $url;
220
	}
221
 
69 delphine 222
	private function getParametresUrlRecherche() {
223
		$parametres = array(
224
			'referentiel' => Registre::get('parametres.referentiel'),
76 delphine 225
			'module' => 'recherche',
226
			'action' => 'rechercheSimple',
69 delphine 227
			'submit' => 'Rechercher'
228
		);
229
		return $parametres;
230
	}
61 jpm 231
 
69 delphine 232
	protected function obtenirUrlRechercheSimple($nom = null, $type = 'nom_scientifique') {
233
		$parametres = $this->getParametresUrlRecherche();
234
		$parametres['type_nom'] = $type;
235
		$parametres['nom'] = $nom;
236
		$this->urlBase->setRequete($parametres);
237
		$url = $this->urlBase->getURL();
61 jpm 238
		return $url;
239
	}
69 delphine 240
 
241
	private function getParametresUrlFiche() {
242
		$parametres = array(
243
			'referentiel' => Registre::get('parametres.referentiel'),
244
			'module' => 'fiche',
245
			'action' => 'fiche'
246
		);
247
		return $parametres;
248
	}
249
 
250
	protected function obtenirUrlFiche($numNom) {
251
		$parametres = $this->getParametresUrlFiche();
252
		$parametres['nn'] = $numNom;
253
		$this->urlBase->setRequete($parametres);
254
		$url = $this->urlBase->getURL();
255
		return $url;
256
	}
10 jpm 257
}
258
?>