Subversion Repositories Applications.referentiel

Rev

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

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