Subversion Repositories Applications.referentiel

Rev

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

Rev 33 Rev 37
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe Controleur générale partagée par les différents modules de l'application.
4
 * Classe Controleur générale partagée par les différents modules de l'application.
5
 *
5
 *
6
 * @package		Referentiel
6
 * @package		Referentiel
7
 * @category	Php5.2
7
 * @category	Php5.2
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @copyright	2010 Tela-Botanica
9
 * @copyright	2010 Tela-Botanica
10
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @version		SVN: $Id$
12
 * @version		SVN: $Id$
13
 */
13
 */
14
abstract class AppliControleur extends Controleur {
14
abstract class AppliControleur extends Controleur {
15
	
15
	
16
	const RENDU_TETE = 'tete';
16
	const RENDU_TETE = 'tete';
17
	const RENDU_CORPS = 'corps';
17
	const RENDU_CORPS = 'corps';
18
	const RENDU_PIED = 'pied';
18
	const RENDU_PIED = 'pied';
-
 
19
	const RENDU_NAVIGATION = 'navigation';
-
 
20
	const RENDU_MENU = 'menu';
19
	
21
	
20
	// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
22
	// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
21
	protected $url = null;
23
	protected $url = null;
22
	private $parametres = array();
24
	private $parametres = array();
23
	private $sortie = array();
25
	private $sortie = array();
24
	private $messages = null;
26
	private $messages = null;
25
	
27
	
26
	//+----------------------------------------------------------------------------------------------------------------+
28
	//+----------------------------------------------------------------------------------------------------------------+
27
	// Constructeur
29
	// Constructeur
28
	
30
	
29
	public function __construct()  {
31
	public function __construct()  {
30
		$registre = Registre::getInstance();
32
		$registre = Registre::getInstance();
31
		$this->parametres = $registre->get('parametres');
33
		$this->parametres = $registre->get('parametres');
32
		$this->url = $this->parametres['url'];
34
		$this->url = $this->parametres['url'];
33
		parent::__construct();
35
		parent::__construct();
34
	}
36
	}
35
	
37
	
36
	//+----------------------------------------------------------------------------------------------------------------+
38
	//+----------------------------------------------------------------------------------------------------------------+
37
	// Accesseurs
39
	// Accesseurs
38
 
40
 
39
	/**
41
	/**
40
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
42
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
41
	 */
43
	 */
42
	public function getSortie() {
44
	public function getSortie() {
43
		return $this->sortie;
45
		return $this->sortie;
44
	}
46
	}
45
 
47
 
46
	/**
48
	/**
47
	 * Attribue à la bonne position de sortie un contenu.
49
	 * Attribue à la bonne position de sortie un contenu.
48
	 */
50
	 */
49
	protected function setSortie($position, $contenu, $fusionner = false) {
51
	protected function setSortie($position, $contenu, $fusionner = false) {
50
		if ($this->verifierExistencePosition($position)) {
52
		if ($this->verifierExistencePosition($position)) {
51
			if ($fusionner) {
53
			if ($fusionner) {
52
				$this->sortie[$position] .= $contenu;
54
				$this->sortie[$position] .= $contenu;
53
			} else {
55
			} else {
54
				$this->sortie[$position] = $contenu;
56
				$this->sortie[$position] = $contenu;
55
			}
57
			}
56
		}
58
		}
57
	}
59
	}
58
	
60
	
59
	/**
61
	/**
60
	 * Retourne le tableau des messages
62
	 * Retourne le tableau des messages
61
	 */
63
	 */
62
	protected function getMessages() {
64
	protected function getMessages() {
63
		return $this->messages;
65
		return $this->messages;
64
	}
66
	}
65
	/**
67
	/**
66
	 * Ajoute un message
68
	 * Ajoute un message
67
	 */
69
	 */
68
	protected function addMessage($message) {
70
	protected function addMessage($message) {
69
		if ('' != $message) {
71
		if ('' != $message) {
70
			$this->messages[] = $message;
72
			$this->messages[] = $message;
71
		}
73
		}
72
	}
74
	}
73
	
75
	
74
	
76
	
75
	//+----------------------------------------------------------------------------------------------------------------+
77
	//+----------------------------------------------------------------------------------------------------------------+
76
	// Méthodes
78
	// Méthodes
77
	
79
	
78
	/**
80
	/**
79
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
81
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
80
	 * @param string la position à tester.
82
	 * @param string la position à tester.
81
	 * @return bool true si la position est valide, sinon false.
83
	 * @return bool true si la position est valide, sinon false.
82
	 */
84
	 */
83
	private function verifierExistencePosition($position) {
85
	private function verifierExistencePosition($position) {
84
		$existe = true;
86
		$existe = true;
85
		if ($position != self::RENDU_TETE &&
87
		if ($position != self::RENDU_TETE &&
86
			$position != self::RENDU_CORPS &&
88
			$position != self::RENDU_CORPS &&
87
			$position != self::RENDU_PIED) {
89
			$position != self::RENDU_PIED &&
-
 
90
			$position != self::RENDU_NAVIGATION &&
-
 
91
			$position != self::RENDU_MENU) {
88
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
92
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
89
			$existe = false;
93
			$existe = false;
90
		}
94
		}
91
		return $existe;
95
		return $existe;
92
	}
96
	}
93
	
97
	
94
	/**
98
	/**
95
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
99
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
96
	 */
100
	 */
97
	protected function executerAction($ClasseModule, $action) {
101
	protected function executerAction($ClasseModule, $action) {
98
		$module = new $ClasseModule();
102
		$module = new $ClasseModule();
99
		$module->$action();
103
		$module->$action();
100
		$this->fusionnerSortie($module->getSortie());
104
		$this->fusionnerSortie($module->getSortie());
101
		
105
		
102
	}
106
	}
103
	
107
	
104
	/**
108
	/**
105
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
109
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
106
	 * @param array le tableau à fusionner
110
	 * @param array le tableau à fusionner
107
	 */
111
	 */
108
	private function fusionnerSortie($sortie) {
112
	private function fusionnerSortie($sortie) {
109
		$this->sortie = array_merge($this->sortie, $sortie);
113
		$this->sortie = array_merge($this->sortie, $sortie);
110
	}
114
	}
111
	
115
	
112
	protected function postraiterDonnees(&$tableau) {
116
	protected function postraiterDonnees(&$tableau) {
113
		if (count($tableau) > 0) {
117
		if (count($tableau) > 0) {
114
			foreach ($tableau as $cle => &$valeur) {
118
			foreach ($tableau as $cle => &$valeur) {
115
				if ($valeur == '') {
119
				if ($valeur == '') {
116
					$valeur = '&nbsp;';
120
					$valeur = '&nbsp;';
117
				} else if (is_string($valeur)) {
121
				} else if (is_string($valeur)) {
118
					$valeur = $this->remplacerEsperluette($valeur);
122
					$valeur = $this->remplacerEsperluette($valeur);
119
				} else if (is_array($valeur)) {
123
				} else if (is_array($valeur)) {
120
					$this->postraiterDonnees($valeur);
124
					$this->postraiterDonnees($valeur);
121
				}
125
				}
122
			}
126
			}
123
		}
127
		}
124
	}
128
	}
125
	
129
	
126
	protected function traiterEsperluette(&$tableau) {
130
	protected function traiterEsperluette(&$tableau) {
127
		if (count($tableau) > 0) {
131
		if (count($tableau) > 0) {
128
			foreach ($tableau as $cle => &$valeur) {
132
			foreach ($tableau as $cle => &$valeur) {
129
				if (is_string($valeur)) {
133
				if (is_string($valeur)) {
130
					$valeur = $this->remplacerEsperluette($valeur);
134
					$valeur = $this->remplacerEsperluette($valeur);
131
				} else if (is_array($valeur)) {
135
				} else if (is_array($valeur)) {
132
					$this->traiterEsperluette($valeur);
136
					$this->traiterEsperluette($valeur);
133
				}
137
				}
134
			}
138
			}
135
		}
139
		}
136
	}
140
	}
137
	
141
	
138
	private function remplacerEsperluette($txt) {
142
	private function remplacerEsperluette($txt) {
139
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
143
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
140
		return $txt;
144
		return $txt;
141
	}
145
	}
-
 
146
	/**
-
 
147
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
-
 
148
	 * 
-
 
149
	 * @param string $referentiel code du référentiel.
-
 
150
	 */
-
 
151
	protected function construireMenu($referentiel) {
-
 
152
		$menu['nom'] = 'Accueil';
-
 
153
		$menu['url'] = $this->obtenirUrlMenuAccueil(); 
-
 
154
		$donnees['menus'][] = $menu;
-
 
155
		$menu['nom'] = 'Tests';
-
 
156
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
-
 
157
		$donnees['menus'][] = $menu;
-
 
158
		$menu['nom'] = 'Versionnage';
-
 
159
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
-
 
160
		$donnees['menus'][] = $menu;
-
 
161
		$menu['nom'] = 'Consultation';
-
 
162
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
-
 
163
		$donnees['menus'][] = $menu;
-
 
164
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
-
 
165
	}
-
 
166
	/**
-
 
167
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
-
 
168
	 * 
-
 
169
	 * @param $referentiel code du référentiel
-
 
170
	 * @param $id_traitement id du traitement
-
 
171
	 * @param $id_resultat id du résultat
-
 
172
	 */
-
 
173
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
-
 
174
		$entree['nom'] = 'Accueil';
-
 
175
		$entree['url'] = $this->obtenirUrlMenuAccueil();
-
 
176
		$donnees['entrees'][] = $entree;
-
 
177
		
-
 
178
		if (isset($referentiel)) {
-
 
179
			$entree['nom'] = strtoupper($referentiel);
-
 
180
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
-
 
181
			$donnees['entrees'][] = $entree;
-
 
182
			
-
 
183
			$module = Referentiel::getModule();
-
 
184
			if ($module != 'Accueil') {
-
 
185
				$entree['nom'] = $module;
-
 
186
				$entree['url'] = $this->obtenirUrlMenu($module, $referentiel);
-
 
187
				$donnees['entrees'][] = $entree;
-
 
188
			}
-
 
189
			
-
 
190
			if (isset($id_traitement)) {
-
 
191
				$entree['nom'] = "Traitement #$id_traitement";
-
 
192
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
-
 
193
				$donnees['entrees'][] = $entree;
-
 
194
			}
-
 
195
			
-
 
196
			if (isset($id_resultat)) {
-
 
197
				$entree['nom'] = "Résultat #$id_resultat";
-
 
198
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
-
 
199
				$donnees['entrees'][] = $entree;
-
 
200
			}
-
 
201
		}
-
 
202
		
-
 
203
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
-
 
204
	}
-
 
205
	
-
 
206
	protected function obtenirUrlDetailReferentiel($referentiel) {
-
 
207
		$this->url->setRequete(false);
-
 
208
		$this->url->setVariableRequete('module', 'Accueil');
-
 
209
		$this->url->setVariableRequete('action', 'afficherDetail');
-
 
210
		$this->url->setVariableRequete('ref', $referentiel);
-
 
211
		$url = $this->url->getURL();
-
 
212
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
-
 
213
		return $url;
-
 
214
	}
-
 
215
	
-
 
216
	protected function obtenirUrlMenuAccueil() {
-
 
217
		return $this->obtenirUrlMenu('Accueil');
-
 
218
	}
-
 
219
	
-
 
220
	protected function obtenirUrlMenuTest($referentiel) {
-
 
221
		return $this->obtenirUrlMenu('Test', $referentiel);
-
 
222
	}
-
 
223
	
-
 
224
	protected function obtenirUrlMenuVersionnage($referentiel) {
-
 
225
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
-
 
226
	}
-
 
227
	
-
 
228
	protected function obtenirUrlMenuConsultation($referentiel) {
-
 
229
		return $this->obtenirUrlMenu('Consultation', $referentiel);
-
 
230
	}
-
 
231
	
-
 
232
	private function obtenirUrlMenu($menu, $referentiel = null) {
-
 
233
		$this->url->setRequete(false);
-
 
234
		$this->url->setVariableRequete('module', $menu);
-
 
235
		if (isset($referentiel)) {
-
 
236
			$this->url->setVariableRequete('ref', $referentiel);
-
 
237
		}
-
 
238
		$url = $this->url->getURL();
-
 
239
		$this->url->unsetVariablesRequete(array('module', 'ref'));
-
 
240
		return $url;
-
 
241
	}
-
 
242
	
-
 
243
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
-
 
244
		$this->url->setRequete(false);
-
 
245
		$this->url->setVariableRequete('module', 'Traitement');
-
 
246
		$this->url->setVariableRequete('id-t', $id_traitement);
-
 
247
		$this->url->setVariableRequete('ref', $referentiel);
-
 
248
		$url = $this->url->getURL();
-
 
249
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
-
 
250
		return $url;
-
 
251
	}
-
 
252
	
-
 
253
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
-
 
254
		$this->url->setRequete(false);
-
 
255
		$this->url->setVariableRequete('module', 'Resultat');
-
 
256
		$this->url->setVariableRequete('id-r', $id_resultat);
-
 
257
		$this->url->setVariableRequete('ref', $referentiel);
-
 
258
		$url = $this->url->getURL();
-
 
259
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
-
 
260
		return $url;
142
	
261
	}
143
}
262
}