Subversion Repositories Applications.referentiel

Rev

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

Rev 70 Rev 77
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';
19
	const RENDU_NAVIGATION = 'navigation';
20
	const RENDU_MENU = 'menu';
20
	const RENDU_MENU = 'menu';
21
	
21
	
22
	// 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
23
	protected $url = null;
23
	protected $url = null;
24
	private $parametres = array();
24
	private $parametres = array();
25
	protected $manuel = null;
25
	protected $manuel = null;
26
	private $sortie = array();
26
	private $sortie = array();
27
	private $messages = null;
27
	private $messages = null;
28
	
28
	
29
	//+----------------------------------------------------------------------------------------------------------------+
29
	//+----------------------------------------------------------------------------------------------------------------+
30
	// Constructeur
30
	// Constructeur
31
	
31
	
32
	public function __construct()  {
32
	public function __construct()  {
33
		$registre = Registre::getInstance();
33
		$registre = Registre::getInstance();
34
		$this->parametres = $registre->get('parametres');
34
		$this->parametres = $registre->get('parametres');
35
		$this->url = $this->parametres['url'];
35
		$this->url = $this->parametres['url'];
36
		// Chargement des infos du manuel technique des référentiels
36
		// Chargement des infos du manuel technique des référentiels
37
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');
37
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.'referentiel_v2.1.ini');
38
		parent::__construct();
38
		parent::__construct();
39
	}
39
	}
40
	
40
	
41
	//+----------------------------------------------------------------------------------------------------------------+
41
	//+----------------------------------------------------------------------------------------------------------------+
42
	// Accesseurs
42
	// Accesseurs
43
 
43
 
44
	/**
44
	/**
45
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
45
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
46
	 */
46
	 */
47
	public function getSortie() {
47
	public function getSortie() {
48
		return $this->sortie;
48
		return $this->sortie;
49
	}
49
	}
50
 
50
 
51
	/**
51
	/**
52
	 * Attribue à la bonne position de sortie un contenu.
52
	 * Attribue à la bonne position de sortie un contenu.
53
	 */
53
	 */
54
	protected function setSortie($position, $contenu, $fusionner = false) {
54
	protected function setSortie($position, $contenu, $fusionner = false) {
55
		if ($this->verifierExistencePosition($position)) {
55
		if ($this->verifierExistencePosition($position)) {
56
			if ($fusionner) {
56
			if ($fusionner) {
57
				$this->sortie[$position] .= $contenu;
57
				$this->sortie[$position] .= $contenu;
58
			} else {
58
			} else {
59
				$this->sortie[$position] = $contenu;
59
				$this->sortie[$position] = $contenu;
60
			}
60
			}
61
		}
61
		}
62
	}
62
	}
63
	
63
	
64
	/**
64
	/**
65
	 * Retourne le tableau des messages
65
	 * Retourne le tableau des messages
66
	 */
66
	 */
67
	protected function getMessages() {
67
	protected function getMessages() {
68
		return $this->messages;
68
		return $this->messages;
69
	}
69
	}
70
	/**
70
	/**
71
	 * Ajoute un message
71
	 * Ajoute un message
72
	 */
72
	 */
73
	protected function addMessage($message) {
73
	protected function addMessage($message) {
74
		if ('' != $message) {
74
		if ('' != $message) {
75
			$this->messages[] = $message;
75
			$this->messages[] = $message;
76
		}
76
		}
77
	}
77
	}
78
	
78
	
79
	
79
	
80
	//+----------------------------------------------------------------------------------------------------------------+
80
	//+----------------------------------------------------------------------------------------------------------------+
81
	// Méthodes
81
	// Méthodes
82
	
82
	
83
	/**
83
	/**
84
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
84
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
85
	 * @param string la position à tester.
85
	 * @param string la position à tester.
86
	 * @return bool true si la position est valide, sinon false.
86
	 * @return bool true si la position est valide, sinon false.
87
	 */
87
	 */
88
	private function verifierExistencePosition($position) {
88
	private function verifierExistencePosition($position) {
89
		$existe = true;
89
		$existe = true;
90
		if ($position != self::RENDU_TETE &&
90
		if ($position != self::RENDU_TETE &&
91
			$position != self::RENDU_CORPS &&
91
			$position != self::RENDU_CORPS &&
92
			$position != self::RENDU_PIED &&
92
			$position != self::RENDU_PIED &&
93
			$position != self::RENDU_NAVIGATION &&
93
			$position != self::RENDU_NAVIGATION &&
94
			$position != self::RENDU_MENU) {
94
			$position != self::RENDU_MENU) {
95
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
95
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
96
			$existe = false;
96
			$existe = false;
97
		}
97
		}
98
		return $existe;
98
		return $existe;
99
	}
99
	}
100
	
100
	
101
	/**
101
	/**
102
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
102
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
103
	 */
103
	 */
104
	protected function executerAction($ClasseModule, $action) {
104
	protected function executerAction($ClasseModule, $action) {
105
		$module = new $ClasseModule();
105
		$module = new $ClasseModule();
106
		$module->$action();
106
		$module->$action();
107
		$this->fusionnerSortie($module->getSortie());
107
		$this->fusionnerSortie($module->getSortie());
108
	}
108
	}
109
	
109
	
110
	protected function executerActionReferentiel($ClasseModule, $action, $referentiel) {
110
	protected function executerActionReferentiel($ClasseModule, $action, $referentiel) {
111
		$module = new $ClasseModule();
111
		$module = new $ClasseModule();
112
		$module->$action($referentiel);
112
		$module->$action($referentiel);
113
		$this->fusionnerSortie($module->getSortie());
113
		$this->fusionnerSortie($module->getSortie());
114
		
114
		
115
	}
115
	}
116
	
116
	
117
	/**
117
	/**
118
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
118
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
119
	 * @param array le tableau à fusionner
119
	 * @param array le tableau à fusionner
120
	 */
120
	 */
121
	private function fusionnerSortie($sortie) {
121
	private function fusionnerSortie($sortie) {
122
		$this->sortie = array_merge($this->sortie, $sortie);
122
		$this->sortie = array_merge($this->sortie, $sortie);
123
	}
123
	}
124
	
124
	
125
	protected function postraiterDonnees(&$tableau) {
125
	protected function postraiterDonnees(&$tableau) {
126
		if (count($tableau) > 0) {
126
		if (count($tableau) > 0) {
127
			foreach ($tableau as $cle => &$valeur) {
127
			foreach ($tableau as $cle => &$valeur) {
128
				if ($valeur == '') {
128
				if ($valeur == '') {
129
					$valeur = '&nbsp;';
129
					$valeur = '&nbsp;';
130
				} else if (is_string($valeur)) {
130
				} else if (is_string($valeur)) {
131
					$valeur = $this->remplacerEsperluette($valeur);
131
					$valeur = $this->remplacerEsperluette($valeur);
132
				} else if (is_array($valeur)) {
132
				} else if (is_array($valeur)) {
133
					$this->postraiterDonnees($valeur);
133
					$this->postraiterDonnees($valeur);
134
				}
134
				}
135
			}
135
			}
136
		}
136
		}
137
	}
137
	}
138
	
138
	
139
	protected function traiterEsperluette(&$tableau) {
139
	protected function traiterEsperluette(&$tableau) {
140
		if (count($tableau) > 0) {
140
		if (count($tableau) > 0) {
141
			foreach ($tableau as $cle => &$valeur) {
141
			foreach ($tableau as $cle => &$valeur) {
142
				if (is_string($valeur)) {
142
				if (is_string($valeur)) {
143
					$valeur = $this->remplacerEsperluette($valeur);
143
					$valeur = $this->remplacerEsperluette($valeur);
144
				} else if (is_array($valeur)) {
144
				} else if (is_array($valeur)) {
145
					$this->traiterEsperluette($valeur);
145
					$this->traiterEsperluette($valeur);
146
				}
146
				}
147
			}
147
			}
148
		}
148
		}
149
	}
149
	}
150
	
150
	
151
	protected function remplacerEsperluette($txt) {
151
	protected function remplacerEsperluette($txt) {
152
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
152
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
153
		return $txt;
153
		return $txt;
154
	}
154
	}
155
	
155
	
156
	protected function supprimerSlash($doc) {
156
	protected function supprimerSlash($doc) {
157
		if (is_string($doc)) {
157
		if (is_string($doc)) {
158
			$doc = stripslashes($doc);
158
			$doc = stripslashes($doc);
159
		} else if (is_array($doc) && count($doc) > 0) {
159
		} else if (is_array($doc) && count($doc) > 0) {
160
			foreach ($doc as $cle => $valeur) {
160
			foreach ($doc as $cle => $valeur) {
161
				$doc[$cle] = $this->supprimerSlash($valeur);
161
				$doc[$cle] = $this->supprimerSlash($valeur);
162
			}
162
			}
163
		}
163
		}
164
		return $doc;
164
		return $doc;
165
	}
165
	}
166
	
166
	
167
	protected function initialiserModulePrincipal() {
167
	protected function initialiserModulePrincipal() {
168
		$_SESSION['module_principal'] = null;
168
		$_SESSION['module_principal'] = null;
169
	}
169
	}
170
	
170
	
171
	protected function definirCommeModulePrincipal($module_nom) {
171
	protected function definirCommeModulePrincipal($module_nom) {
172
		$_SESSION['module_principal'] = $module_nom;
172
		$_SESSION['module_principal'] = $module_nom;
173
	}
173
	}
174
 
174
 
175
	private function getModulePrincipalCourant() {
175
	private function getModulePrincipalCourant() {
176
		return $_SESSION['module_principal'];
176
		return $_SESSION['module_principal'];
177
	}
177
	}
178
	
178
	
179
	/**
179
	/**
180
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
180
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
181
	 * 
181
	 * 
182
	 * @param string $referentiel code du référentiel.
182
	 * @param string $referentiel code du référentiel.
183
	 */
183
	 */
184
	protected function construireMenu($referentiel) {
184
	protected function construireMenu($referentiel) {
185
		$menu['nom'] = 'Accueil';
185
		$menu['nom'] = 'Accueil';
186
		$menu['url'] = $this->obtenirUrlMenuAccueil();
186
		$menu['url'] = $this->obtenirUrlMenuAccueil();
187
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');  
187
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');  
188
		$donnees['menus'][] = $menu;
188
		$donnees['menus'][] = $menu;
189
		$menu['nom'] = 'Tests';
189
		$menu['nom'] = 'Tests';
190
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
190
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
191
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif');
191
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif');
192
		$donnees['menus'][] = $menu;
192
		$donnees['menus'][] = $menu;
193
		$menu['nom'] = 'Versionnage';
193
		$menu['nom'] = 'Versionnage';
194
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
194
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
195
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif');
195
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif');
196
		$donnees['menus'][] = $menu;
196
		$donnees['menus'][] = $menu;
197
		$menu['nom'] = 'Consultation';
197
		$menu['nom'] = 'Consultation';
198
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
198
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
199
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Consultation') ? 'actif' : 'inactif');
199
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Consultation') ? 'actif' : 'inactif');
200
		$donnees['menus'][] = $menu;
200
		$donnees['menus'][] = $menu;
201
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
201
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
202
	}
202
	}
203
	/**
203
	/**
204
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
204
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
205
	 * 
205
	 * 
206
	 * @param $referentiel code du référentiel
206
	 * @param $referentiel code du référentiel
207
	 * @param $id_traitement id du traitement
207
	 * @param $id_traitement id du traitement
208
	 * @param $id_resultat id du résultat
208
	 * @param $id_resultat id du résultat
209
	 */
209
	 */
210
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
210
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
211
		$entree['nom'] = 'Accueil';
211
		$entree['nom'] = 'Accueil';
212
		$entree['url'] = $this->obtenirUrlMenuAccueil();
212
		$entree['url'] = $this->obtenirUrlMenuAccueil();
213
		$donnees['entrees'][] = $entree;
213
		$donnees['entrees'][] = $entree;
214
		
214
		
215
		if (isset($referentiel)) {
215
		if (isset($referentiel)) {
216
			$entree['nom'] = strtoupper($referentiel);
216
			$entree['nom'] = strtoupper($referentiel);
217
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
217
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
218
			$donnees['entrees'][] = $entree;
218
			$donnees['entrees'][] = $entree;
219
			
219
			
220
			$module_principal = $this->getModulePrincipalCourant();
220
			$module_principal = $this->getModulePrincipalCourant();
221
			if (isset($module_principal)) {
221
			if (isset($module_principal)) {
222
				$entree['nom'] = $module_principal;
222
				$entree['nom'] = $module_principal;
223
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
223
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
224
				$donnees['entrees'][] = $entree;
224
				$donnees['entrees'][] = $entree;
225
			}
225
			}
226
			
226
			
227
			if (isset($id_traitement)) {
227
			if (isset($id_traitement)) {
228
				$entree['nom'] = "Traitement #$id_traitement";
228
				$entree['nom'] = "Traitement #$id_traitement";
229
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
229
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
230
				$donnees['entrees'][] = $entree;
230
				$donnees['entrees'][] = $entree;
231
			}
231
			}
232
			
232
			
233
			if (isset($id_resultat)) {
233
			if (isset($id_resultat)) {
234
				$entree['nom'] = "Résultat #$id_resultat";
234
				$entree['nom'] = "Résultat #$id_resultat";
235
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
235
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
236
				$donnees['entrees'][] = $entree;
236
				$donnees['entrees'][] = $entree;
237
			}
237
			}
238
		}
238
		}
239
		
239
		
240
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
240
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
241
	}
241
	}
242
	
242
	
243
	protected function obtenirUrlDetailReferentiel($referentiel) {
243
	protected function obtenirUrlDetailReferentiel($referentiel) {
244
		$this->url->setRequete(false);
244
		$this->url->setRequete(false);
245
		$this->url->setVariableRequete('module', 'Accueil');
245
		$this->url->setVariableRequete('module', 'Accueil');
246
		$this->url->setVariableRequete('action', 'afficherDetail');
246
		$this->url->setVariableRequete('action', 'afficherDetail');
247
		$this->url->setVariableRequete('ref', $referentiel);
247
		$this->url->setVariableRequete('ref', $referentiel);
248
		$url = $this->url->getURL();
248
		$url = $this->url->getURL();
249
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
249
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
250
		return $url;
250
		return $url;
251
	}
251
	}
252
	
252
	
253
	protected function obtenirUrlMenuAccueil() {
253
	protected function obtenirUrlMenuAccueil() {
254
		return $this->obtenirUrlMenu('Accueil');
254
		return $this->obtenirUrlMenu('Accueil');
255
	}
255
	}
256
	
256
	
257
	protected function obtenirUrlMenuTest($referentiel) {
257
	protected function obtenirUrlMenuTest($referentiel) {
258
		return $this->obtenirUrlMenu('Test', $referentiel);
258
		return $this->obtenirUrlMenu('Test', $referentiel);
259
	}
259
	}
260
	
260
	
261
	protected function obtenirUrlMenuVersionnage($referentiel) {
261
	protected function obtenirUrlMenuVersionnage($referentiel) {
262
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
262
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
263
	}
263
	}
264
	
264
	
265
	protected function obtenirUrlDemandeVersionnage($referentiel) {
265
	protected function obtenirUrlDemandeVersionnage($referentiel) {
266
		$this->url->setRequete(false);
266
		$this->url->setRequete(false);
267
		$this->url->setVariableRequete('module', 'Versionnage');
267
		$this->url->setVariableRequete('module', 'Versionnage');
268
		$this->url->setVariableRequete('action', 'demanderTraitement');
268
		$this->url->setVariableRequete('action', 'demanderTraitement');
269
		$this->url->setVariableRequete('ref', $referentiel);
269
		$this->url->setVariableRequete('ref', $referentiel);
270
		$url = $this->url->getURL();
270
		$url = $this->url->getURL();
271
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
271
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
272
		return $url;
272
		return $url;
273
	}
273
	}
274
	
274
	
275
	protected function obtenirUrlMenuConsultation($referentiel) {
275
	protected function obtenirUrlMenuConsultation($referentiel) {
276
		return $this->obtenirUrlMenu('Consultation', $referentiel);
276
		return $this->obtenirUrlMenu('Consultation', $referentiel);
277
	}
277
	}
278
	
278
	
279
	private function obtenirUrlMenu($menu, $referentiel = null) {
279
	private function obtenirUrlMenu($menu, $referentiel = null) {
280
		$this->url->setRequete(false);
280
		$this->url->setRequete(false);
281
		$this->url->setVariableRequete('module', $menu);
281
		$this->url->setVariableRequete('module', $menu);
282
		if (isset($referentiel)) {
282
		if (isset($referentiel)) {
283
			$this->url->setVariableRequete('ref', $referentiel);
283
			$this->url->setVariableRequete('ref', $referentiel);
284
		}
284
		}
285
		$url = $this->url->getURL();
285
		$url = $this->url->getURL();
286
		$this->url->unsetVariablesRequete(array('module', 'ref'));
286
		$this->url->unsetVariablesRequete(array('module', 'ref'));
287
		return $url;
287
		return $url;
288
	}
288
	}
289
	
289
	
290
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
290
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
291
		$this->url->setRequete(false);
291
		$this->url->setRequete(false);
292
		$this->url->setVariableRequete('module', 'Traitement');
292
		$this->url->setVariableRequete('module', 'Traitement');
293
		$this->url->setVariableRequete('id-t', $id_traitement);
293
		$this->url->setVariableRequete('id-t', $id_traitement);
294
		$this->url->setVariableRequete('ref', $referentiel);
294
		$this->url->setVariableRequete('ref', $referentiel);
295
		$url = $this->url->getURL();
295
		$url = $this->url->getURL();
296
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
296
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
297
		return $url;
297
		return $url;
298
	}
298
	}
299
	
299
	
300
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
300
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
301
		$this->url->setRequete(false);
301
		$this->url->setRequete(false);
302
		$this->url->setVariableRequete('module', 'Resultat');
302
		$this->url->setVariableRequete('module', 'Resultat');
303
		$this->url->setVariableRequete('id-r', $id_resultat);
303
		$this->url->setVariableRequete('id-r', $id_resultat);
304
		$this->url->setVariableRequete('ref', $referentiel);
304
		$this->url->setVariableRequete('ref', $referentiel);
305
		$url = $this->url->getURL();
305
		$url = $this->url->getURL();
306
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
306
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
307
		return $url;
307
		return $url;
308
	}
308
	}
309
	
309
	
310
	protected function obtenirUrlRecherche($referentiel, $txt = null) {
310
	protected function obtenirUrlRecherche($referentiel = null, $txt = null) {
-
 
311
		$this->url->setRequete(false);
311
		$this->url->setRequete(false);
312
		if (!is_null($referentiel)) {
-
 
313
			$this->url->setVariableRequete('ref', $referentiel);
312
		$this->url->setVariableRequete('ref', $referentiel);
314
		}
313
		$this->url->setVariableRequete('module', 'Recherche');
315
		$this->url->setVariableRequete('module', 'Recherche');
314
		$this->url->setVariableRequete('action', 'rechercher');
316
		$this->url->setVariableRequete('action', 'rechercher');
315
		if (!is_null($txt)) {
317
		if (!is_null($txt)) {
316
			$this->url->setVariableRequete('recherche', $txt);
318
			$this->url->setVariableRequete('recherche', $txt);
317
		}
319
		}
318
		$url = $this->url->getURL();
320
		$url = $this->url->getURL();
319
		$this->url->unsetVariablesRequete(array('ref', 'module', 'action', 'recherche'));
321
		$this->url->unsetVariablesRequete(array('ref', 'module', 'action', 'recherche'));
320
		return $url;
322
		return $url;
321
	}
323
	}
-
 
324
	protected function obtenirUrlFicheTaxon($referentiel, $num_nom = null, $num_nom_retenu = null, $nom = null) {
-
 
325
		$this->url->setRequete(false);
-
 
326
		$this->url->setVariableRequete('ref', $referentiel);
-
 
327
		$this->url->setVariableRequete('module', 'FicheTaxon');
-
 
328
		if (!is_null($num_nom)) {
-
 
329
			$this->url->setVariableRequete('num_nom', $num_nom);
-
 
330
		}
-
 
331
		if (!is_null($num_nom_retenu)) {
-
 
332
			$this->url->setVariableRequete('num_nom_retenu', $num_nom_retenu);
-
 
333
		}
-
 
334
		if (!is_null($num_nom_retenu)) {
-
 
335
			$this->url->setVariableRequete('nom', $nom);
-
 
336
		}
-
 
337
		$url = clone $this->url;
-
 
338
		$this->url->unsetVariablesRequete(array('module', 'id'));
-
 
339
		return $url->getURL();
-
 
340
	}
322
	
341
	
323
	/**
342
	/**
324
	 * Lance l'ajout d'un traitement
343
	 * Lance l'ajout d'un traitement
325
	 */
344
	 */
326
	protected function ajouterTraitement($referentiel_code, $script_nom) {
345
	protected function ajouterTraitement($referentiel_code, $script_nom) {
327
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
346
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
328
	}
347
	}
329
	
348
	
330
	/**
349
	/**
331
	 * Lance l'ajout d'un traitement
350
	 * Lance l'ajout d'un traitement
332
	 */
351
	 */
333
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
352
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
334
		if (is_null($referentiel_code)) {
353
		if (is_null($referentiel_code)) {
335
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
354
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
336
		} else {
355
		} else {
337
			$traitements_a_supprimer = null;
356
			$traitements_a_supprimer = null;
338
			$traitementDao = new TraitementDao();
357
			$traitementDao = new TraitementDao();
339
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
358
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
340
			if ($resultat_traitement_en_attente) {
359
			if ($resultat_traitement_en_attente) {
341
				foreach ($resultat_traitement_en_attente as $traitement) {
360
				foreach ($resultat_traitement_en_attente as $traitement) {
342
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
361
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
343
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
362
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
344
					if ($difference > Config::get('ddv_traitement_attente')) {
363
					if ($difference > Config::get('ddv_traitement_attente')) {
345
						$traitements_a_supprimer[] = $traitement['id_traitement'];
364
						$traitements_a_supprimer[] = $traitement['id_traitement'];
346
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
365
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
347
					} else {
366
					} else {
348
						$this->addMessage("Un traitement est déjà en attente...");
367
						$this->addMessage("Un traitement est déjà en attente...");
349
					}
368
					}
350
				}
369
				}
351
			} else {
370
			} else {
352
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
371
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
353
				if ($resultat_traitement_en_cours) {
372
				if ($resultat_traitement_en_cours) {
354
					foreach ($resultat_traitement_en_cours as $traitement) {
373
					foreach ($resultat_traitement_en_cours as $traitement) {
355
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
374
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
356
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
375
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
357
						if ($difference > Config::get('ddv_traitement_en_cours')) {
376
						if ($difference > Config::get('ddv_traitement_en_cours')) {
358
							$traitements_a_supprimer[] = $traitement['id_traitement'];
377
							$traitements_a_supprimer[] = $traitement['id_traitement'];
359
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
378
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
360
						} else {
379
						} else {
361
							$this->addMessage("Un traitement est déjà en cours...");
380
							$this->addMessage("Un traitement est déjà en cours...");
362
						}
381
						}
363
					}
382
					}
364
				} else {
383
				} else {
365
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
384
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
366
					if ($resultat != false) {
385
					if ($resultat != false) {
367
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
386
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
368
						$this->lancerScript($referentiel_code, $script_nom);
387
						$this->lancerScript($referentiel_code, $script_nom);
369
					} else {
388
					} else {
370
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
389
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
371
					}
390
					}
372
				}
391
				}
373
			}
392
			}
374
			// Suppression des traitements posant problème
393
			// Suppression des traitements posant problème
375
			if (count($traitements_a_supprimer) > 0) {
394
			if (count($traitements_a_supprimer) > 0) {
376
				$traitementDao->supprimer($traitements_a_supprimer);
395
				$traitementDao->supprimer($traitements_a_supprimer);
377
			}
396
			}
378
		}
397
		}
379
	}
398
	}
380
	
399
	
381
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
400
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
382
		if (floatval(phpversion()) >= 5.3 ) {
401
		if (floatval(phpversion()) >= 5.3 ) {
383
			$d1 = new DateTime($date_01);
402
			$d1 = new DateTime($date_01);
384
			$d2 = new DateTime($date_02);
403
			$d2 = new DateTime($date_02);
385
			$difference_absolue = true;
404
			$difference_absolue = true;
386
			$diff = $d1->diff($d2, $difference_absolue);
405
			$diff = $d1->diff($d2, $difference_absolue);
387
			$nbre_secondes = $diff->format('s');
406
			$nbre_secondes = $diff->format('s');
388
		} else {
407
		} else {
389
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
408
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
390
		}
409
		}
391
		return $nbre_secondes;
410
		return $nbre_secondes;
392
	}
411
	}
393
	
412
	
394
	/**
413
	/**
395
	 * Lance le script d'execution des traitements
414
	 * Lance le script d'execution des traitements
396
	 */
415
	 */
397
	protected function lancerScript($referentiel_code, $script_nom) {
416
	protected function lancerScript($referentiel_code, $script_nom) {
398
		$php = Config::get('chemin_bin_php');
417
		$php = Config::get('chemin_bin_php');
399
		$exe = Config::get('chemin_script');
418
		$exe = Config::get('chemin_script');
400
		$action = 'tout';
419
		$action = 'tout';
401
		$log = Config::get('chemin_script_log');
420
		$log = Config::get('chemin_script_log');
402
		$limite_memoire = Config::get('script_limite_memoire');
421
		$limite_memoire = Config::get('script_limite_memoire');
403
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
422
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
404
		
423
		
405
		if ($this->verifierSafeModeOff() === false) {
424
		if ($this->verifierSafeModeOff() === false) {
406
			$e = "Le safe_mode est actif sur ce serveur.";
425
			$e = "Le safe_mode est actif sur ce serveur.";
407
		} else if ($this->verifierAccesFonctionExec() === false) {
426
		} else if ($this->verifierAccesFonctionExec() === false) {
408
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
427
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
409
		} else {
428
		} else {
410
			$this->addMessage("Lancement du script effectuant les traitements.");
429
			$this->addMessage("Lancement du script effectuant les traitements.");
411
			exec($commande);
430
			exec($commande);
412
		}
431
		}
413
 
432
 
414
		// Affichage des message de paramêtrage du serveur si nécessaire
433
		// Affichage des message de paramêtrage du serveur si nécessaire
415
		if (Config::get('script_messages') == true) {
434
		if (Config::get('script_messages') == true) {
416
			$message_erreur_tpl = "%s\n.".
435
			$message_erreur_tpl = "%s\n.".
417
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
436
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
418
				"La commande à lancer est : <code>$commande</code>";
437
				"La commande à lancer est : <code>$commande</code>";
419
			$this->addMessage(sprintf($message_erreur_tpl, $e));
438
			$this->addMessage(sprintf($message_erreur_tpl, $e));
420
		}
439
		}
421
	}
440
	}
422
	
441
	
423
	private function verifierSafeModeOff() {
442
	private function verifierSafeModeOff() {
424
		return ('1' == ini_get('safe_mode')) ? false : true;
443
		return ('1' == ini_get('safe_mode')) ? false : true;
425
	}
444
	}
426
	
445
	
427
	private function verifierAccesFonctionExec() {
446
	private function verifierAccesFonctionExec() {
428
		$disabled = explode(', ', ini_get('disable_functions'));
447
		$disabled = explode(', ', ini_get('disable_functions'));
429
		return !in_array('exec', $disabled);
448
		return !in_array('exec', $disabled);
430
	}
449
	}
431
}
450
}