Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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