Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 216 | Rev 517 | 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 {
106 jpm 16
 
11 jpm 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';
494 jpm 25
	const RENDU_SCRIPT = 'scripts';
26
	const RENDU_STYLE = 'styles';
106 jpm 27
 
11 jpm 28
	private $sortie = array();
61 jpm 29
	protected $urlBase = null;
30
	protected $urlCourante = null;
155 delphine 31
	protected $urls = null;
106 jpm 32
 
155 delphine 33
	public function __construct(AppUrls $urls = null)  {
34 jpm 34
		$chemin = Config::get('chemin_modules').
36 jpm 35
			AppControleur::getNomDossierDepuisClasse(get_class($this)).DS.
34 jpm 36
			Config::get('dossier_squelettes').DS;
37
		Registre::set('tbf.chemin_squelettes', $chemin);
106 jpm 38
 
61 jpm 39
		$this->urlBase = Registre::get('eFlore.urlBase');
40
		$this->urlCourante = Registre::get('eFlore.urlCourante');
41
		$this->urlRedirection = Registre::get('eFlore.urlRedirection');
155 delphine 42
		$this->urls = (is_null($urls)) ? new AppUrls() : $urls;
494 jpm 43
 
11 jpm 44
		parent::__construct();
45
	}
106 jpm 46
 
61 jpm 47
	//+------------------------------------------------------------------------------------------------------+
48
	// GESTION de l'AFFICHAGE en SORTIE
106 jpm 49
 
11 jpm 50
	/**
51
 	* Attribue une position de sortie à un contenu.
52
 	*/
53
	protected function setSortie($position, $contenu, $fusionner = false) {
54
		if ($this->verifierExistenceTypeSortie($position)) {
55
			if ($fusionner) {
79 jpm 56
				if (isset($this->sortie[$position])) {
57
					$this->sortie[$position] .= $contenu;
58
				} else {
59
					$this->sortie[$position] = $contenu;
60
				}
11 jpm 61
			} else {
62
				$this->sortie[$position] = $contenu;
63
			}
64
		}
65
	}
106 jpm 66
 
11 jpm 67
	/**
68
	 * Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
69
	 * @param string le type de sortie à tester.
70
	 * @return bool true si le type de sortie est valide, sinon false.
71
	 */
72
	private function verifierExistenceTypeSortie($type) {
73
		$existe = true;
74
		if ($type != self::RENDU_TETE &&
75
			$type != self::RENDU_CORPS &&
76
			$type != self::RENDU_PIED &&
494 jpm 77
			$type != self::RENDU_SCRIPT &&
78
			$type != self::RENDU_STYLE &&
14 jpm 79
			$type != self::RENDU_NAVIGATION &&
80
			$type != self::RENDU_MENU &&
11 jpm 81
			$type != self::META_TITRE &&
82
			$type != self::META_DESCRIPTION &&
83
			$type != self::META_TAGS) {
84
			trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
85
			$existe = false;
86
		}
87
		return $existe;
88
	}
106 jpm 89
 
11 jpm 90
	/**
91
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
92
	 */
93
	public function getSortie() {
94
		return $this->sortie;
95
	}
10 jpm 96
 
11 jpm 97
	/**
61 jpm 98
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
99
	 * @param array le tableau à fusionner
100
	 */
79 jpm 101
	private function fusionnerSortie($nouvelleSortie) {
102
		$sortieActuelle = $this->getSortie();
103
		foreach ($nouvelleSortie as $position => $nouveauContenu) {
104
			if ($nouveauContenu != '') {
105
				$contenuPrecedent = isset($sortieActuelle[$position]) ? $sortieActuelle[$position] : null;
106
				if ($nouveauContenu != $contenuPrecedent) {
107
					$this->setSortie($position, $nouveauContenu, true);
108
				}
109
			}
110
		}
61 jpm 111
	}
112
 
113
	/**
11 jpm 114
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
41 jpm 115
	 * Permet à une action d'un module donnée de charger le résultat d'une autre action de module.
11 jpm 116
	 */
216 delphine 117
	protected function executerAction($ClasseModule, $action, $parametres = array()) {
11 jpm 118
		$module = new $ClasseModule();
79 jpm 119
		$sortiePrecedente = $this->getSortie();
83 jpm 120
		// Initialisation du module demandé
121
		if (method_exists($module, 'initialiser')) {
122
			$module->initialiser();
123
		}
124
		// Lancement de l'action demandé du module chargé
125
		if (method_exists($module, $action)) {
216 delphine 126
			if (isset($parametres)) {
127
				$module->$action($parametres);
128
			} else {
129
				$module->$action();
130
			}
83 jpm 131
			$nouvelleSortie = $module->getSortie();
132
			$this->fusionnerSortie($nouvelleSortie);
133
		} else {
134
			$m = "La méthode '$action' du controleur '$ClasseModule' est introuvable.";
135
			trigger_error($m, E_USER_ERROR);
106 jpm 136
		}
11 jpm 137
	}
106 jpm 138
 
61 jpm 139
	//+------------------------------------------------------------------------------------------------------+
140
	// GESTION du VUES COMMUNES
11 jpm 141
	/**
106 jpm 142
	 * Charge un squelette de vue depuis l'emplacement commune.
41 jpm 143
	 * @param String $tpl le nom du squelette à charger sans l'extenssion de fichier.
144
	 * @param Array $donnees les données à passer au squelette PHP.
145
	 */
146
	private function getVueCommune($tpl, $donnees) {
147
		$cheminOrigine = $this->getCheminSquelette();
148
		$this->setCheminSquelette(Config::get('chemin_squelettes'));
149
		$vue = $this->getVue($tpl, $donnees);
150
		$this->setCheminSquelette($cheminOrigine);
151
		return $vue;
152
	}
106 jpm 153
 
41 jpm 154
	/**
11 jpm 155
	 * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
156
	 */
47 jpm 157
	public function chargerEnteteGeneral() {
11 jpm 158
		$donnees['appli'] = Framework::getInfoAppli();
41 jpm 159
		$donnees['i18n'] = array_merge(I18n::get('Entete'), I18n::get('General'));
160
		$donnees['referentiel_titre'] = I18n::get('Referentiels-titres.'.Registre::get('parametres.referentiel'));
106 jpm 161
 
41 jpm 162
		$this->setSortie(self::RENDU_TETE, $this->getVueCommune('entete_page', $donnees));
163
	}
106 jpm 164
 
41 jpm 165
	/**
47 jpm 166
	 * Pour mutualiser la création du menu de l'application, sa gestion est gérée dans cette classe.
167
	 */
168
	public function chargerMenuGeneral() {
169
		$donnees['appli'] = Framework::getInfoAppli();
170
		$donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
171
		$donnees['courrielContact'] = Config::get('courriel_contact');
106 jpm 172
 
47 jpm 173
		$this->setSortie(self::RENDU_MENU, $this->getVueCommune('menu', $donnees));
174
	}
106 jpm 175
 
47 jpm 176
	/**
41 jpm 177
	 * Pour mutualiser la création du pied de page de l'application, sa gestion est gérée dans cette classe.
178
	 */
47 jpm 179
	public function chargerPiedGeneral() {
41 jpm 180
		$donnees['appli'] = Framework::getInfoAppli();
27 jpm 181
		$donnees['i18n'] = array_merge(I18n::get('Pied'), I18n::get('General'));
41 jpm 182
		$donnees['courrielContact'] = Config::get('courriel_contact');
106 jpm 183
 
41 jpm 184
		$this->setSortie(self::RENDU_PIED, $this->getVueCommune('pied_page', $donnees));
11 jpm 185
	}
106 jpm 186
 
61 jpm 187
	//+------------------------------------------------------------------------------------------------------+
188
	// GESTION du CHARGEMENT des CLASSES MÉTIERS
189
	protected function getEfloreNoms() {
190
		if (! isset($this->EfloreNoms)) {
191
			$this->EfloreNoms = new Noms();
27 jpm 192
		}
61 jpm 193
		return $this->EfloreNoms;
194
	}
106 jpm 195
 
61 jpm 196
	protected function getEfloreTaxons() {
197
		if (! isset($this->EfloreTaxons)) {
198
			$this->EfloreTaxons = new Taxons();
199
		}
200
		return $this->EfloreTaxons;
201
	}
106 jpm 202
 
155 delphine 203
	public function obtenirUrlBase() {
61 jpm 204
		$url = $this->urlBase->getURL();
27 jpm 205
		return $url;
206
	}
494 jpm 207
 
155 delphine 208
	public function redirigerVers($url) {
69 delphine 209
		$url = str_replace('&amp;', '&', $url);
210
		header("Location: $url");
211
	}
494 jpm 212
 
155 delphine 213
	public function getParametresUrlListe() {
61 jpm 214
		$parametres = array(
155 delphine 215
					'referentiel' => Registre::get('parametres.referentiel'),
216
					'module' => 'liste',
217
					'action' => 'liste',
218
					'rang' => $this->rang,
219
					'lettre' => $this->lettre
61 jpm 220
		);
221
		return $parametres;
222
	}
494 jpm 223
 
155 delphine 224
	public function obtenirUrlListeFamille() {
61 jpm 225
		$parametres = $this->getParametresUrlListe();
226
		$parametres['rang'] = 'F';
227
		$this->urlBase->setRequete($parametres);
228
		$url = $this->urlBase->getURL();
229
		return $url;
230
	}
494 jpm 231
 
155 delphine 232
	public function obtenirUrlListeGenre() {
61 jpm 233
		$parametres = $this->getParametresUrlListe();
234
		$parametres['rang'] = 'G';
235
		$this->urlBase->setRequete($parametres);
236
		$url = $this->urlBase->getURL();
237
		return $url;
238
	}
106 jpm 239
 
494 jpm 240
 
241
 
155 delphine 242
	public function getParametresUrlResultat() {
69 delphine 243
		$parametres = array(
155 delphine 244
					'referentiel' => Registre::get('parametres.referentiel'),
245
					'module' => 'recherche',
246
					'action' => Registre::get('parametres.action'),
247
					'submit' => 'Rechercher',
248
					'type_nom' => isset($_GET['type_nom']) ? $_GET['type_nom'] : 'nom_scientifique',
249
					'nom' => isset($_GET['nom']) ? $_GET['nom'] : ''
69 delphine 250
		);
251
		return $parametres;
252
	}
494 jpm 253
 
155 delphine 254
	public function obtenirUrlResultatDetermination() {
83 jpm 255
		$parametres = $this->getParametresUrlResultat();
106 jpm 256
		$parametres['resultat'] = 'determination';
83 jpm 257
		$this->urlBase->setRequete($parametres);
258
		$url = $this->urlBase->getURL();
259
		return $url;
260
	}
494 jpm 261
 
155 delphine 262
	public function obtenirUrlResultatAlphab() {
106 jpm 263
		$parametres = $this->getParametresUrlResultat();
264
		$parametres['resultat'] = 'alphab';
265
		$this->urlBase->setRequete($parametres);
266
		$url = $this->urlBase->getURL();
267
		return $url;
268
	}
494 jpm 269
 
155 delphine 270
	public function obtenirUrlResultatRetenu() {
83 jpm 271
		$parametres = $this->getParametresUrlResultat();
272
		$parametres['resultat'] = 'retenu';
273
		$this->urlBase->setRequete($parametres);
274
		$url = $this->urlBase->getURL();
275
		return $url;
276
	}
494 jpm 277
 
155 delphine 278
	public function obtenirUrlResultatDecompo() {
95 delphine 279
		$parametres = $this->getParametresUrlResultat();
106 jpm 280
		$parametres['resultat'] = 'decompo';
95 delphine 281
		$this->urlBase->setRequete($parametres);
282
		$url = $this->urlBase->getURL();
283
		return $url;
284
	}
106 jpm 285
 
494 jpm 286
 
10 jpm 287
}
288
?>