Subversion Repositories Applications.framework

Rev

Rev 232 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 232 Rev 237
Line 89... Line 89...
89
	
89
	
90
	/** Code d'erreur HTTP 500 Internal Server Error.
90
	/** Code d'erreur HTTP 500 Internal Server Error.
91
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
91
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
Line 92... Line 92...
92
	const HTTP_CODE_ERREUR = '500';
92
	const HTTP_CODE_ERREUR = '500';
-
 
93
	
-
 
94
	/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage. 
-
 
95
	 * @var boolean */
-
 
96
	private $debogageActivation = false;
93
	
97
	
94
	/** Les paramètres de configuration dynamiques internes au serveur. 
98
	/** Indiquer le mode de débogage à utiliser (@see Debug). 
Line 95... Line 99...
95
	 * @var array */
99
	 * @var string */
96
	private static $config = array();
100
	private $debogageMode = '';
97
	
101
	
Line 148... Line 152...
148
	/**
152
	/**
149
	 * Analyse les données envoyées au serveur, enregistre la méthode HTTP utilisée pour appeler le serveur et parse
153
	 * Analyse les données envoyées au serveur, enregistre la méthode HTTP utilisée pour appeler le serveur et parse
150
	 * l'url appelée pour trouver le service demandé.
154
	 * l'url appelée pour trouver le service demandé.
151
	 */
155
	 */
152
	public function __construct() {
156
	public function __construct() {
-
 
157
		$this->debogageActivation = Config::get('fw_debogage');
-
 
158
		$this->debogageMode = Config::get('fw_debogage_mode');
-
 
159
 
153
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
160
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
154
			$this->initialiserMethode();
161
			$this->initialiserMethode();
155
			$this->initialiserRequeteDonnees();
162
			$this->initialiserRequeteDonnees();
Line 156... Line 163...
156
			
163
			
Line 298... Line 305...
298
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
305
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
299
	 * database contents.
306
	 * database contents.
300
	 */
307
	 */
301
	private function get() {
308
	private function get() {
302
		if ($this->service != null) {
309
		if ($this->service != null) {
303
			$Service = new $this->service(self::$config);
310
			$Service = new $this->service();
304
			if (method_exists($Service, self::METHODE_GET)) {
311
			if (method_exists($Service, self::METHODE_GET)) {
305
				$methodeGet = self::METHODE_GET;
312
				$methodeGet = self::METHODE_GET;
306
				$Service->$methodeGet($this->ressources, $this->parametres);
313
				$Service->$methodeGet($this->ressources, $this->parametres);
307
			} else {
314
			} else {
308
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
315
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
Line 320... Line 327...
320
				$this->delete();
327
				$this->delete();
321
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
328
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
322
				$this->add();
329
				$this->add();
323
			} else {
330
			} else {
324
				if ($this->service != null) {
331
				if ($this->service != null) {
325
					$Service = new $this->service(self::$config);
332
					$Service = new $this->service();
326
					if (method_exists($Service, self::METHODE_POST)) {
333
					if (method_exists($Service, self::METHODE_POST)) {
327
						$methodePost = self::METHODE_POST;
334
						$methodePost = self::METHODE_POST;
328
						if ($Service->$methodePost($this->ressources, $paires)) {
335
						if ($Service->$methodePost($this->ressources, $paires)) {
329
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
336
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
330
						}
337
						}
Line 343... Line 350...
343
	private function put() {
350
	private function put() {
344
		$paires = $this->parserDonneesRequete();
351
		$paires = $this->parserDonneesRequete();
Line 345... Line 352...
345
 
352
 
346
		if (count($paires) != 0) {
353
		if (count($paires) != 0) {
347
			if ($this->service != null) {
354
			if ($this->service != null) {
348
				$Service = new $this->service(self::$config);
355
				$Service = new $this->service();
349
				if (method_exists($Service, self::METHODE_PUT)) {
356
				if (method_exists($Service, self::METHODE_PUT)) {
350
					$methodePut = self::METHODE_PUT;
357
					$methodePut = self::METHODE_PUT;
351
					if ($Service->$methodePut($this->ressources, $paires)) {
358
					if ($Service->$methodePut($this->ressources, $paires)) {
352
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
359
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
Line 363... Line 370...
363
	}
370
	}
Line 364... Line 371...
364
 
371
 
365
	private function delete() {
372
	private function delete() {
366
		if (count($this->ressources) != 0) {
373
		if (count($this->ressources) != 0) {
367
			if ($this->service != null) {
374
			if ($this->service != null) {
368
				$Service = new $this->service(self::$config);
375
				$Service = new $this->service();
369
				if (method_exists($Service, self::METHODE_DELETE)) {
376
				if (method_exists($Service, self::METHODE_DELETE)) {
370
					$methodeDelete = self::METHODE_DELETE;
377
					$methodeDelete = self::METHODE_DELETE;
371
					if ($Service->$methodeDelete($this->ressources, $paires)) {
378
					if ($Service->$methodeDelete($this->ressources, $paires)) {
372
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
379
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
Line 419... Line 426...
419
			header("HTTP/1.0 $code $txt", true);
426
			header("HTTP/1.0 $code $txt", true);
420
		}
427
		}
421
	}
428
	}
Line 422... Line 429...
422
	
429
	
423
	/**
430
	/**
-
 
431
	 * Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
-
 
432
	 * 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 
-
 
433
	 * standard (via echo).
-
 
434
	 * Si seulement des erreurs de type E_USER_NOTICE, sont présentes, elle sont envoyées en fonction du contenu du paramètre de 
-
 
435
	 * config "fw_debogage_mode" :
-
 
436
	 *  - Debug::MODE_ECHO : les messages sont affichés en utilisant echo au moment où ils sont déclenchés dans le code. 
-
 
437
	 *  - Debug::MODE_NOTICE : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type 
-
 
438
	 *  E_USER_NOTICE et sont renvoyés sur la sortie standard à la fin de l'execution du programme (via echo).
-
 
439
	 *  - Debug::MODE_ENTETE_HTTP : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type 
-
 
440
	 *  E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) à la fin de l'execution du programme.
424
	 * Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode. 
441
	 *  - Autre valeur : les messages sont formatés puis retournés par la fonction de débogage (à vous de les afficher).
425
	 */
442
	 */
426
	public static function gererErreurs() {
443
	public static function gererErreurs() {
427
		if (Config::get('fw_debogage') && GestionnaireException::getExceptionsNbre() > 0) {
444
		if ($this->debogageActivation && GestionnaireException::getExceptionsNbre() > 0) {
428
			$exceptionsTriees = GestionnaireException::getExceptionsTriees();
445
			$exceptionsTriees = GestionnaireException::getExceptionsTriees();
-
 
446
			reset($exceptionsTriees);
429
			reset($exceptionsTriees);
447
			$debogageSeulement = true;
430
			if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
448
			if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
-
 
449
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
431
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
450
				$debogageSeulement = false;
-
 
451
			}
-
 
452
			
432
			}
453
			$exceptionsFormatees = array();
433
			foreach ($exceptionsTriees as $exceptions) {
454
			foreach ($exceptionsTriees as $exceptions) {
-
 
455
				foreach ($exceptions as $e) {
-
 
456
					if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
-
 
457
						$exceptionsFormatees[] = GestionnaireException::formaterExceptionTxt($e);
434
				foreach ($exceptions as $e) {
458
					} else {
-
 
459
						echo GestionnaireException::formaterExceptionXhtml($e);
435
					echo GestionnaireException::formaterExceptionXhtml($e);
460
					}
436
				}
461
				}
-
 
462
			}
-
 
463
			
-
 
464
			if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
-
 
465
				header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
437
			}
466
			}
438
		}
467
		}
439
	}
468
	}
440
}
469
}
441
?>
470
?>