Subversion Repositories Applications.framework

Rev

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

Rev 410 Rev 413
Line 33... Line 33...
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 410 2012-03-05 13:08:34Z aurelien $
38
 * @version		$Id: RestServeur.php 413 2012-03-15 13:59:19Z jpm $
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 333... Line 333...
333
 
333
 
334
	private function nettoyerParametres(Array $parametres) {
334
	private function nettoyerParametres(Array $parametres) {
335
		// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
335
		// Pas besoin d'utiliser urldecode car déjà fait par php pour les clés et valeur de $_GET
336
		if (isset($parametres) && count($parametres) > 0) {
336
		if (isset($parametres) && count($parametres) > 0) {
337
			foreach ($parametres as $cle => $valeur) {
337
			foreach ($parametres as $cle => $valeur) {
338
				// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car 
338
				// les quotes, guillements et points-virgules ont été retirés des caractères à vérifier car
339
				//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout
339
				//ça n'a plus lieu d'être maintenant que l'on utilise protéger à peu près partout
340
				$verifier = array('NULL', "\n", "\r", "\\", "\x00", "\x1a");
340
				$verifier = array('NULL', "\n", "\r", "\\", "\x00", "\x1a");
341
				$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
341
				$parametres[$cle] = strip_tags(str_replace($verifier, '', $valeur));
342
			}
342
			}
Line 387... Line 387...
387
		switch ($this->methode) {
387
		switch ($this->methode) {
388
			case 'GET':
388
			case 'GET':
389
				$retour = $this->get();
389
				$retour = $this->get();
390
				break;
390
				break;
391
			case 'POST':
391
			case 'POST':
392
				$this->post();
392
				$retour = $this->post();// Retour pour l'alternative PUT
393
				break;
393
				break;
394
			case 'DELETE':
394
			case 'DELETE':
395
				$this->delete();
395
				$this->delete();
396
				break;
396
				break;
397
			case 'PUT':
397
			case 'PUT':
Line 429... Line 429...
429
		}
429
		}
430
		return $retour;
430
		return $retour;
431
	}
431
	}
Line 432... Line 432...
432
 
432
 
-
 
433
	private function post() {
433
	private function post() {
434
		$retour = '';
434
		$paires = $this->parserDonneesRequete();
435
		$paires = $this->parserDonneesRequete();
435
		if (count($paires) != 0) {
436
		if (count($paires) != 0) {
436
			if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Altnative à l'utilisation de DELETE
437
			if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
437
				$retour = $this->delete();
438
				$this->delete();
438
			} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
439
			} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
439
				$retour = $this->put();
440
				$retour = $this->put();
440
			} else {
441
			} else {
441
				if ($this->service != null) {
442
				if ($this->service != null) {
442
					$Service = new $this->service(self::$config);
443
					$Service = new $this->service(self::$config);
Line 458... Line 459...
458
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
459
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
459
			$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
460
			$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
460
				"de la requête avec la méthode HTTP POST.";
461
				"de la requête avec la méthode HTTP POST.";
461
			self::ajouterMessage($e);
462
			self::ajouterMessage($e);
462
		}
463
		}
-
 
464
		return $retour;
463
	}
465
	}
Line 464... Line 466...
464
 
466
 
-
 
467
	private function put() {
465
	private function put() {
468
		$retour = '';
466
		$paires = $this->parserDonneesRequete();
469
		$paires = $this->parserDonneesRequete();
467
		if (count($paires) != 0) {
470
		if (count($paires) != 0) {
468
			if ($this->service != null) {
471
			if ($this->service != null) {
469
				$Service = new $this->service(self::$config);
472
				$Service = new $this->service(self::$config);
470
				if (method_exists($Service, self::METHODE_PUT)) {
473
				if (method_exists($Service, self::METHODE_PUT)) {
471
					$methodePut = self::METHODE_PUT;
474
					$methodePut = self::METHODE_PUT;
472
					$info = $Service->$methodePut($this->ressources, $paires);
475
					$retour = $Service->$methodePut($this->ressources, $paires);
473
					if ($info === true) {
476
					if ($retour !== false) {
474
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
477
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
475
					}
478
					}
476
				} else {
479
				} else {
477
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
480
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
478
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
481
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
Line 483... Line 486...
483
		} else {
486
		} else {
484
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
487
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
485
			$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
488
			$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
486
			self::ajouterMessage($e);
489
			self::ajouterMessage($e);
487
		}
490
		}
-
 
491
		return $retour;
488
	}
492
	}
Line 489... Line 493...
489
 
493
 
490
	private function delete() {
494
	private function delete() {
491
		if (count($this->ressources) != 0) {
495
		if (count($this->ressources) != 0) {