Subversion Repositories Applications.framework

Rev

Rev 357 | Rev 365 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 357 Rev 360
Line 27... Line 27...
27
 *  
27
 *  
28
 * Encodage en entrée : utf8
28
 * Encodage en entrée : utf8
29
 * Encodage en sortie : utf8
29
 * Encodage en sortie : utf8
30
 * 
30
 * 
31
 * @category	Php 5.2
31
 * @category	Php 5.2
32
 * @package	Framework
32
 * @package		Framework
33
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
33
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
34
 * @copyright	Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
34
 * @copyright	Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
35
 * @license	GPL v3 <http://www.gnu.org/licenses/gpl.txt>
35
 * @license		GPL v3 <http://www.gnu.org/licenses/gpl.txt>
36
 * @license	CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
36
 * @license		CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
37
 * @since 		0.3
37
 * @since 		0.3
38
 * @version	$Id: RestServeur.php 344 2011-06-10 07:51:56Z jpm $
38
 * @version		$Id: RestServeur.php 359 2011-08-30 13:53:45Z delphine $
39
 * @link		/doc/framework/
39
 * @link		/doc/framework/
40
 */
40
 */
41
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
41
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
42
class RestServeur {
42
class RestServeur {
Line 93... Line 93...
93
	
93
	
94
	/** Code d'erreur HTTP 500 Internal Server Error.
94
	/** Code d'erreur HTTP 500 Internal Server Error.
95
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
95
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
Line -... Line 96...
-
 
96
	const HTTP_CODE_ERREUR = '500';
-
 
97
	
-
 
98
	/** Motif de l'epression régulière vérfiant la version de l'API. */
-
 
99
	const MOTIF_API_VERSION = '/^[0-9]+(?:[.][0-9]+)*$/';
-
 
100
	
-
 
101
	/** Motif de l'epression régulière vérfiant le nom du service. */
96
	const HTTP_CODE_ERREUR = '500';
102
	const MOTIF_SERVICE_NOM = '/^[a-z0-9]+(?:[-][a-z0-9]+)*$/';
97
	
103
	
98
	/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage. 
104
	/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage. 
Line 99... Line 105...
99
	 * @var boolean */
105
	 * @var boolean */
Line 141... Line 147...
141
	
147
	
142
	/** Tableau contenant les paramètres de configuration du serveur.
148
	/** Tableau contenant les paramètres de configuration du serveur.
143
	 * @var array
149
	 * @var array
144
	 */
150
	 */
-
 
151
	private static $config = array();
-
 
152
 
-
 
153
	/** Tableau contenant les messages d'erreur et/ou d'avertissement du Serveur.
-
 
154
	 * @var array
-
 
155
	 * */
Line 145... Line 156...
145
	private static $config = array();
156
	private static $messages = array();
146
	
157
	
147
	/** Codes HTTP. */
158
	/** Codes HTTP. */
148
	private static $http10 = array(
159
	private static $http10 = array(
Line 174... Line 185...
174
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
185
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
175
			$this->initialiserMethode();
186
			$this->initialiserMethode();
176
			$this->initialiserRequeteDonnees();
187
			$this->initialiserRequeteDonnees();
Line 177... Line 188...
177
			
188
			
-
 
189
			$urlParts = $this->decouperUrlChemin();
178
			$urlParts = $this->decouperUrlChemin();
190
			
179
			$this->initialiserApiVersion(array_shift($urlParts));
191
			$this->initialiserApiVersion(array_shift($urlParts));
180
			$this->initialiserServiceNom(array_shift($urlParts));
192
			$this->initialiserServiceNom(array_shift($urlParts));
Line 181... Line 193...
181
			$this->initialiserRessource($urlParts);
193
			$this->initialiserRessource($urlParts);
182
			
194
			
183
			$this->initialiserParametres();
195
			$this->initialiserParametres();
184
			// Enregistrement en première position des autoload de la méthode gérant les classes des services 
196
			// Enregistrement en première position des autoload de la méthode gérant les classes des services 
-
 
197
			spl_autoload_register(array(get_class(), 'chargerClasse'));
185
			spl_autoload_register(array(get_class(), 'chargerClasse'));
198
		} else {
186
		} else {
199
			self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
187
			$e = "La classe Serveur du TBFRamework nécessite, pour fonctionner, l'accès aux variables serveurs REQUEST_URI, REQUEST_METHOD et QUERY_STRING.";
200
			$e = "La classe Serveur du TBFRamework nécessite, pour fonctionner, l'accès aux variables serveurs REQUEST_URI, REQUEST_METHOD et QUERY_STRING.";
188
			trigger_error($e, E_USER_ERROR);
201
			self::ajouterMessage($e);
Line 189... Line 202...
189
		}
202
		}
190
	}
203
	}
Line 208... Line 221...
208
		}
221
		}
209
	}
222
	}
Line 210... Line 223...
210
	
223
	
211
	private function decouperUrlChemin() {
224
	private function decouperUrlChemin() {
212
		if (isset($_SERVER['REDIRECT_URL']) && $_SERVER['REDIRECT_URL'] != '') {
225
		if (isset($_SERVER['REDIRECT_URL']) && $_SERVER['REDIRECT_URL'] != '') {
213
			if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
226
			if (isset($_SERVER['REDIRECT_QUERY_STRING']) && !empty($_SERVER['REDIRECT_QUERY_STRING'])) {
214
				$url = $_SERVER['REDIRECT_URL'].'?'.$_SERVER['REDIRECT_QUERY_STRING'];
227
				$url = $_SERVER['REDIRECT_URL'].'?'.$_SERVER['REDIRECT_QUERY_STRING'];
215
			} else {
228
			} else {
216
				$url = $_SERVER['REDIRECT_URL'];
229
				$url = $_SERVER['REDIRECT_URL'];
217
			}
230
			}
218
		} else {
231
		} else {
219
			$url = $_SERVER['REQUEST_URI'];
232
			$url = $_SERVER['REQUEST_URI'];
220
		}
-
 
-
 
233
		}
221
		//echo '<pre>'; print_r($_SERVER); echo '</pre>';
234
		
222
		if (strlen($_SERVER['QUERY_STRING']) == 0) {
235
		if (strlen($_SERVER['QUERY_STRING']) == 0) {
223
			$tailleURL = strlen($url);
236
			$tailleURL = strlen($url);
224
		} else {
237
		} else {
225
			$tailleURL = -(strlen($_SERVER['QUERY_STRING']) + 1);
238
			$tailleURL = -(strlen($_SERVER['QUERY_STRING']) + 1);
226
		}
-
 
-
 
239
		}
227
		//echo '<br/>url : '.$url;
240
		
228
		$urlChaine = '';
241
		$urlChaine = '';
229
		if (strpos($url, Config::get('serveur.baseURL')) !== false) {
242
		if (strpos($url, Config::get('serveur.baseURL')) !== false) {
230
			$urlChaine = substr($url, strlen(Config::get('serveur.baseURL')), $tailleURL);
243
			$urlChaine = substr($url, strlen(Config::get('serveur.baseURL')), $tailleURL);
231
		} else if (strpos($url, Config::get('serveur.baseAlternativeURL')) !== false) {
244
		} else if (strpos($url, Config::get('serveur.baseAlternativeURL')) !== false) {
232
			$urlChaine = substr($url, strlen(Config::get('serveur.baseAlternativeURL')), $tailleURL);
245
			$urlChaine = substr($url, strlen(Config::get('serveur.baseAlternativeURL')), $tailleURL);
233
		}
246
		}
234
		return explode('/', $urlChaine);
247
		return explode('/', $urlChaine);
Line 235... Line 248...
235
	}
248
	}
236
	
249
	
237
	private function initialiserApiVersion($apiVersion) {
250
	private function initialiserApiVersion($apiVersion) {
238
		if (isset($apiVersion) && !empty($apiVersion)) {
251
		if ($this->verifierApiVersion($apiVersion)) {
239
			$this->apiVersion = $apiVersion;
252
			$this->apiVersion = $apiVersion;
-
 
253
			self::$config['chemins']['api'] = Config::get('chemin_modules').$this->apiVersion.DS;
-
 
254
		} else {
-
 
255
			self::envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
240
			self::$config['chemins']['api'] = Config::get('chemin_modules').$this->apiVersion.DS;
256
			$e = "Aucune version d'API n'a été spécifiée.\n".
-
 
257
				"La version doit respecter l'expression régulière suivante : ".self::MOTIF_API_VERSION.".\n".
241
		} else {
258
			  	"L'url doit avoir la forme suivante : http://www.mondomaine.org/services/apiVersion/monService/";
-
 
259
			self::ajouterMessage($e);
-
 
260
			self::cloreAccesServeur();
-
 
261
		}
-
 
262
	}
-
 
263
	
-
 
264
	private function verifierApiVersion($apiVersion) {
-
 
265
		$apiOk = false;
242
			$e = "Aucune version d'API n'a été spécifié dans l'url qui doit avoir la forme suivante http://www.mondomaine.org/services/apiVersion/monService/";
266
		if (isset($apiVersion) && !empty($apiVersion) && preg_match(self::MOTIF_API_VERSION, $apiVersion)) {
-
 
267
			$apiOk = true;
243
			trigger_error($e, E_USER_ERROR);
268
		}
Line 244... Line 269...
244
		}
269
		return $apiOk;
245
	}
270
	}
246
	
271
	
247
	private function initialiserServiceNom($serviceNom) {
272
	private function initialiserServiceNom($serviceNom) {
-
 
273
		if ($this->verifierServiceNom($serviceNom)) {
-
 
274
			$this->service = $this->traiterNomService($serviceNom);
-
 
275
		} else {
248
		if (isset($serviceNom) && !empty($serviceNom)) {
276
			self::envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
-
 
277
			$e = "Aucune nom de service n'a été spécifié.\n".
249
			$this->service = $this->traiterNomService($serviceNom);
278
				"La nom du service doit respecter l'expression régulière suivante : ".self::MOTIF_SERVICE_NOM.".\n".
-
 
279
			  	"L'url doit avoir la forme suivante : http://www.mondomaine.org/services/apiVersion/monService/";
-
 
280
			self::ajouterMessage($e);
-
 
281
			self::cloreAccesServeur();
-
 
282
		}
-
 
283
	}
-
 
284
	
-
 
285
	private function verifierServiceNom($serviceNom) {
250
		} else {
286
		$serviceNomOk = false;
-
 
287
		if (isset($serviceNom) && !empty($serviceNom) && preg_match(self::MOTIF_SERVICE_NOM, $serviceNom)) {
251
			$e = "Aucun service n'a été spécifié dans l'url qui doit avoir la forme suivante http://www.mondomaine.org/services/apiVersion/monService/";
288
			$serviceNomOk = true;
Line 252... Line 289...
252
			trigger_error($e, E_USER_ERROR);
289
		}
253
		}
290
		return $serviceNomOk;
254
	}
291
	}
Line 292... Line 329...
292
	*/
329
	*/
293
	public static function chargerClasse($classe) {
330
	public static function chargerClasse($classe) {
294
		if (class_exists($classe)) {
331
		if (class_exists($classe)) {
295
			return null;
332
			return null;
296
		}
333
		}
297
 
-
 
-
 
334
		$classeTrouvee = false;
298
		$chemins = array('', self::$config['chemins']['api']);
335
		$chemins = array('', self::$config['chemins']['api']);
299
		foreach ($chemins as $chemin) {
336
		foreach ($chemins as $chemin) {
300
			$chemin = $chemin.$classe.'.php';
337
			$chemin = $chemin.$classe.'.php';
301
			if (file_exists($chemin)) {
338
			if (file_exists($chemin)) {
302
				require_once $chemin;
339
				require_once $chemin;
-
 
340
				$classeTrouvee = true;
303
			}
341
			}
304
		}
342
		}
-
 
343
		if ($classeTrouvee === false) {
-
 
344
			self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
-
 
345
			$e = "La classe '$classe' du service n'a pas été trouvée par le serveur.\n".
-
 
346
				"Cela peut signifier que le nom du service saisi comporte une erreur.";
-
 
347
			self::ajouterMessage($e);
-
 
348
			self::cloreAccesServeur();
-
 
349
		}
305
	}
350
	}
Line 306... Line 351...
306
	
351
	
307
	/**
352
	/**
308
	 * Execute la requête.
353
	 * Execute la requête.
309
	 */
354
	 */
310
	function executer() {
355
	public function executer() {
311
		switch ($this->methode) {
356
		switch ($this->methode) {
312
			case 'GET':
357
			case 'GET':
313
				$this->get();
358
				$this->get();
314
				break;
359
				break;
Line 320... Line 365...
320
				break;
365
				break;
321
			case 'PUT':
366
			case 'PUT':
322
				$this->put();
367
				$this->put();
323
				break;
368
				break;
324
			default :
369
			default :
-
 
370
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_METHODE_NON_AUTORISE);
-
 
371
				header('Allow: GET, POST, DELETE, PUT');
325
				$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.";
372
				$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
-
 
373
					"Consulter l'entête Allow pour connaître les méthodes autorisées.";
326
				trigger_error($e, E_USER_WARNING);
374
				self::ajouterMessage($e);
327
		}
375
		}
328
		// 	Affichage des exceptions et erreurs générées par les services
-
 
329
		$this->gererErreurs();
376
		$this->cloreAccesServeur();
330
	}
377
	}
Line 331... Line 378...
331
 
378
 
332
	/**
379
	/**
333
	 * Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
380
	 * Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
Line 339... Line 386...
339
			$Service = new $this->service(self::$config);
386
			$Service = new $this->service(self::$config);
340
			if (method_exists($Service, self::METHODE_GET)) {
387
			if (method_exists($Service, self::METHODE_GET)) {
341
				$methodeGet = self::METHODE_GET;
388
				$methodeGet = self::METHODE_GET;
342
				$Service->$methodeGet($this->ressources, $this->parametres);
389
				$Service->$methodeGet($this->ressources, $this->parametres);
343
			} else {
390
			} else {
-
 
391
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
344
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
392
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
345
					"lors de l'appel du service via la méthode HTTP GET.";
393
					"lors de l'appel du service via la méthode HTTP GET.";
346
				trigger_error($e, E_USER_ERROR);
394
				self::ajouterMessage($e);
347
			}
395
			}
348
		}
396
		}
349
	}
397
	}
Line 350... Line 398...
350
 
398
 
351
	private function post() {
399
	private function post() {
352
		$paires = $this->parserDonneesRequete();
-
 
353
 
400
		$paires = $this->parserDonneesRequete();
354
		if (count($paires) != 0) {
401
		if (count($paires) != 0) {
355
			if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Altnative à l'utilisation de DELETE
402
			if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Altnative à l'utilisation de DELETE
356
				$this->delete();
403
				$this->delete();
357
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
404
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
358
				$this->put();
405
				$this->put();
359
			} else {
406
			} else {
360
				if ($this->service != null) {
407
				if ($this->service != null) {
361
					$Service = new $this->service(self::$config);
408
					$Service = new $this->service(self::$config);
362
					if (method_exists($Service, self::METHODE_POST)) {
409
					if (method_exists($Service, self::METHODE_POST)) {
363
						$methodePost = self::METHODE_POST;
410
						$methodePost = self::METHODE_POST;
-
 
411
						$info = $Service->$methodePost($this->ressources, $paires);
364
						if ($Service->$methodePost($this->ressources, $paires)) {
412
						if ($info === true) {
365
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
413
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
366
						}
414
						}
-
 
415
					} else {
367
					} else {
416
						self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
368
						$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
417
						$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
369
							"lors de l'appel du service via la méthode HTTP POST.";
418
							"lors de l'appel du service via la méthode HTTP GET.";
370
						trigger_error($e, E_USER_ERROR);
419
						self::ajouterMessage($e);
371
					}
420
					}
372
				}
421
				}
373
			} 
422
			} 
374
		} else {
423
		} else {
-
 
424
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
-
 
425
			$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
-
 
426
				"de la requête avec la méthode HTTP POST.";
375
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
427
			self::ajouterMessage($e);
376
		}
428
		}
Line 377... Line 429...
377
	}
429
	}
378
 
430
 
379
	private function put() {
-
 
380
		$paires = $this->parserDonneesRequete();
431
	private function put() {
381
 
432
		$paires = $this->parserDonneesRequete();
382
		if (count($paires) != 0) {
433
		if (count($paires) != 0) {
383
			if ($this->service != null) {
434
			if ($this->service != null) {
384
				$Service = new $this->service(self::$config);
435
				$Service = new $this->service(self::$config);
385
				if (method_exists($Service, self::METHODE_PUT)) {
436
				if (method_exists($Service, self::METHODE_PUT)) {
-
 
437
					$methodePut = self::METHODE_PUT;
386
					$methodePut = self::METHODE_PUT;
438
					$info = $Service->$methodePut($this->ressources, $paires);
387
					if ($Service->$methodePut($this->ressources, $paires)) {
439
					if ($info === true) {
388
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
440
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
-
 
441
					}
389
					}
442
				} else {
390
				} else {
443
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
391
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
444
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
392
						"lors de l'appel du service via la méthode HTTP PUT (ou équivalant).";
445
						"lors de l'appel du service via la méthode HTTP GET.";
393
					trigger_error($e, E_USER_ERROR);
446
					self::ajouterMessage($e);
394
				}
447
				}
395
			}
448
			}
-
 
449
		} else {
-
 
450
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
396
		} else {
451
			$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
397
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
452
			self::ajouterMessage($e);
Line 398... Line 453...
398
		}
453
		}
399
	}
454
	}
400
 
455
 
401
	private function delete() {
456
	private function delete() {
402
		if (count($this->ressources) != 0) {
457
		if (count($this->ressources) != 0) {
403
			if ($this->service != null) {
458
			if ($this->service != null) {
404
				$Service = new $this->service(self::$config);
459
				$Service = new $this->service(self::$config);
-
 
460
				if (method_exists($Service, self::METHODE_DELETE)) {
405
				if (method_exists($Service, self::METHODE_DELETE)) {
461
					$methodeDelete = self::METHODE_DELETE;
406
					$methodeDelete = self::METHODE_DELETE;
462
					$info = $Service->$methodeDelete($this->ressources);
407
					if ($Service->$methodeDelete($this->ressources, $paires)) {
463
					if ($info === true) {
-
 
464
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
-
 
465
					} else if ($info === false) {
408
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
466
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
409
					} else {
467
						$e = "La ressource à supprimer est introuvable. Il se peut qu'elle ait été préalablement supprimé.";
-
 
468
						self::ajouterMessage($e);
410
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
469
					}
411
					}
470
				} else {
412
				} else {
471
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
413
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
472
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
414
						"lors de l'appel du service via la méthode HTTP DELETE (ou équivalant).";
473
						"lors de l'appel du service via la méthode HTTP GET.";
415
					trigger_error($e, E_USER_ERROR);
474
					self::ajouterMessage($e);
416
				}
475
				}
-
 
476
			}
-
 
477
		} else {
417
			}
478
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
418
		} else {
479
			$e = "Il est nécessaire d'indiquer dans l'url la ressource à supprimer.";
Line 419... Line 480...
419
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
480
			self::ajouterMessage($e);
420
		}
481
		}
Line 455... Line 516...
455
			header("HTTP/1.0 $code $txt", true);
516
			header("HTTP/1.0 $code $txt", true);
456
		}
517
		}
457
	}
518
	}
Line 458... Line 519...
458
	
519
	
-
 
520
	/**
-
 
521
	 * Termine l'accès au serveur après envoir envoyer les messages.
-
 
522
	 */
-
 
523
	private static function cloreAccesServeur() {
-
 
524
		// 	Gestion des exceptions et erreurs générées par les services
-
 
525
		self::gererErreurs();
-
 
526
		// Envoie des messages d'erreur et d'avertissement du serveur
-
 
527
		self::envoyerMessages();
-
 
528
		// Nous terminons le script
-
 
529
		exit(0);
-
 
530
	}
-
 
531
	
459
	/**
532
	/**
460
	 * Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
533
	 * Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
461
	 * Si nous avec des erreurs d'un type différent d'E_USER_NOTICE (réservé au débogage), elle sont renvoyées sur la sortie 
534
	 * Si nous avec des erreurs d'un type différent d'E_USER_NOTICE (réservé au débogage), elle sont renvoyées sur la sortie 
462
	 * standard (via echo).
535
	 * standard (via echo).
463
	 * Si seulement des erreurs de type E_USER_NOTICE, sont présentes, elle sont envoyées en fonction du contenu du paramètre de 
536
	 * Si seulement des erreurs de type E_USER_NOTICE, sont présentes, elle sont envoyées en fonction du contenu du paramètre de 
Line 493... Line 566...
493
			if ($debogageSeulement && self::$debogageMode == Debug::MODE_ENTETE_HTTP) {
566
			if ($debogageSeulement && self::$debogageMode == Debug::MODE_ENTETE_HTTP) {
494
				header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
567
				header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
495
			}
568
			}
496
		}
569
		}
497
	}
570
	}
-
 
571
	
-
 
572
	
-
 
573
	/**
-
 
574
	 * Permet d'ajouter un message d'erreur ou d'avertissement qui sera envoyé au client.
-
 
575
	 * Le message doit être au format texte et en UTF-8.
-
 
576
	 * @param string $message le message à envoyer. 
-
 
577
	 */
-
 
578
	public static function ajouterMessage($message) {
-
 
579
		if (isset($message) && !empty($message)) {
-
 
580
			self::$messages[] = $message;
-
 
581
		}
-
 
582
	}
-
 
583
	
-
 
584
	/**
-
 
585
	 * Envoie au client les éventuels messages d'erreur et d'avertissement du Serveur.
-
 
586
	 * Le format d'envoie est text/plain encodé en UTF-8.
-
 
587
	 */
-
 
588
	private static function envoyerMessages() {
-
 
589
		if (count(self::$messages) > 0) {
-
 
590
			header("Content-Type: text/plain; charset=utf-8");
-
 
591
			print implode("\n", self::$messages);
-
 
592
		}
-
 
593
	}
498
}
594
}
499
?>
595
?>
500
596