Subversion Repositories Applications.referentiel

Rev

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

Rev 57 Rev 58
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
	
110
	
111
	/**
111
	/**
112
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
112
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
113
	 * @param array le tableau à fusionner
113
	 * @param array le tableau à fusionner
114
	 */
114
	 */
115
	private function fusionnerSortie($sortie) {
115
	private function fusionnerSortie($sortie) {
116
		$this->sortie = array_merge($this->sortie, $sortie);
116
		$this->sortie = array_merge($this->sortie, $sortie);
117
	}
117
	}
118
	
118
	
119
	protected function postraiterDonnees(&$tableau) {
119
	protected function postraiterDonnees(&$tableau) {
120
		if (count($tableau) > 0) {
120
		if (count($tableau) > 0) {
121
			foreach ($tableau as $cle => &$valeur) {
121
			foreach ($tableau as $cle => &$valeur) {
122
				if ($valeur == '') {
122
				if ($valeur == '') {
123
					$valeur = '&nbsp;';
123
					$valeur = '&nbsp;';
124
				} else if (is_string($valeur)) {
124
				} else if (is_string($valeur)) {
125
					$valeur = $this->remplacerEsperluette($valeur);
125
					$valeur = $this->remplacerEsperluette($valeur);
126
				} else if (is_array($valeur)) {
126
				} else if (is_array($valeur)) {
127
					$this->postraiterDonnees($valeur);
127
					$this->postraiterDonnees($valeur);
128
				}
128
				}
129
			}
129
			}
130
		}
130
		}
131
	}
131
	}
132
	
132
	
133
	protected function traiterEsperluette(&$tableau) {
133
	protected function traiterEsperluette(&$tableau) {
134
		if (count($tableau) > 0) {
134
		if (count($tableau) > 0) {
135
			foreach ($tableau as $cle => &$valeur) {
135
			foreach ($tableau as $cle => &$valeur) {
136
				if (is_string($valeur)) {
136
				if (is_string($valeur)) {
137
					$valeur = $this->remplacerEsperluette($valeur);
137
					$valeur = $this->remplacerEsperluette($valeur);
138
				} else if (is_array($valeur)) {
138
				} else if (is_array($valeur)) {
139
					$this->traiterEsperluette($valeur);
139
					$this->traiterEsperluette($valeur);
140
				}
140
				}
141
			}
141
			}
142
		}
142
		}
143
	}
143
	}
144
	
144
	
145
	protected function remplacerEsperluette($txt) {
145
	protected function remplacerEsperluette($txt) {
146
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
146
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
147
		return $txt;
147
		return $txt;
148
	}
148
	}
149
	
149
	
150
	protected function supprimerSlash($doc) {
150
	protected function supprimerSlash($doc) {
151
		if (is_string($doc)) {
151
		if (is_string($doc)) {
152
			$doc = stripslashes($doc);
152
			$doc = stripslashes($doc);
153
		} else if (is_array($doc)) {
153
		} else if (is_array($doc) && count($doc) > 0) {
154
			if (count($doc) > 0) {
-
 
155
				foreach ($doc as $cle => $valeur) {
154
			foreach ($doc as $cle => $valeur) {
156
					$doc[$cle] = $this->supprimerSlash($valeur);
155
				$doc[$cle] = $this->supprimerSlash($valeur);
157
				}
-
 
158
			}
156
			}
159
		}
157
		}
160
		return $doc;
158
		return $doc;
161
	}
159
	}
162
	
160
	
163
	protected function initialiserModulePrincipal() {
161
	protected function initialiserModulePrincipal() {
164
		$_SESSION['module_principal'] = null;
162
		$_SESSION['module_principal'] = null;
165
	}
163
	}
166
	
164
	
167
	protected function definirCommeModulePrincipal($module_nom) {
165
	protected function definirCommeModulePrincipal($module_nom) {
168
		$_SESSION['module_principal'] = $module_nom;
166
		$_SESSION['module_principal'] = $module_nom;
169
	}
167
	}
170
 
168
 
171
	private function getModulePrincipalCourant() {
169
	private function getModulePrincipalCourant() {
172
		return $_SESSION['module_principal'];
170
		return $_SESSION['module_principal'];
173
	}
171
	}
174
	
172
	
175
	/**
173
	/**
176
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
174
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
177
	 * 
175
	 * 
178
	 * @param string $referentiel code du référentiel.
176
	 * @param string $referentiel code du référentiel.
179
	 */
177
	 */
180
	protected function construireMenu($referentiel) {
178
	protected function construireMenu($referentiel) {
181
		$menu['nom'] = 'Accueil';
179
		$menu['nom'] = 'Accueil';
182
		$menu['url'] = $this->obtenirUrlMenuAccueil();
180
		$menu['url'] = $this->obtenirUrlMenuAccueil();
183
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');  
181
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');  
184
		$donnees['menus'][] = $menu;
182
		$donnees['menus'][] = $menu;
185
		$menu['nom'] = 'Tests';
183
		$menu['nom'] = 'Tests';
186
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
184
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
187
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif');
185
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif');
188
		$donnees['menus'][] = $menu;
186
		$donnees['menus'][] = $menu;
189
		$menu['nom'] = 'Versionnage';
187
		$menu['nom'] = 'Versionnage';
190
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
188
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
191
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif');
189
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif');
192
		$donnees['menus'][] = $menu;
190
		$donnees['menus'][] = $menu;
193
		$menu['nom'] = 'Consultation';
191
		$menu['nom'] = 'Consultation';
194
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
192
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
195
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Consultation') ? 'actif' : 'inactif');
193
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Consultation') ? 'actif' : 'inactif');
196
		$donnees['menus'][] = $menu;
194
		$donnees['menus'][] = $menu;
197
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
195
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
198
	}
196
	}
199
	/**
197
	/**
200
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
198
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
201
	 * 
199
	 * 
202
	 * @param $referentiel code du référentiel
200
	 * @param $referentiel code du référentiel
203
	 * @param $id_traitement id du traitement
201
	 * @param $id_traitement id du traitement
204
	 * @param $id_resultat id du résultat
202
	 * @param $id_resultat id du résultat
205
	 */
203
	 */
206
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
204
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
207
		$entree['nom'] = 'Accueil';
205
		$entree['nom'] = 'Accueil';
208
		$entree['url'] = $this->obtenirUrlMenuAccueil();
206
		$entree['url'] = $this->obtenirUrlMenuAccueil();
209
		$donnees['entrees'][] = $entree;
207
		$donnees['entrees'][] = $entree;
210
		
208
		
211
		if (isset($referentiel)) {
209
		if (isset($referentiel)) {
212
			$entree['nom'] = strtoupper($referentiel);
210
			$entree['nom'] = strtoupper($referentiel);
213
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
211
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
214
			$donnees['entrees'][] = $entree;
212
			$donnees['entrees'][] = $entree;
215
			
213
			
216
			$module_principal = $this->getModulePrincipalCourant();
214
			$module_principal = $this->getModulePrincipalCourant();
217
			if (isset($module_principal)) {
215
			if (isset($module_principal)) {
218
				$entree['nom'] = $module_principal;
216
				$entree['nom'] = $module_principal;
219
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
217
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
220
				$donnees['entrees'][] = $entree;
218
				$donnees['entrees'][] = $entree;
221
			}
219
			}
222
			
220
			
223
			if (isset($id_traitement)) {
221
			if (isset($id_traitement)) {
224
				$entree['nom'] = "Traitement #$id_traitement";
222
				$entree['nom'] = "Traitement #$id_traitement";
225
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
223
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
226
				$donnees['entrees'][] = $entree;
224
				$donnees['entrees'][] = $entree;
227
			}
225
			}
228
			
226
			
229
			if (isset($id_resultat)) {
227
			if (isset($id_resultat)) {
230
				$entree['nom'] = "Résultat #$id_resultat";
228
				$entree['nom'] = "Résultat #$id_resultat";
231
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
229
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
232
				$donnees['entrees'][] = $entree;
230
				$donnees['entrees'][] = $entree;
233
			}
231
			}
234
		}
232
		}
235
		
233
		
236
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
234
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
237
	}
235
	}
238
	
236
	
239
	protected function obtenirUrlDetailReferentiel($referentiel) {
237
	protected function obtenirUrlDetailReferentiel($referentiel) {
240
		$this->url->setRequete(false);
238
		$this->url->setRequete(false);
241
		$this->url->setVariableRequete('module', 'Accueil');
239
		$this->url->setVariableRequete('module', 'Accueil');
242
		$this->url->setVariableRequete('action', 'afficherDetail');
240
		$this->url->setVariableRequete('action', 'afficherDetail');
243
		$this->url->setVariableRequete('ref', $referentiel);
241
		$this->url->setVariableRequete('ref', $referentiel);
244
		$url = $this->url->getURL();
242
		$url = $this->url->getURL();
245
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
243
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
246
		return $url;
244
		return $url;
247
	}
245
	}
248
	
246
	
249
	protected function obtenirUrlMenuAccueil() {
247
	protected function obtenirUrlMenuAccueil() {
250
		return $this->obtenirUrlMenu('Accueil');
248
		return $this->obtenirUrlMenu('Accueil');
251
	}
249
	}
252
	
250
	
253
	protected function obtenirUrlMenuTest($referentiel) {
251
	protected function obtenirUrlMenuTest($referentiel) {
254
		return $this->obtenirUrlMenu('Test', $referentiel);
252
		return $this->obtenirUrlMenu('Test', $referentiel);
255
	}
253
	}
256
	
254
	
257
	protected function obtenirUrlMenuVersionnage($referentiel) {
255
	protected function obtenirUrlMenuVersionnage($referentiel) {
258
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
256
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
259
	}
257
	}
260
	
258
	
261
	protected function obtenirUrlDemandeVersionnage($referentiel) {
259
	protected function obtenirUrlDemandeVersionnage($referentiel) {
262
		$this->url->setRequete(false);
260
		$this->url->setRequete(false);
263
		$this->url->setVariableRequete('module', 'Versionnage');
261
		$this->url->setVariableRequete('module', 'Versionnage');
264
		$this->url->setVariableRequete('action', 'demanderTraitement');
262
		$this->url->setVariableRequete('action', 'demanderTraitement');
265
		$this->url->setVariableRequete('ref', $referentiel);
263
		$this->url->setVariableRequete('ref', $referentiel);
266
		$url = $this->url->getURL();
264
		$url = $this->url->getURL();
267
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
265
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
268
		return $url;
266
		return $url;
269
	}
267
	}
270
	
268
	
271
	protected function obtenirUrlMenuConsultation($referentiel) {
269
	protected function obtenirUrlMenuConsultation($referentiel) {
272
		return $this->obtenirUrlMenu('Consultation', $referentiel);
270
		return $this->obtenirUrlMenu('Consultation', $referentiel);
273
	}
271
	}
274
	
272
	
275
	private function obtenirUrlMenu($menu, $referentiel = null) {
273
	private function obtenirUrlMenu($menu, $referentiel = null) {
276
		$this->url->setRequete(false);
274
		$this->url->setRequete(false);
277
		$this->url->setVariableRequete('module', $menu);
275
		$this->url->setVariableRequete('module', $menu);
278
		if (isset($referentiel)) {
276
		if (isset($referentiel)) {
279
			$this->url->setVariableRequete('ref', $referentiel);
277
			$this->url->setVariableRequete('ref', $referentiel);
280
		}
278
		}
281
		$url = $this->url->getURL();
279
		$url = $this->url->getURL();
282
		$this->url->unsetVariablesRequete(array('module', 'ref'));
280
		$this->url->unsetVariablesRequete(array('module', 'ref'));
283
		return $url;
281
		return $url;
284
	}
282
	}
285
	
283
	
286
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
284
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
287
		$this->url->setRequete(false);
285
		$this->url->setRequete(false);
288
		$this->url->setVariableRequete('module', 'Traitement');
286
		$this->url->setVariableRequete('module', 'Traitement');
289
		$this->url->setVariableRequete('id-t', $id_traitement);
287
		$this->url->setVariableRequete('id-t', $id_traitement);
290
		$this->url->setVariableRequete('ref', $referentiel);
288
		$this->url->setVariableRequete('ref', $referentiel);
291
		$url = $this->url->getURL();
289
		$url = $this->url->getURL();
292
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
290
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
293
		return $url;
291
		return $url;
294
	}
292
	}
295
	
293
	
296
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
294
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
297
		$this->url->setRequete(false);
295
		$this->url->setRequete(false);
298
		$this->url->setVariableRequete('module', 'Resultat');
296
		$this->url->setVariableRequete('module', 'Resultat');
299
		$this->url->setVariableRequete('id-r', $id_resultat);
297
		$this->url->setVariableRequete('id-r', $id_resultat);
300
		$this->url->setVariableRequete('ref', $referentiel);
298
		$this->url->setVariableRequete('ref', $referentiel);
301
		$url = $this->url->getURL();
299
		$url = $this->url->getURL();
302
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
300
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
303
		return $url;
301
		return $url;
304
	}
302
	}
305
	
303
	
306
	/**
304
	/**
307
	 * Lance l'ajout d'un traitement
305
	 * Lance l'ajout d'un traitement
308
	 */
306
	 */
309
	protected function ajouterTraitement($referentiel_code, $script_nom) {
307
	protected function ajouterTraitement($referentiel_code, $script_nom) {
310
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
308
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
311
	}
309
	}
312
	
310
	
313
	/**
311
	/**
314
	 * Lance l'ajout d'un traitement
312
	 * Lance l'ajout d'un traitement
315
	 */
313
	 */
316
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
314
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
317
		if (is_null($referentiel_code)) {
315
		if (is_null($referentiel_code)) {
318
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
316
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
319
		} else {
317
		} else {
320
			$traitements_a_supprimer = null;
318
			$traitements_a_supprimer = null;
321
			$traitementDao = new TraitementDao();
319
			$traitementDao = new TraitementDao();
322
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
320
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
323
			if ($resultat_traitement_en_attente) {
321
			if ($resultat_traitement_en_attente) {
324
				foreach ($resultat_traitement_en_attente as $traitement) {
322
				foreach ($resultat_traitement_en_attente as $traitement) {
325
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
323
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
326
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
324
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
327
					if ($difference > Config::get('ddv_traitement_attente')) {
325
					if ($difference > Config::get('ddv_traitement_attente')) {
328
						$traitements_a_supprimer[] = $traitement['id_traitement'];
326
						$traitements_a_supprimer[] = $traitement['id_traitement'];
329
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
327
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
330
					} else {
328
					} else {
331
						$this->addMessage("Un traitement est déjà en attente...");
329
						$this->addMessage("Un traitement est déjà en attente...");
332
					}
330
					}
333
				}
331
				}
334
			} else {
332
			} else {
335
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
333
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
336
				if ($resultat_traitement_en_cours) {
334
				if ($resultat_traitement_en_cours) {
337
					foreach ($resultat_traitement_en_cours as $traitement) {
335
					foreach ($resultat_traitement_en_cours as $traitement) {
338
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
336
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
339
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
337
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
340
						if ($difference > Config::get('ddv_traitement_en_cours')) {
338
						if ($difference > Config::get('ddv_traitement_en_cours')) {
341
							$traitements_a_supprimer[] = $traitement['id_traitement'];
339
							$traitements_a_supprimer[] = $traitement['id_traitement'];
342
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
340
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
343
						} else {
341
						} else {
344
							$this->addMessage("Un traitement est déjà en cours...");
342
							$this->addMessage("Un traitement est déjà en cours...");
345
						}
343
						}
346
					}
344
					}
347
				} else {
345
				} else {
348
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
346
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
349
					if ($resultat != false) {
347
					if ($resultat != false) {
350
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
348
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
351
						$this->lancerScript($referentiel_code, $script_nom);
349
						$this->lancerScript($referentiel_code, $script_nom);
352
					} else {
350
					} else {
353
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
351
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
354
					}
352
					}
355
				}
353
				}
356
			}
354
			}
357
			// Suppression des traitements posant problème
355
			// Suppression des traitements posant problème
358
			if (count($traitements_a_supprimer) > 0) {
356
			if (count($traitements_a_supprimer) > 0) {
359
				$traitementDao->supprimer($traitements_a_supprimer);
357
				$traitementDao->supprimer($traitements_a_supprimer);
360
			}
358
			}
361
		}
359
		}
362
	}
360
	}
363
	
361
	
364
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
362
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
365
		if (floatval(phpversion()) >= 5.3 ) {
363
		if (floatval(phpversion()) >= 5.3 ) {
366
			$d1 = new DateTime($date_01);
364
			$d1 = new DateTime($date_01);
367
			$d2 = new DateTime($date_02);
365
			$d2 = new DateTime($date_02);
368
			$difference_absolue = true;
366
			$difference_absolue = true;
369
			$diff = $d1->diff($d2, $difference_absolue);
367
			$diff = $d1->diff($d2, $difference_absolue);
370
			$nbre_secondes = $diff->format('s');
368
			$nbre_secondes = $diff->format('s');
371
		} else {
369
		} else {
372
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
370
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
373
		}
371
		}
374
		return $nbre_secondes;
372
		return $nbre_secondes;
375
	}
373
	}
376
	
374
	
377
	/**
375
	/**
378
	 * Lance le script d'execution des traitements
376
	 * Lance le script d'execution des traitements
379
	 */
377
	 */
380
	protected function lancerScript($referentiel_code, $script_nom) {
378
	protected function lancerScript($referentiel_code, $script_nom) {
381
		$php = Config::get('chemin_bin_php');
379
		$php = Config::get('chemin_bin_php');
382
		$exe = Config::get('chemin_script');
380
		$exe = Config::get('chemin_script');
383
		$action = 'tout';
381
		$action = 'tout';
384
		$log = Config::get('chemin_script_log');
382
		$log = Config::get('chemin_script_log');
385
		$limite_memoire = Config::get('script_limite_memoire');
383
		$limite_memoire = Config::get('script_limite_memoire');
386
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
384
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
387
		
385
		
388
		if ($this->verifierSafeModeOff() === false) {
386
		if ($this->verifierSafeModeOff() === false) {
389
			$e = "Le safe_mode est actif sur ce serveur.";
387
			$e = "Le safe_mode est actif sur ce serveur.";
390
		} else if ($this->verifierAccesFonctionExec() === false) {
388
		} else if ($this->verifierAccesFonctionExec() === false) {
391
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
389
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
392
		} else {
390
		} else {
393
			$this->addMessage("Lancement du script effectuant les traitements.");
391
			$this->addMessage("Lancement du script effectuant les traitements.");
394
			exec($commande);
392
			exec($commande);
395
		}
393
		}
396
 
394
 
397
		// Affichage des message de paramêtrage du serveur si nécessaire
395
		// Affichage des message de paramêtrage du serveur si nécessaire
398
		if (Config::get('script_messages') == true) {
396
		if (Config::get('script_messages') == true) {
399
			$message_erreur_tpl = "%s\n.".
397
			$message_erreur_tpl = "%s\n.".
400
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
398
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
401
				"La commande à lancer est : <code>$commande</code>";
399
				"La commande à lancer est : <code>$commande</code>";
402
			$this->addMessage(sprintf($message_erreur_tpl, $e));
400
			$this->addMessage(sprintf($message_erreur_tpl, $e));
403
		}
401
		}
404
	}
402
	}
405
	
403
	
406
	private function verifierSafeModeOff() {
404
	private function verifierSafeModeOff() {
407
		return ('1' == ini_get('safe_mode')) ? false : true;
405
		return ('1' == ini_get('safe_mode')) ? false : true;
408
	}
406
	}
409
	
407
	
410
	private function verifierAccesFonctionExec() {
408
	private function verifierAccesFonctionExec() {
411
		$disabled = explode(', ', ini_get('disable_functions'));
409
		$disabled = explode(', ', ini_get('disable_functions'));
412
		return !in_array('exec', $disabled);
410
		return !in_array('exec', $disabled);
413
	}
411
	}
414
}
412
}