Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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

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