Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

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