Subversion Repositories Applications.referentiel

Rev

Rev 399 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 399 Rev 400
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.Config::get('manuel'));
37
		$this->manuel = parse_ini_file(Config::get('chemin_appli').DS.'..'.DS.'configurations'.DS.Config::get('manuel'));
38
		parent::__construct();
38
		parent::__construct();
39
	}
39
	}
40
	
40
	
41
	//+----------------------------------------------------------------------------------------------------------------+
41
	//+----------------------------------------------------------------------------------------------------------------+
42
	// Accesseurs
42
	// Accesseurs
43
 
43
 
44
	/**
44
	/**
45
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
45
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
46
	 */
46
	 */
47
	public function getSortie() {
47
	public function getSortie() {
48
		return $this->sortie;
48
		return $this->sortie;
49
	}
49
	}
50
 
50
 
51
	/**
51
	/**
52
	 * Attribue à la bonne position de sortie un contenu.
52
	 * Attribue à la bonne position de sortie un contenu.
53
	 */
53
	 */
54
	protected function setSortie($position, $contenu, $fusionner = false) {
54
	protected function setSortie($position, $contenu, $fusionner = false) {
55
		if ($this->verifierExistencePosition($position)) {
55
		if ($this->verifierExistencePosition($position)) {
56
			if ($fusionner) {
56
			if ($fusionner) {
57
				$this->sortie[$position] .= $contenu;
57
				$this->sortie[$position] .= $contenu;
58
			} else {
58
			} else {
59
				$this->sortie[$position] = $contenu;
59
				$this->sortie[$position] = $contenu;
60
			}
60
			}
61
		}
61
		}
62
	}
62
	}
63
	
63
	
64
	/**
64
	/**
65
	 * Retourne le tableau des messages
65
	 * Retourne le tableau des messages
66
	 */
66
	 */
67
	protected function getMessages() {
67
	protected function getMessages() {
68
		return $this->messages;
68
		return $this->messages;
69
	}
69
	}
70
	/**
70
	/**
71
	 * Ajoute un message
71
	 * Ajoute un message
72
	 */
72
	 */
73
	protected function addMessage($message) {
73
	protected function addMessage($message) {
74
		if ('' != $message) {
74
		if ('' != $message) {
75
			$this->messages[] = $message;
75
			$this->messages[] = $message;
76
		}
76
		}
77
	}
77
	}
78
	
78
	
79
	
79
	
80
	//+----------------------------------------------------------------------------------------------------------------+
80
	//+----------------------------------------------------------------------------------------------------------------+
81
	// Méthodes
81
	// Méthodes
82
	
82
	
83
	/**
83
	/**
84
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
84
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
85
	 * @param string la position à tester.
85
	 * @param string la position à tester.
86
	 * @return bool true si la position est valide, sinon false.
86
	 * @return bool true si la position est valide, sinon false.
87
	 */
87
	 */
88
	private function verifierExistencePosition($position) {
88
	private function verifierExistencePosition($position) {
89
		$existe = true;
89
		$existe = true;
90
		if ($position != self::RENDU_TETE &&
90
		if ($position != self::RENDU_TETE &&
91
			$position != self::RENDU_CORPS &&
91
			$position != self::RENDU_CORPS &&
92
			$position != self::RENDU_PIED &&
92
			$position != self::RENDU_PIED &&
93
			$position != self::RENDU_NAVIGATION &&
93
			$position != self::RENDU_NAVIGATION &&
94
			$position != self::RENDU_MENU) {
94
			$position != self::RENDU_MENU) {
95
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
95
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
96
			$existe = false;
96
			$existe = false;
97
		}
97
		}
98
		return $existe;
98
		return $existe;
99
	}
99
	}
100
	
100
	
101
	/**
101
	/**
102
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
102
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
103
	 */
103
	 */
104
	protected function executerAction($ClasseModule, $action) {
104
	protected function executerAction($ClasseModule, $action) {
105
		$module = new $ClasseModule();
105
		$module = new $ClasseModule();
106
		$module->$action();
106
		$module->$action();
107
		$this->fusionnerSortie($module->getSortie());
107
		$this->fusionnerSortie($module->getSortie());
108
	}
108
	}
109
	
109
	
110
	protected function executerActionReferentiel($ClasseModule, $action, $referentiel, $afficheMoteur = null) {
110
	protected function executerActionReferentiel($ClasseModule, $action, $referentiel, $afficheMoteur = null) {
111
		$module = new $ClasseModule();
111
		$module = new $ClasseModule();
112
		$module->$action($referentiel, $afficheMoteur);
112
		$module->$action($referentiel, $afficheMoteur);
113
		$this->fusionnerSortie($module->getSortie());
113
		$this->fusionnerSortie($module->getSortie());
114
		
114
		
115
	}
115
	}
116
	
116
	
117
	/**
117
	/**
118
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
118
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
119
	 * @param array le tableau à fusionner
119
	 * @param array le tableau à fusionner
120
	 */
120
	 */
121
	private function fusionnerSortie($sortie) {
121
	private function fusionnerSortie($sortie) {
122
		$this->sortie = array_merge($this->sortie, $sortie);
122
		$this->sortie = array_merge($this->sortie, $sortie);
123
	}
123
	}
124
	
124
	
125
	protected function postraiterDonnees(&$tableau) {
125
	protected function postraiterDonnees(&$tableau) {
126
		if (count($tableau) > 0) {
126
		if (count($tableau) > 0) {
127
			foreach ($tableau as $cle => &$valeur) {
127
			foreach ($tableau as $cle => &$valeur) {
128
				if ($valeur == '') {
128
				if ($valeur == '') {
129
					$valeur = '&nbsp;';
129
					$valeur = '&nbsp;';
130
				} else if (is_string($valeur)) {
130
				} else if (is_string($valeur)) {
131
					$valeur = $this->remplacerEsperluette($valeur);
131
					$valeur = $this->remplacerEsperluette($valeur);
132
				} else if (is_array($valeur)) {
132
				} else if (is_array($valeur)) {
133
					$this->postraiterDonnees($valeur);
133
					$this->postraiterDonnees($valeur);
134
				}
134
				}
135
			}
135
			}
136
		}
136
		}
137
	}
137
	}
138
	
138
	
139
	protected function traiterEsperluette(&$tableau) {
139
	protected function traiterEsperluette(&$tableau) {
140
		if (count($tableau) > 0) {
140
		if (count($tableau) > 0) {
141
			foreach ($tableau as $cle => &$valeur) {
141
			foreach ($tableau as $cle => &$valeur) {
142
				if (is_string($valeur)) {
142
				if (is_string($valeur)) {
143
					$valeur = $this->remplacerEsperluette($valeur);
143
					$valeur = $this->remplacerEsperluette($valeur);
144
				} else if (is_array($valeur)) {
144
				} else if (is_array($valeur)) {
145
					$this->traiterEsperluette($valeur);
145
					$this->traiterEsperluette($valeur);
146
				}
146
				}
147
			}
147
			}
148
		}
148
		}
149
	}
149
	}
150
	
150
	
151
	protected function remplacerEsperluette($txt) {
151
	protected function remplacerEsperluette($txt) {
152
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
152
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
153
		return $txt;
153
		return $txt;
154
	}
154
	}
155
	
155
	
156
	protected function supprimerSlash($doc) {
156
	protected function supprimerSlash($doc) {
157
		if (is_string($doc)) {
157
		if (is_string($doc)) {
158
			$doc = stripslashes($doc);
158
			$doc = stripslashes($doc);
159
		} else if (is_array($doc) && count($doc) > 0) {
159
		} else if (is_array($doc) && count($doc) > 0) {
160
			foreach ($doc as $cle => $valeur) {
160
			foreach ($doc as $cle => $valeur) {
161
				$doc[$cle] = $this->supprimerSlash($valeur);
161
				$doc[$cle] = $this->supprimerSlash($valeur);
162
			}
162
			}
163
		}
163
		}
164
		return $doc;
164
		return $doc;
165
	}
165
	}
166
	
166
	
167
	protected function initialiserModulePrincipal() {
167
	protected function initialiserModulePrincipal() {
168
		$GLOBALS['module_principal'] = null;
168
		$GLOBALS['module_principal'] = null;
169
	}
169
	}
170
	
170
	
171
	protected function definirCommeModulePrincipal($module_nom) {
171
	protected function definirCommeModulePrincipal($module_nom) {
172
		$GLOBALS['module_principal'] = $module_nom;
172
		$GLOBALS['module_principal'] = $module_nom;
173
	}
173
	}
174
 
174
 
175
	private function getModulePrincipalCourant() {
175
	private function getModulePrincipalCourant() {
-
 
176
		if (array_key_exists('module_principal', $GLOBALS)) {
176
		return $GLOBALS['module_principal'];
177
			return $GLOBALS['module_principal'];
-
 
178
		}
177
	}
179
	}
178
	
180
	
179
	/**
181
	/**
180
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
182
	 * Construction du menu et stockage dans le conteneur de sortie RENDU_MENU.
181
	 * 
183
	 * 
182
	 * @param string $referentiel code du référentiel.
184
	 * @param string $referentiel code du référentiel.
183
	 */
185
	 */
184
	protected function construireMenu($referentiel) {
186
	protected function construireMenu($referentiel) {
185
		$menu['nom'] = 'Accueil';
187
		$menu['nom'] = 'Accueil';
186
		$menu['url'] = $this->obtenirUrlMenuAccueil();
188
		$menu['url'] = $this->obtenirUrlMenuAccueil();
187
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');
189
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Accueil') ? 'actif' : 'inactif');
188
		$menu['title'] = "Liste des référentiels consultables.";
190
		$menu['title'] = "Liste des référentiels consultables.";
189
		$donnees['menus'][] = $menu;
191
		$donnees['menus'][] = $menu;
190
		$menu['nom'] = 'Consultation';
192
		$menu['nom'] = 'Consultation';
191
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
193
		$menu['url'] = $this->obtenirUrlMenuConsultation($referentiel);
192
		$menu['activite'] = ((preg_match('/^(?:Consultation|Recherche|FicheTaxon)$/', $this->getModulePrincipalCourant())) ? 'actif' : 'inactif');
194
		$menu['activite'] = ((preg_match('/^(?:Consultation|Recherche|FicheTaxon)$/', $this->getModulePrincipalCourant())) ? 'actif' : 'inactif');
193
		$menu['title'] = "Interroger la base en cours de travail.";
195
		$menu['title'] = "Interroger la base en cours de travail.";
194
		$donnees['menus'][] = $menu;
196
		$donnees['menus'][] = $menu;
195
		$menu['nom'] = 'Arbre taxo';
197
		$menu['nom'] = 'Arbre taxo';
196
		$menu['url'] = $this->obtenirUrlMenuArbre($referentiel);
198
		$menu['url'] = $this->obtenirUrlMenuArbre($referentiel);
197
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Arbre') ? 'actif' : 'inactif');
199
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Arbre') ? 'actif' : 'inactif');
198
		$menu['title'] = "Consulter l'aborescence du référentiel";
200
		$menu['title'] = "Consulter l'aborescence du référentiel";
199
		$donnees['menus'][] = $menu;
201
		$donnees['menus'][] = $menu;
200
		$menu['nom'] = 'Tests';
202
		$menu['nom'] = 'Tests';
201
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
203
		$menu['url'] = $this->obtenirUrlMenuTest($referentiel); 
202
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif securise');
204
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Test') ? 'actif' : 'inactif securise');
203
		$menu['title'] = "Réservé aux coordinateurs. Contrôler les données saisies.";
205
		$menu['title'] = "Réservé aux coordinateurs. Contrôler les données saisies.";
204
		$donnees['menus'][] = $menu;
206
		$donnees['menus'][] = $menu;
205
		$menu['nom'] = 'Versionnage';
207
		$menu['nom'] = 'Versionnage';
206
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
208
		$menu['url'] = $this->obtenirUrlMenuVersionnage($referentiel);
207
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif securise');
209
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Versionnage') ? 'actif' : 'inactif securise');
208
		$menu['title'] = "Réservé aux coordinateurs. Générer une version de la base.";
210
		$menu['title'] = "Réservé aux coordinateurs. Générer une version de la base.";
209
		$donnees['menus'][] = $menu;
211
		$donnees['menus'][] = $menu;
210
		$menu['nom'] = 'Informations et téléchargements';
212
		$menu['nom'] = 'Informations et téléchargements';
211
		$menu['url'] = $this->obtenirUrlMenuInformations($referentiel);
213
		$menu['url'] = $this->obtenirUrlMenuInformations($referentiel);
212
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Informations') ? 'actif' : 'inactif');
214
		$menu['activite'] = (($this->getModulePrincipalCourant() == 'Informations') ? 'actif' : 'inactif');
213
		$menu['title'] = "Informations sur le projet et téléchargements.";
215
		$menu['title'] = "Informations sur le projet et téléchargements.";
214
		$donnees['menus'][] = $menu;
216
		$donnees['menus'][] = $menu;
215
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
217
		$this->setSortie(self::RENDU_MENU, $this->getVue('menu', $donnees), false);
216
	}
218
	}
217
	/**
219
	/**
218
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
220
	 * Construction du fil d'ariane et stockage dans le conteneur de sortie RENDU_NAVIGATION.
219
	 * 
221
	 * 
220
	 * @param $referentiel code du référentiel
222
	 * @param $referentiel code du référentiel
221
	 * @param $id_traitement id du traitement
223
	 * @param $id_traitement id du traitement
222
	 * @param $id_resultat id du résultat
224
	 * @param $id_resultat id du résultat
223
	 */
225
	 */
224
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
226
	protected function construireFilAriane($referentiel = null, $id_traitement = null, $id_resultat = null) {
225
		$entree['nom'] = 'Accueil';
227
		$entree['nom'] = 'Accueil';
226
		$entree['url'] = $this->obtenirUrlMenuAccueil();
228
		$entree['url'] = $this->obtenirUrlMenuAccueil();
227
		$donnees['entrees'][] = $entree;
229
		$donnees['entrees'][] = $entree;
228
		
230
		
229
		if (isset($referentiel)) {
231
		if (isset($referentiel)) {
230
			$entree['nom'] = 'Informations '.strtoupper($referentiel);
232
			$entree['nom'] = 'Informations '.strtoupper($referentiel);
231
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
233
			$entree['url'] = $this->obtenirUrlDetailReferentiel($referentiel);
232
			$donnees['entrees'][] = $entree;
234
			$donnees['entrees'][] = $entree;
233
			
235
			
234
			$module_principal = $this->getModulePrincipalCourant();
236
			$module_principal = $this->getModulePrincipalCourant();
235
			if (isset($module_principal)) {
237
			if (isset($module_principal)) {
236
				$entree['nom'] = $module_principal;
238
				$entree['nom'] = $module_principal;
237
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
239
				$entree['url'] = $this->obtenirUrlMenu($module_principal, $referentiel);
238
				$donnees['entrees'][] = $entree;
240
				$donnees['entrees'][] = $entree;
239
			}
241
			}
240
			
242
			
241
			if (isset($id_traitement)) {
243
			if (isset($id_traitement)) {
242
				$entree['nom'] = "Traitement #$id_traitement";
244
				$entree['nom'] = "Traitement #$id_traitement";
243
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
245
				$entree['url'] = $this->obtenirUrlFicheTraitement($referentiel, $id_traitement);
244
				$donnees['entrees'][] = $entree;
246
				$donnees['entrees'][] = $entree;
245
			}
247
			}
246
			
248
			
247
			if (isset($id_resultat)) {
249
			if (isset($id_resultat)) {
248
				$entree['nom'] = "Résultat #$id_resultat";
250
				$entree['nom'] = "Résultat #$id_resultat";
249
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
251
				$entree['url'] = $this->obtenirUrlFicheResultat($referentiel, $id_resultat);
250
				$donnees['entrees'][] = $entree;
252
				$donnees['entrees'][] = $entree;
251
			}
253
			}
252
		}
254
		}
253
		
255
		
254
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
256
		$this->setSortie(self::RENDU_NAVIGATION, $this->getVue('fil_ariane', $donnees), false);
255
	}
257
	}
256
	
258
	
257
	protected function obtenirUrlDetailReferentiel($referentiel) {
259
	protected function obtenirUrlDetailReferentiel($referentiel) {
258
		$this->url->setRequete(false);
260
		$this->url->setRequete(false);
259
		$this->url->setVariableRequete('module', 'Informations');
261
		$this->url->setVariableRequete('module', 'Informations');
260
		$this->url->setVariableRequete('ref', $referentiel);
262
		$this->url->setVariableRequete('ref', $referentiel);
261
		$url = $this->url->getURL();
263
		$url = $this->url->getURL();
262
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
264
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
263
		return $url;
265
		return $url;
264
	}
266
	}
265
	
267
	
266
	protected function obtenirUrlDetailReferentielTelechargement($referentiel) {
268
	protected function obtenirUrlDetailReferentielTelechargement($referentiel) {
267
		$this->url->setRequete(false);
269
		$this->url->setRequete(false);
268
		$this->url->setVariableRequete('module', 'Informations');
270
		$this->url->setVariableRequete('module', 'Informations');
269
		$this->url->setVariableRequete('action', 'telecharger');
271
		$this->url->setVariableRequete('action', 'telecharger');
270
		$this->url->setVariableRequete('ref', $referentiel);
272
		$this->url->setVariableRequete('ref', $referentiel);
271
		$url = $this->url->getURL();
273
		$url = $this->url->getURL();
272
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
274
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
273
		return $url;
275
		return $url;
274
	}
276
	}
275
	
277
	
276
	protected function obtenirUrlMenuInformations($referentiel) {
278
	protected function obtenirUrlMenuInformations($referentiel) {
277
		return $this->obtenirUrlMenu('Informations', $referentiel);
279
		return $this->obtenirUrlMenu('Informations', $referentiel);
278
	}
280
	}
279
	
281
	
280
	protected function obtenirUrlMenuAccueil() {
282
	protected function obtenirUrlMenuAccueil() {
281
		return $this->obtenirUrlMenu('Accueil');
283
		return $this->obtenirUrlMenu('Accueil');
282
	}
284
	}
283
	
285
	
284
	protected function obtenirUrlMenuTest($referentiel) {
286
	protected function obtenirUrlMenuTest($referentiel) {
285
		return $this->obtenirUrlMenu('Test', $referentiel);
287
		return $this->obtenirUrlMenu('Test', $referentiel);
286
	}
288
	}
287
	
289
	
288
	protected function obtenirUrlMenuVersionnage($referentiel) {
290
	protected function obtenirUrlMenuVersionnage($referentiel) {
289
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
291
		return $this->obtenirUrlMenu('Versionnage', $referentiel);
290
	}
292
	}
291
	
293
	
292
	protected function obtenirUrlDemandeVersionnage($referentiel) {
294
	protected function obtenirUrlDemandeVersionnage($referentiel) {
293
		$this->url->setRequete(false);
295
		$this->url->setRequete(false);
294
		$this->url->setVariableRequete('module', 'Versionnage');
296
		$this->url->setVariableRequete('module', 'Versionnage');
295
		$this->url->setVariableRequete('action', 'demanderTraitement');
297
		$this->url->setVariableRequete('action', 'demanderTraitement');
296
		$this->url->setVariableRequete('ref', $referentiel);
298
		$this->url->setVariableRequete('ref', $referentiel);
297
		$url = $this->url->getURL();
299
		$url = $this->url->getURL();
298
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
300
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
299
		return $url;
301
		return $url;
300
	}
302
	}
301
	
303
	
302
	protected function obtenirUrlMenuConsultation($referentiel) {
304
	protected function obtenirUrlMenuConsultation($referentiel) {
303
		return $this->obtenirUrlMenu('Consultation', $referentiel);
305
		return $this->obtenirUrlMenu('Consultation', $referentiel);
304
	}
306
	}
305
	
307
	
306
	protected function obtenirUrlMenuArbre($referentiel) {
308
	protected function obtenirUrlMenuArbre($referentiel) {
307
		return $this->obtenirUrlMenu('Arbre', $referentiel);
309
		return $this->obtenirUrlMenu('Arbre', $referentiel);
308
	}
310
	}
309
	
311
	
310
	protected function obtenirUrlMenuBranche($referentiel, $num_nom) {
312
	protected function obtenirUrlMenuBranche($referentiel, $num_nom) {
311
		$this->url->setRequete(false);
313
		$this->url->setRequete(false);
312
		$this->url->setVariableRequete('module', 'Arbre');
314
		$this->url->setVariableRequete('module', 'Arbre');
313
		$this->url->setVariableRequete('action', 'afficherBranche');
315
		$this->url->setVariableRequete('action', 'afficherBranche');
314
		$this->url->setVariableRequete('ref', $referentiel);
316
		$this->url->setVariableRequete('ref', $referentiel);
315
		$this->url->setVariableRequete('num_nom', $num_nom);
317
		$this->url->setVariableRequete('num_nom', $num_nom);
316
		$url = $this->url->getURL();
318
		$url = $this->url->getURL();
317
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref', 'num_nom'));
319
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref', 'num_nom'));
318
		return $url;
320
		return $url;
319
	}
321
	}
320
	
322
	
321
	protected function obtenirUrlMenuBrancheSynonyme($referentiel, $num_nom) {
323
	protected function obtenirUrlMenuBrancheSynonyme($referentiel, $num_nom) {
322
		$this->url->setRequete(false);
324
		$this->url->setRequete(false);
323
		$this->url->setVariableRequete('module', 'Arbre');
325
		$this->url->setVariableRequete('module', 'Arbre');
324
		$this->url->setVariableRequete('action', 'afficherBrancheSynonyme');
326
		$this->url->setVariableRequete('action', 'afficherBrancheSynonyme');
325
		$this->url->setVariableRequete('ref', $referentiel);
327
		$this->url->setVariableRequete('ref', $referentiel);
326
		$this->url->setVariableRequete('num_nom', $num_nom);
328
		$this->url->setVariableRequete('num_nom', $num_nom);
327
		$url = $this->url->getURL();
329
		$url = $this->url->getURL();
328
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref', 'num_nom'));
330
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref', 'num_nom'));
329
		return $url;
331
		return $url;
330
	}
332
	}
331
	
333
	
332
	private function obtenirUrlMenu($menu, $referentiel = null) {
334
	private function obtenirUrlMenu($menu, $referentiel = null) {
333
		$this->url->setRequete(false);
335
		$this->url->setRequete(false);
334
		$this->url->setVariableRequete('module', $menu);
336
		$this->url->setVariableRequete('module', $menu);
335
		if (isset($referentiel)) {
337
		if (isset($referentiel)) {
336
			$this->url->setVariableRequete('ref', $referentiel);
338
			$this->url->setVariableRequete('ref', $referentiel);
337
		}
339
		}
338
		$url = $this->url->getURL();
340
		$url = $this->url->getURL();
339
		$this->url->unsetVariablesRequete(array('module', 'ref'));
341
		$this->url->unsetVariablesRequete(array('module', 'ref'));
340
		return $url;
342
		return $url;
341
	}
343
	}
342
	
344
	
343
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
345
	protected function obtenirUrlFicheTraitement($referentiel, $id_traitement) {
344
		$this->url->setRequete(false);
346
		$this->url->setRequete(false);
345
		$this->url->setVariableRequete('module', 'Traitement');
347
		$this->url->setVariableRequete('module', 'Traitement');
346
		$this->url->setVariableRequete('id-t', $id_traitement);
348
		$this->url->setVariableRequete('id-t', $id_traitement);
347
		$this->url->setVariableRequete('ref', $referentiel);
349
		$this->url->setVariableRequete('ref', $referentiel);
348
		$url = $this->url->getURL();
350
		$url = $this->url->getURL();
349
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
351
		$this->url->unsetVariablesRequete(array('module', 'id-t', 'ref'));
350
		return $url;
352
		return $url;
351
	}
353
	}
352
	
354
	
353
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
355
	protected function obtenirUrlFicheResultat($referentiel, $id_resultat) {
354
		$this->url->setRequete(false);
356
		$this->url->setRequete(false);
355
		$this->url->setVariableRequete('module', 'Resultat');
357
		$this->url->setVariableRequete('module', 'Resultat');
356
		$this->url->setVariableRequete('id-r', $id_resultat);
358
		$this->url->setVariableRequete('id-r', $id_resultat);
357
		$this->url->setVariableRequete('ref', $referentiel);
359
		$this->url->setVariableRequete('ref', $referentiel);
358
		$url = $this->url->getURL();
360
		$url = $this->url->getURL();
359
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
361
		$this->url->unsetVariablesRequete(array('module', 'id-r', 'ref'));
360
		return $url;
362
		return $url;
361
	}
363
	}
362
	
364
	
363
	protected function obtenirUrlRecherche($referentiel = null, $txt = null) {
365
	protected function obtenirUrlRecherche($referentiel = null, $txt = null) {
364
		$this->url->setRequete(false);
366
		$this->url->setRequete(false);
365
		if (!is_null($referentiel)) {
367
		if (!is_null($referentiel)) {
366
			$this->url->setVariableRequete('ref', $referentiel);
368
			$this->url->setVariableRequete('ref', $referentiel);
367
		}
369
		}
368
		$this->url->setVariableRequete('module', 'Recherche');
370
		$this->url->setVariableRequete('module', 'Recherche');
369
		$this->url->setVariableRequete('action', 'rechercher');
371
		$this->url->setVariableRequete('action', 'rechercher');
370
		if (!is_null($txt)) {
372
		if (!is_null($txt)) {
371
			$this->url->setVariableRequete('recherche', $txt);
373
			$this->url->setVariableRequete('recherche', $txt);
372
		}
374
		}
373
		$url = $this->url->getURL();
375
		$url = $this->url->getURL();
374
		$this->url->unsetVariablesRequete(array('ref', 'module', 'action', 'recherche'));
376
		$this->url->unsetVariablesRequete(array('ref', 'module', 'action', 'recherche'));
375
		return $url;
377
		return $url;
376
	}
378
	}
377
	protected function obtenirUrlFicheTaxon($referentiel, $num_nom = null) {
379
	protected function obtenirUrlFicheTaxon($referentiel, $num_nom = null) {
378
		$this->url->setRequete(false);
380
		$this->url->setRequete(false);
379
		$this->url->setVariableRequete('ref', $referentiel);
381
		$this->url->setVariableRequete('ref', $referentiel);
380
		$this->url->setVariableRequete('module', 'FicheTaxon');
382
		$this->url->setVariableRequete('module', 'FicheTaxon');
381
		if (!is_null($num_nom)) {
383
		if (!is_null($num_nom)) {
382
			$this->url->setVariableRequete('num_nom', $num_nom);
384
			$this->url->setVariableRequete('num_nom', $num_nom);
383
		}
385
		}
384
		$url = clone $this->url;
386
		$url = clone $this->url;
385
		$this->url->unsetVariablesRequete(array('module', 'id'));
387
		$this->url->unsetVariablesRequete(array('module', 'id'));
386
		return $url->getURL();
388
		return $url->getURL();
387
	}
389
	}
388
	
390
	
389
	/**
391
	/**
390
	 * Lance l'ajout d'un traitement
392
	 * Lance l'ajout d'un traitement
391
	 */
393
	 */
392
	protected function ajouterTraitement($referentiel_code, $script_nom) {
394
	protected function ajouterTraitement($referentiel_code, $script_nom) {
393
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
395
		$this->ajouterTraitementParametre($referentiel_code, null, $script_nom);
394
	}
396
	}
395
	
397
	
396
	/**
398
	/**
397
	 * Lance l'ajout d'un traitement
399
	 * Lance l'ajout d'un traitement
398
	 */
400
	 */
399
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
401
	protected function ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom) {
400
		if (is_null($referentiel_code)) {
402
		if (is_null($referentiel_code)) {
401
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdtfx).");
403
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdtfx).");
402
		} else {
404
		} else {
403
			$traitements_a_supprimer = null;
405
			$traitements_a_supprimer = null;
404
			$traitementDao = new TraitementDao();
406
			$traitementDao = new TraitementDao();
405
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
407
			$resultat_traitement_en_attente = $traitementDao->getTraitementsEnAttente($referentiel_code, $script_nom);
406
			if ($resultat_traitement_en_attente) {
408
			if ($resultat_traitement_en_attente) {
407
				foreach ($resultat_traitement_en_attente as $traitement) {
409
				foreach ($resultat_traitement_en_attente as $traitement) {
408
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
410
					$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['meta_date_creation'], date ("Y-m-d H:i:s"));
409
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
411
					Debug::printr("Différence attente : $difference > ".Config::get('ddv_traitement_attente'));
410
					if ($difference > Config::get('ddv_traitement_attente')) {
412
					if ($difference > Config::get('ddv_traitement_attente')) {
411
						$traitements_a_supprimer[] = $traitement['id_traitement'];
413
						$traitements_a_supprimer[] = $traitement['id_traitement'];
412
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
414
						$this->addMessage("Le traitement #{$traitement['id_traitement']} était en attente depuis plus de 5mn, il a été supprimé.");
413
					} else {
415
					} else {
414
						$this->addMessage("Un traitement est déjà en attente...");
416
						$this->addMessage("Un traitement est déjà en attente...");
415
					}
417
					}
416
				}
418
				}
417
			} else {
419
			} else {
418
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
420
				$resultat_traitement_en_cours = $traitementDao->getTraitementsEnCours($referentiel_code, $script_nom);
419
				if ($resultat_traitement_en_cours) {
421
				if ($resultat_traitement_en_cours) {
420
					foreach ($resultat_traitement_en_cours as $traitement) {
422
					foreach ($resultat_traitement_en_cours as $traitement) {
421
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
423
						$difference = $this->differenceEnSecondeEntreDeuxDates($traitement['date_debut'], date ("Y-m-d H:i:s"));
422
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
424
						Debug::printr("Différence en cours : $difference > ".Config::get('ddv_traitement_en_cours'));
423
						if ($difference > Config::get('ddv_traitement_en_cours')) {
425
						if ($difference > Config::get('ddv_traitement_en_cours')) {
424
							$traitements_a_supprimer[] = $traitement['id_traitement'];
426
							$traitements_a_supprimer[] = $traitement['id_traitement'];
425
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
427
							$this->addMessage("Le traitement #{$traitement['id_traitement']} était en cours depuis plus de 5mn, il a été supprimé.");
426
						} else {
428
						} else {
427
							$this->addMessage("Un traitement est déjà en cours...");
429
							$this->addMessage("Un traitement est déjà en cours...");
428
						}
430
						}
429
					}
431
					}
430
				} else {
432
				} else {
431
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
433
					$resultat = $traitementDao->ajouterTraitementParametre($referentiel_code, $parametres_serialises, $script_nom);
432
					if ($resultat != false) {
434
					if ($resultat != false) {
433
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
435
						$this->addMessage("Le traitement #'$resultat' a été ajouté.");
434
						$this->lancerScript($referentiel_code, $script_nom);
436
						$this->lancerScript($referentiel_code, $script_nom);
435
					} else {
437
					} else {
436
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
438
						$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
437
					}
439
					}
438
				}
440
				}
439
			}
441
			}
440
			// Suppression des traitements posant problème
442
			// Suppression des traitements posant problème
441
			if (count($traitements_a_supprimer) > 0) {
443
			if (count($traitements_a_supprimer) > 0) {
442
				$traitementDao->supprimer($traitements_a_supprimer);
444
				$traitementDao->supprimer($traitements_a_supprimer);
443
			}
445
			}
444
		}
446
		}
445
	}
447
	}
446
	
448
	
447
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
449
	private function differenceEnSecondeEntreDeuxDates($date_01, $date_02) {
448
		if (floatval(phpversion()) >= 5.3 ) {
450
		if (floatval(phpversion()) >= 5.3 ) {
449
			$d1 = new DateTime($date_01);
451
			$d1 = new DateTime($date_01);
450
			$d2 = new DateTime($date_02);
452
			$d2 = new DateTime($date_02);
451
			$difference_absolue = true;
453
			$difference_absolue = true;
452
			$diff = $d1->diff($d2, $difference_absolue);
454
			$diff = $d1->diff($d2, $difference_absolue);
453
			$nbre_secondes = $diff->format('s');
455
			$nbre_secondes = $diff->format('s');
454
		} else {
456
		} else {
455
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
457
			$nbre_secondes = abs(round((strtotime($date_01) - strtotime($date_02)))); 
456
		}
458
		}
457
		return $nbre_secondes;
459
		return $nbre_secondes;
458
	}
460
	}
459
	
461
	
460
	/**
462
	/**
461
	 * Lance le script d'execution des traitements
463
	 * Lance le script d'execution des traitements
462
	 */
464
	 */
463
	protected function lancerScript($referentiel_code, $script_nom) {
465
	protected function lancerScript($referentiel_code, $script_nom) {
464
		$php = Config::get('chemin_bin_php');
466
		$php = Config::get('chemin_bin_php');
465
		$exe = Config::get('chemin_script');
467
		$exe = Config::get('chemin_script');
466
		$action = 'tout';
468
		$action = 'tout';
467
		$log = Config::get('chemin_script_log');
469
		$log = Config::get('chemin_script_log');
468
		$limite_memoire = Config::get('script_limite_memoire');
470
		$limite_memoire = Config::get('script_limite_memoire');
469
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
471
		$commande = "$php -d memory_limit=$limite_memoire -f $exe $script_nom -p $referentiel_code -a $action > $log &";
470
		
472
		
471
		if ($this->verifierSafeModeOff() === false) {
473
		if ($this->verifierSafeModeOff() === false) {
472
			$e = "Le safe_mode est actif sur ce serveur.";
474
			$e = "Le safe_mode est actif sur ce serveur.";
473
		} else if ($this->verifierAccesFonctionExec() === false) {
475
		} else if ($this->verifierAccesFonctionExec() === false) {
474
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
476
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
475
		} else {
477
		} else {
476
			$this->addMessage("Lancement du script effectuant les traitements.");
478
			$this->addMessage("Lancement du script effectuant les traitements.");
477
			exec($commande);
479
			exec($commande);
478
		}
480
		}
479
 
481
 
480
		// Affichage des message de paramêtrage du serveur si nécessaire
482
		// Affichage des message de paramêtrage du serveur si nécessaire
481
		if (Config::get('script_messages') == true) {
483
		if (Config::get('script_messages') == true) {
482
			$message_erreur_tpl = "%s\n.".
484
			$message_erreur_tpl = "%s\n.".
483
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
485
				"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
484
				"La commande à lancer est : <code>$commande</code>";
486
				"La commande à lancer est : <code>$commande</code>";
485
			$this->addMessage(sprintf($message_erreur_tpl, $e));
487
			$this->addMessage(sprintf($message_erreur_tpl, $e));
486
		}
488
		}
487
	}
489
	}
488
	
490
	
489
	private function verifierSafeModeOff() {
491
	private function verifierSafeModeOff() {
490
		return ('1' == ini_get('safe_mode')) ? false : true;
492
		return ('1' == ini_get('safe_mode')) ? false : true;
491
	}
493
	}
492
	
494
	
493
	private function verifierAccesFonctionExec() {
495
	private function verifierAccesFonctionExec() {
494
		$disabled = explode(', ', ini_get('disable_functions'));
496
		$disabled = explode(', ', ini_get('disable_functions'));
495
		return !in_array('exec', $disabled);
497
		return !in_array('exec', $disabled);
496
	}
498
	}
497
	
499
	
498
	//+----------------------------------------------------------------------------------------------------------------+
500
	//+----------------------------------------------------------------------------------------------------------------+
499
	// GESTION DES FICHIERS A TELECHARGER
501
	// GESTION DES FICHIERS A TELECHARGER
500
	
502
	
501
	/**
503
	/**
502
	* Crée la liste d'url des fichiers à télécharger pour un traitement donné
504
	* Crée la liste d'url des fichiers à télécharger pour un traitement donné
503
	* @param Array $infos_traitement tableau contenant les informations du traitement
505
	* @param Array $infos_traitement tableau contenant les informations du traitement
504
	* 
506
	* 
505
	* @return Array un tableau contenant la liste des urls des fichiers à télécharger
507
	* @return Array un tableau contenant la liste des urls des fichiers à télécharger
506
	*/
508
	*/
507
	protected function obtenirUrlsZipPourTraitement($infos_traitement) {
509
	protected function obtenirUrlsZipPourTraitement($infos_traitement) {
508
		$urls_zip = array();
510
		$urls_zip = array();
509
		if (isset($infos_traitement['script']) && $infos_traitement['script'] == 'versionnage') {
511
		if (isset($infos_traitement['script']) && $infos_traitement['script'] == 'versionnage') {
510
			$meta = unserialize($infos_traitement['script_parametres']);
512
			$meta = unserialize($infos_traitement['script_parametres']);
511
			$projet = strtolower($infos_traitement['referentiel_code']);
513
			$projet = strtolower($infos_traitement['referentiel_code']);
512
			$version = str_replace('.', '_', $meta['version']);
514
			$version = str_replace('.', '_', $meta['version']);
513
			$fichier_zip_bdnt = $projet.'_v'.$version.'.zip';
515
			$fichier_zip_bdnt = $projet.'_v'.$version.'.zip';
514
			$url_zip_bdnt = sprintf(Config::get('url_zip_tpl'), $fichier_zip_bdnt);
516
			$url_zip_bdnt = sprintf(Config::get('url_zip_tpl'), $fichier_zip_bdnt);
515
			if ($this->testerUrl($url_zip_bdnt)) {
517
			if ($this->testerUrl($url_zip_bdnt)) {
516
				$urls_zip[$fichier_zip_bdnt] = $url_zip_bdnt;
518
				$urls_zip[$fichier_zip_bdnt] = $url_zip_bdnt;
517
			}
519
			}
518
		}
520
		}
519
		return $urls_zip;
521
		return $urls_zip;
520
	}
522
	}
521
	
523
	
522
	/**
524
	/**
523
	* Teste une url donnée, en tentant de l'ouvrir et de la fermer
525
	* Teste une url donnée, en tentant de l'ouvrir et de la fermer
524
	*
526
	*
525
	* @return boolean un booléen indiquant le succès ou non de l'opération
527
	* @return boolean un booléen indiquant le succès ou non de l'opération
526
	*/
528
	*/
527
	protected function testerUrl($url) {
529
	protected function testerUrl($url) {
528
		//TODO: voir si on peut inclure cette fonction dans le framework
530
		//TODO: voir si on peut inclure cette fonction dans le framework
529
		ini_set('allow_url_fopen', '1');
531
		ini_set('allow_url_fopen', '1');
530
		return (@fclose(@fopen($url, 'r'))) ? true : false;
532
		return (@fclose(@fopen($url, 'r'))) ? true : false;
531
	}
533
	}
532
	
534
	
533
	//+----------------------------------------------------------------------------------------------------------------+
535
	//+----------------------------------------------------------------------------------------------------------------+
534
	// GESTION DU CLIENT REST
536
	// GESTION DU CLIENT REST
535
	
537
	
536
	protected function getRestClient() {
538
	protected function getRestClient() {
537
		if (! isset($this->restClient)) {
539
		if (! isset($this->restClient)) {
538
			$this->restClient = new RestClient();
540
			$this->restClient = new RestClient();
539
		}
541
		}
540
		return $this->restClient;
542
		return $this->restClient;
541
	}
543
	}
542
	
544
	
543
	//+----------------------------------------------------------------------------------------------------------------+
545
	//+----------------------------------------------------------------------------------------------------------------+
544
	// GESTION DE L'IDENTIFICATION
546
	// GESTION DE L'IDENTIFICATION
545
	
547
	
546
	protected function getAuthIdentifiant() {
548
	protected function getAuthIdentifiant() {
547
		$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
549
		$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
548
		return $id;
550
		return $id;
549
	}
551
	}
550
	
552
	
551
	protected function getAuthMotDePasse() {
553
	protected function getAuthMotDePasse() {
552
		$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
554
		$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
553
		return $mdp;
555
		return $mdp;
554
	}
556
	}
555
	
557
	
556
	public function authentifierCoordinateur() { 
558
	public function authentifierCoordinateur() { 
557
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
559
		$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica.";
558
		$message_echec = "Accès limité aux coordinateurs du projet.\n".
560
		$message_echec = "Accès limité aux coordinateurs du projet.\n".
559
			"Votre tentative d'identification a échoué.\n".
561
			"Votre tentative d'identification a échoué.\n".
560
			"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme coordinateur.";
562
			"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme coordinateur.";
561
		return $this->authentifier($message_accueil, $message_echec);
563
		return $this->authentifier($message_accueil, $message_echec);
562
	}
564
	}
563
	
565
	
564
	private function authentifier($message_accueil, $message_echec) {
566
	private function authentifier($message_accueil, $message_echec) {
565
		$id = $this->getAuthIdentifiant();
567
		$id = $this->getAuthIdentifiant();
566
		if (!isset($id)) {
568
		if (!isset($id)) {
567
			$this->envoyerAuth($message_accueil, $message_echec);
569
			$this->envoyerAuth($message_accueil, $message_echec);
568
		} else {
570
		} else {
569
			$autorisation = $this->etreCoordinateurAutorise($id);
571
			$autorisation = $this->etreCoordinateurAutorise($id);
570
			if ($autorisation == false) {
572
			if ($autorisation == false) {
571
				$this->envoyerAuth($message_accueil, $message_echec);
573
				$this->envoyerAuth($message_accueil, $message_echec);
572
			}
574
			}
573
		}
575
		}
574
		return true;
576
		return true;
575
	} 
577
	} 
576
	
578
	
577
	public function etreCoordinateurAutorise($identifiant) {
579
	public function etreCoordinateurAutorise($identifiant) {
578
		$mdp = md5($this->getAuthMotDePasse());
580
		$mdp = md5($this->getAuthMotDePasse());
579
		$url = sprintf(Config::get('authentification.serviceUrlTpl'), $identifiant, $mdp);
581
		$url = sprintf(Config::get('authentification.serviceUrlTpl'), $identifiant, $mdp);
580
		$json = $this->getRestClient()->envoyerRequeteConsultation($url);
582
		$json = $this->getRestClient()->envoyerRequeteConsultation($url);
581
		$existe = json_decode($json);
583
		$existe = json_decode($json);
582
		$admin = $this->etreCoordinateur($identifiant) ? true : false;
584
		$admin = $this->etreCoordinateur($identifiant) ? true : false;
583
		$autorisation = ($existe && $admin) ? true : false;
585
		$autorisation = ($existe && $admin) ? true : false;
584
		return $autorisation;
586
		return $autorisation;
585
	}
587
	}
586
	
588
	
587
	public function etreCoordinateur($courriel) {
589
	public function etreCoordinateur($courriel) {
588
		$coordinateurs = Config::get('authentification.coordinateurs');
590
		$coordinateurs = Config::get('authentification.coordinateurs');
589
		$courriels_autorises = explode(',', $coordinateurs);
591
		$courriels_autorises = explode(',', $coordinateurs);
590
 
592
 
591
		$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ;
593
		$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ;
592
		return $autorisation;
594
		return $autorisation;
593
	}
595
	}
594
	
596
	
595
	private function envoyerAuth($message_accueil, $message_echec) {
597
	private function envoyerAuth($message_accueil, $message_echec) {
596
		header('HTTP/1.0 401 Unauthorized');
598
		header('HTTP/1.0 401 Unauthorized');
597
		header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
599
		header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"');
598
		header('Content-type: text/plain; charset=UTF-8');
600
		header('Content-type: text/plain; charset=UTF-8');
599
		print $message_echec;
601
		print $message_echec;
600
		exit(0);
602
		exit(0);
601
	}
603
	}
602
}
604
}