Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

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