Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 517 | Rev 912 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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