Subversion Repositories Applications.referentiel

Rev

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

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