Subversion Repositories Applications.referentiel

Rev

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

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