Subversion Repositories Applications.referentiel

Rev

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

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