Subversion Repositories Applications.framework

Rev

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

Rev 241 Rev 247
Line 92... Line 92...
92
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
92
	 * L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
93
	const HTTP_CODE_ERREUR = '500';
93
	const HTTP_CODE_ERREUR = '500';
Line 94... Line 94...
94
	
94
	
95
	/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage. 
95
	/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage. 
96
	 * @var boolean */
96
	 * @var boolean */
Line 97... Line 97...
97
	private $debogageActivation = false;
97
	private static $debogageActivation = false;
98
	
98
	
99
	/** Indiquer le mode de débogage à utiliser (@see Debug). 
99
	/** Indiquer le mode de débogage à utiliser (@see Debug). 
Line 100... Line 100...
100
	 * @var string */
100
	 * @var string */
101
	private $debogageMode = '';
101
	private static $debogageMode = '';
102
	
102
	
Line 134... Line 134...
134
	 * Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
134
	 * Ex. http://www.mondomaine.org/services/apiVersion/mon-service?monParametre1=maValeur1&monParametre2=maValeur2
135
	 * @var array
135
	 * @var array
136
	 */
136
	 */
137
	private $parametres = array();
137
	private $parametres = array();
Line -... Line 138...
-
 
138
	
-
 
139
	/** Tableau contenant les paramètres de configuration du serveur.
-
 
140
	 * @var array
-
 
141
	 */
-
 
142
	private static $config = array();
138
	
143
	
139
	/** Codes HTTP. */
144
	/** Codes HTTP. */
140
	private static $http10 = array(
145
	private static $http10 = array(
141
		self::HTTP_CODE_OK => 'OK',	
146
		self::HTTP_CODE_OK => 'OK',	
142
		self::HTTP_CODE_CREATION_OK => 'Created',
147
		self::HTTP_CODE_CREATION_OK => 'Created',
Line 158... Line 163...
158
	 * l'url appelée pour trouver le service demandé.
163
	 * l'url appelée pour trouver le service demandé.
159
	 */
164
	 */
160
	public function __construct() {
165
	public function __construct() {
161
		Config::verifierPresenceParametres($this->parametres_obligatoires);
166
		Config::verifierPresenceParametres($this->parametres_obligatoires);
Line 162... Line 167...
162
		
167
		
163
		$this->debogageActivation = Config::get('fw_debogage');
168
		self::$debogageActivation = Config::get('fw_debogage');
Line 164... Line 169...
164
		$this->debogageMode = Config::get('fw_debogage_mode');
169
		self::$debogageMode = Config::get('fw_debogage_mode');
165
 
170
 
166
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
171
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
Line 311... Line 316...
311
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
316
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
312
	 * database contents.
317
	 * database contents.
313
	 */
318
	 */
314
	private function get() {
319
	private function get() {
315
		if ($this->service != null) {
320
		if ($this->service != null) {
316
			$Service = new $this->service();
321
			$Service = new $this->service(self::$config);
317
			if (method_exists($Service, self::METHODE_GET)) {
322
			if (method_exists($Service, self::METHODE_GET)) {
318
				$methodeGet = self::METHODE_GET;
323
				$methodeGet = self::METHODE_GET;
319
				$Service->$methodeGet($this->ressources, $this->parametres);
324
				$Service->$methodeGet($this->ressources, $this->parametres);
320
			} else {
325
			} else {
321
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
326
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
Line 333... Line 338...
333
				$this->delete();
338
				$this->delete();
334
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
339
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
335
				$this->add();
340
				$this->add();
336
			} else {
341
			} else {
337
				if ($this->service != null) {
342
				if ($this->service != null) {
338
					$Service = new $this->service();
343
					$Service = new $this->service(self::$config);
339
					if (method_exists($Service, self::METHODE_POST)) {
344
					if (method_exists($Service, self::METHODE_POST)) {
340
						$methodePost = self::METHODE_POST;
345
						$methodePost = self::METHODE_POST;
341
						if ($Service->$methodePost($this->ressources, $paires)) {
346
						if ($Service->$methodePost($this->ressources, $paires)) {
342
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
347
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
343
						}
348
						}
Line 356... Line 361...
356
	private function put() {
361
	private function put() {
357
		$paires = $this->parserDonneesRequete();
362
		$paires = $this->parserDonneesRequete();
Line 358... Line 363...
358
 
363
 
359
		if (count($paires) != 0) {
364
		if (count($paires) != 0) {
360
			if ($this->service != null) {
365
			if ($this->service != null) {
361
				$Service = new $this->service();
366
				$Service = new $this->service(self::$config);
362
				if (method_exists($Service, self::METHODE_PUT)) {
367
				if (method_exists($Service, self::METHODE_PUT)) {
363
					$methodePut = self::METHODE_PUT;
368
					$methodePut = self::METHODE_PUT;
364
					if ($Service->$methodePut($this->ressources, $paires)) {
369
					if ($Service->$methodePut($this->ressources, $paires)) {
365
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
370
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
Line 376... Line 381...
376
	}
381
	}
Line 377... Line 382...
377
 
382
 
378
	private function delete() {
383
	private function delete() {
379
		if (count($this->ressources) != 0) {
384
		if (count($this->ressources) != 0) {
380
			if ($this->service != null) {
385
			if ($this->service != null) {
381
				$Service = new $this->service();
386
				$Service = new $this->service(self::$config);
382
				if (method_exists($Service, self::METHODE_DELETE)) {
387
				if (method_exists($Service, self::METHODE_DELETE)) {
383
					$methodeDelete = self::METHODE_DELETE;
388
					$methodeDelete = self::METHODE_DELETE;
384
					if ($Service->$methodeDelete($this->ressources, $paires)) {
389
					if ($Service->$methodeDelete($this->ressources, $paires)) {
385
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
390
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
Line 445... Line 450...
445
	 *  - Debug::MODE_ENTETE_HTTP : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type 
450
	 *  - Debug::MODE_ENTETE_HTTP : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type 
446
	 *  E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) à la fin de l'execution du programme.
451
	 *  E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) à la fin de l'execution du programme.
447
	 *  - Autre valeur : les messages sont formatés puis retournés par la fonction de débogage (à vous de les afficher).
452
	 *  - Autre valeur : les messages sont formatés puis retournés par la fonction de débogage (à vous de les afficher).
448
	 */
453
	 */
449
	public static function gererErreurs() {
454
	public static function gererErreurs() {
450
		if ($this->debogageActivation && GestionnaireException::getExceptionsNbre() > 0) {
455
		if (self::$debogageActivation && GestionnaireException::getExceptionsNbre() > 0) {
451
			$exceptionsTriees = GestionnaireException::getExceptionsTriees();
456
			$exceptionsTriees = GestionnaireException::getExceptionsTriees();
452
			reset($exceptionsTriees);
457
			reset($exceptionsTriees);
453
			$debogageSeulement = true;
458
			$debogageSeulement = true;
454
			if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
459
			if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
455
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
460
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
Line 457... Line 462...
457
			}
462
			}
Line 458... Line 463...
458
			
463
			
459
			$exceptionsFormatees = array();
464
			$exceptionsFormatees = array();
460
			foreach ($exceptionsTriees as $exceptions) {
465
			foreach ($exceptionsTriees as $exceptions) {
461
				foreach ($exceptions as $e) {
466
				foreach ($exceptions as $e) {
462
					if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
467
					if ($debogageSeulement && self::$debogageMode == Debug::MODE_ENTETE_HTTP) {
463
						$exceptionsFormatees[] = GestionnaireException::formaterExceptionTxt($e);
468
						$exceptionsFormatees[] = GestionnaireException::formaterExceptionTxt($e);
464
					} else {
469
					} else {
465
						echo GestionnaireException::formaterExceptionXhtml($e);
470
						echo GestionnaireException::formaterExceptionXhtml($e);
466
					}
471
					}
467
				}
472
				}
Line 468... Line 473...
468
			}
473
			}
469
			
474
			
470
			if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
475
			if ($debogageSeulement && self::$debogageMode == Debug::MODE_ENTETE_HTTP) {
471
				header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
476
				header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
472
			}
477
			}
473
		}
478
		}