Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1222 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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