Subversion Repositories Applications.framework

Rev

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

Rev 472 Rev 483
Line 451... Line 451...
451
	/**
451
	/**
452
	 * Execute la requête.
452
	 * Execute la requête.
453
	 */
453
	 */
454
	public function executer() {
454
	public function executer() {
455
		$retour = '';
455
		$retour = '';
456
		switch ($this->methode) {
-
 
457
			case 'GET':
-
 
458
				$retour = $this->get();
-
 
459
				break;
456
		try {
460
			case 'POST':
-
 
461
				$retour = $this->post();// Retour pour l'alternative PUT
457
			$methode = 'executer'.ucwords($this->methode);
462
				break;
-
 
463
			case 'DELETE':
-
 
464
				$retour = $this->delete();
458
			if (method_exists($this, $methode)) {
465
				break;
-
 
466
			case 'PUT':
-
 
467
				$retour = $this->put();
459
				$retour = $this->$methode();
468
				break;
-
 
469
			// Autorise l'accès depuis des serveurs tiers
-
 
470
			case 'OPTIONS':
-
 
471
				/*header('Access-Control-Allow-Origin: *');
-
 
472
				header('Access-Control-Allow-Headers:origin, content-type');
-
 
473
				header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
-
 
474
				header('Access-Control-Allow-Content-Type: application/json');
-
 
475
				header('Access-Control-Max-Age: 3628800');
-
 
476
				header('Access-Control-Allow-Credentials: false');*/
-
 
477
				break;
-
 
478
			default :
460
			} else {
479
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_METHODE_NON_AUTORISE);
-
 
480
				header('Allow: GET, POST, DELETE, PUT');
461
				header('Allow: GET, POST, DELETE, PUT');
481
				$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
462
				$msg = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
482
					"Consulter l'entête Allow pour connaître les méthodes autorisées.";
463
					"Consulter l'entête Allow pour connaître les méthodes autorisées.";
-
 
464
				throw new Exception($msg, self::HTTP_CODE_METHODE_NON_AUTORISE);
-
 
465
			}
-
 
466
		} catch (Exception $e) {
-
 
467
			$this->envoyerEnteteStatutHttp($e->getCode());
483
				self::ajouterMessage($e);
468
			$retour = $e->getMessage();
484
		}
469
		}
485
		$this->cloreAccesServeur($retour);
470
		$this->cloreAccesServeur($retour);
486
	}
471
	}
Line 487... Line 472...
487
 
472
 
488
	/**
473
	/**
489
	 * Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
474
	 * Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
490
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
475
	 * when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
491
	 * database contents.
476
	 * database contents.
492
	 */
477
	 */
493
	private function get() {
478
	private function executerGet() {
494
		$retour = '';
479
		$retour = '';
495
		if ($this->service != null) {
480
		if ($this->service != null) {
496
			$Service = new $this->service(self::$config);
481
			$Service = new $this->service(self::$config);
497
			if (method_exists($Service, self::METHODE_GET)) {
482
			if (method_exists($Service, self::METHODE_GET)) {
498
				$methodeGet = self::METHODE_GET;
483
				$methodeGet = self::METHODE_GET;
499
				$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
484
				$parametres = $Service->utiliserParametresBruts() ? $this->parametresBruts : $this->parametres;
500
				$retour = $Service->$methodeGet($this->ressources, $parametres);
485
				$retour = $Service->$methodeGet($this->ressources, $parametres);
501
			} else {
-
 
502
				self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
486
			} else {
503
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
487
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
504
					"lors de l'appel du service via la méthode HTTP GET.";
488
					"lors de l'appel du service via la méthode HTTP GET.";
505
				self::ajouterMessage($e);
489
				throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
506
			}
490
			}
507
		}
491
		}
508
		return $retour;
492
		return $retour;
Line 509... Line 493...
509
	}
493
	}
510
 
494
 
511
	private function post() {
495
	private function executerPost() {
512
		$retour = '';
496
		$retour = '';
513
		$paires = $this->parserDonneesRequete();
-
 
514
		if (count($paires) != 0) {
-
 
515
			if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
-
 
516
				$retour = $this->delete();
-
 
517
			} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
-
 
518
				$retour = $this->put();
-
 
519
			} else {
-
 
520
				if ($this->service != null) {
-
 
521
					$Service = new $this->service(self::$config);
-
 
522
					if (method_exists($Service, self::METHODE_POST)) {
-
 
523
						$methodePost = self::METHODE_POST;
-
 
524
						$info = $Service->$methodePost($this->ressources, $paires);
-
 
525
						if ($info !== false) {
-
 
526
							$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
-
 
527
							$retour = $info;
-
 
528
						}
-
 
529
					} else {
-
 
530
						self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
-
 
531
						$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
-
 
532
							"lors de l'appel du service via la méthode HTTP GET.";
-
 
533
						self::ajouterMessage($e);
-
 
534
					}
-
 
535
				}
-
 
536
			}
-
 
537
		} else {
497
		$paires = $this->parserDonneesRequete();
538
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
498
		if (count($paires) == 0) {
539
			$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
499
			$e = "Le service '{$this->service}' requiert de fournir le contenu à modifier dans le corps ".
540
				"de la requête avec la méthode HTTP POST.";
500
				"de la requête avec la méthode HTTP POST.";
541
			self::ajouterMessage($e);
-
 
542
		}
-
 
Line 543... Line 501...
543
		return $retour;
501
			throw new Exception($e, self::HTTP_CODE_CONTENU_REQUIS);
544
	}
502
		}
-
 
503
 
545
 
504
		if (isset($paires['action']) && $paires['action'] == 'DELETE') {// Alternative à l'utilisation de DELETE
546
	private function put() {
505
			$retour = $this->delete();
547
		$retour = '';
506
		} else if (count($this->ressources) == 0) {// Alternative à l'utilisation de PUT
548
		$paires = $this->parserDonneesRequete();
507
			$retour = $this->put();
549
		if (count($paires) != 0) {
508
		} else {
-
 
509
			if ($this->service != null) {
-
 
510
				$Service = new $this->service(self::$config);
-
 
511
				if (method_exists($Service, self::METHODE_POST) === false) {
-
 
512
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_POST."' nécessaire ".
-
 
513
						"lors de l'appel du service via la méthode HTTP GET.";
550
			if ($this->service != null) {
514
					throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
551
				$Service = new $this->service(self::$config);
515
				}
552
				if (method_exists($Service, self::METHODE_PUT)) {
516
 
-
 
517
				$methodePost = self::METHODE_POST;
-
 
518
				$info = $Service->$methodePost($this->ressources, $paires);
553
					$methodePut = self::METHODE_PUT;
519
				if ($info !== false) {
554
					$info = $Service->$methodePut($this->ressources, $paires);
-
 
555
					if ($info !== false) {
520
					// TODO : supprimer ce test quand tous les ws utiliserons les exceptions
556
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
-
 
557
						$retour = $info;
-
 
558
					}
-
 
559
				} else {
-
 
560
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
521
					if (function_exists('http_response_code') && http_response_code() == 200) {
561
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
522
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
562
						"lors de l'appel du service via la méthode HTTP GET.";
523
					}
563
					self::ajouterMessage($e);
-
 
564
				}
-
 
565
			}
-
 
566
		} else {
-
 
567
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CONTENU_REQUIS);
524
					$retour = $info;
568
			$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
525
				}
569
			self::ajouterMessage($e);
526
			}
Line 570... Line 527...
570
		}
527
		}
-
 
528
		return $retour;
-
 
529
	}
-
 
530
 
-
 
531
	private function executerPut() {
-
 
532
		$paires = $this->parserDonneesRequete();
-
 
533
		if (count($paires) == 0) {
571
		return $retour;
534
			$e = "Il est nécessaire de fournir du contenu dans le corps de la requête pour créer une nouvelle ressource.";
572
	}
-
 
573
 
-
 
574
	private function delete() {
535
			throw new Exception($e, self::HTTP_CODE_CONTENU_REQUIS);
575
		$retour = '';
536
		}
576
		if (count($this->ressources) != 0) {
537
 
577
			$paires = $this->parserDonneesRequete();
-
 
578
			if ($this->service != null) {
-
 
579
				$Service = new $this->service(self::$config);
-
 
580
				if (method_exists($Service, self::METHODE_DELETE)) {
538
		$retour = '';
581
					$methodeDelete = self::METHODE_DELETE;
539
		if ($this->service != null) {
582
					$info = $Service->$methodeDelete($this->ressources, $paires);
540
			$Service = new $this->service(self::$config);
583
					if ($info === true) {
-
 
584
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
-
 
585
					} else if ($info === false) {
541
			if (method_exists($Service, self::METHODE_PUT) === false) {
-
 
542
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
586
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
543
					"lors de l'appel du service via la méthode HTTP GET.";
587
						$e = "La ressource à supprimer est introuvable. Il se peut qu'elle ait été préalablement supprimé.";
544
				throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
588
						self::ajouterMessage($e);
-
 
589
					} else {
545
			}
590
						$this->envoyerEnteteStatutHttp(self::HTTP_CODE_OK);
546
 
591
						$retour = $info;
547
			$methodePut = self::METHODE_PUT;
592
					}
548
			$info = $Service->$methodePut($this->ressources, $paires);
593
				} else {
-
 
594
					self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
549
			if ($info !== false) {
-
 
550
				// TODO : supprimer ce test quand tous les ws utiliserons les exceptions
595
					$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
551
				if (function_exists('http_response_code') && http_response_code() == 200) {
596
						"lors de l'appel du service via la méthode HTTP GET.";
552
					$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
-
 
553
				}
-
 
554
				$retour = $info;
-
 
555
			}
-
 
556
		}
597
					self::ajouterMessage($e);
557
		return $retour;
598
				}
558
	}
-
 
559
 
-
 
560
	private function executerDelete() {
-
 
561
		if (count($this->ressources) == 0) {
-
 
562
			$e = "Il est nécessaire d'indiquer dans l'url la ressource à supprimer.";
-
 
563
			throw new Exception($e, self::HTTP_CODE_MAUVAISE_REQUETE);
-
 
564
		}
-
 
565
 
-
 
566
		$paires = $this->parserDonneesRequete();
-
 
567
		$retour = '';
-
 
568
		if ($this->service != null) {
-
 
569
			$Service = new $this->service(self::$config);
-
 
570
			if (method_exists($Service, self::METHODE_DELETE) === false) {
-
 
571
				$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_DELETE."' nécessaire ".
-
 
572
					"lors de l'appel du service via la méthode HTTP GET.";
-
 
573
				throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
-
 
574
			}
-
 
575
 
599
			}
576
			$methodeDelete = self::METHODE_DELETE;
-
 
577
			$info = $Service->$methodeDelete($this->ressources, $paires);
-
 
578
			if ($info === true) {
-
 
579
				$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
-
 
580
			} else if ($info === false) {
-
 
581
				$e = "La ressource à supprimer est introuvable. Il se peut qu'elle ait été préalablement supprimé.";
600
		} else {
582
				throw new Exception($e, self::HTTP_CODE_RESSOURCE_INTROUVABLE);
601
			$this->envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
583
			} else {
602
			$e = "Il est nécessaire d'indiquer dans l'url la ressource à supprimer.";
584
				$retour = $info;
Line -... Line 585...
-
 
585
			}
-
 
586
		}
-
 
587
		return $retour;
-
 
588
	}
-
 
589
 
-
 
590
	/*private function executerOptions() {
-
 
591
		header('Access-Control-Allow-Origin: *');
-
 
592
		header('Access-Control-Allow-Headers:origin, content-type');
-
 
593
		header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
603
			self::ajouterMessage($e);
594
		header('Access-Control-Allow-Content-Type: application/json');
604
		}
595
		header('Access-Control-Max-Age: 3628800');
605
		return $retour;
596
		header('Access-Control-Allow-Credentials: false');
606
	}
597
	}*/
607
 
598