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 413 2012-03-15 13:59:19Z jpm $
|
38 |
* @version $Id: RestServeur.php 421 2013-04-11 14:43:49Z 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 265... |
Line 265... |
265 |
|
265 |
|
266 |
private function initialiserApiVersion($apiVersion) {
|
266 |
private function initialiserApiVersion($apiVersion) {
|
267 |
if ($this->verifierApiVersion($apiVersion)) {
|
267 |
if ($this->verifierApiVersion($apiVersion)) {
|
268 |
$this->apiVersion = $apiVersion;
|
268 |
$this->apiVersion = $apiVersion;
|
- |
|
269 |
self::$config['chemins']['api'] = Config::get('chemin_modules').$this->apiVersion.DS;
|
269 |
self::$config['chemins']['api'] = Config::get('chemin_modules').$this->apiVersion.DS;
|
270 |
self::$config['chemins']['api_bibliotheque'] = self::$config['chemins']['api'].Config::get('dossier_bibliotheque').DS;
|
270 |
} else {
|
271 |
} else {
|
271 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
|
272 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_MAUVAISE_REQUETE);
|
272 |
$e = "Aucune version d'API n'a été spécifiée.\n".
|
273 |
$e = "Aucune version d'API n'a été spécifiée.\n".
|
273 |
"La version doit respecter l'expression régulière suivante : ".self::MOTIF_API_VERSION.".\n".
|
274 |
"La version doit respecter l'expression régulière suivante : ".self::MOTIF_API_VERSION.".\n".
|
Line 368... |
Line 369... |
368 |
*/
|
369 |
*/
|
369 |
public static function chargerClasse($classe) {
|
370 |
public static function chargerClasse($classe) {
|
370 |
if (class_exists($classe)) {
|
371 |
if (class_exists($classe)) {
|
371 |
return null;
|
372 |
return null;
|
372 |
}
|
373 |
}
|
373 |
$chemins = array('', self::$config['chemins']['api']);
|
374 |
$chemins = array('', self::$config['chemins']['api'], self::$config['chemins']['api_bibliotheque']);
|
374 |
foreach ($chemins as $chemin) {
|
375 |
foreach ($chemins as $chemin) {
|
375 |
$chemin = $chemin.$classe.'.php';
|
376 |
$chemin = $chemin.$classe.'.php';
|
376 |
if (file_exists($chemin)) {
|
377 |
if (file_exists($chemin)) {
|
377 |
require_once $chemin;
|
378 |
require_once $chemin;
|
378 |
}
|
379 |
}
|
Line 395... |
Line 396... |
395 |
$this->delete();
|
396 |
$this->delete();
|
396 |
break;
|
397 |
break;
|
397 |
case 'PUT':
|
398 |
case 'PUT':
|
398 |
$retour = $this->put();
|
399 |
$retour = $this->put();
|
399 |
break;
|
400 |
break;
|
- |
|
401 |
// Autorise l'accès depuis des serveurs tiers
|
- |
|
402 |
/*
|
- |
|
403 |
case 'OPTIONS':
|
- |
|
404 |
header('Access-Control-Allow-Origin: *');
|
- |
|
405 |
header('Access-Control-Allow-Headers:origin, content-type');
|
- |
|
406 |
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
- |
|
407 |
header('Access-Control-Allow-Content-Type: application/json');
|
- |
|
408 |
header('Access-Control-Max-Age: 3628800');
|
- |
|
409 |
header('Access-Control-Allow-Credentials: false');
|
- |
|
410 |
break;
|
- |
|
411 |
*/
|
400 |
default :
|
412 |
default :
|
401 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_METHODE_NON_AUTORISE);
|
413 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_METHODE_NON_AUTORISE);
|
402 |
header('Allow: GET, POST, DELETE, PUT');
|
414 |
header('Allow: GET, POST, DELETE, PUT');
|
403 |
$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
|
415 |
$e = "La méthode HTTP '{$this->methode}' n'est pas prise en compte par ce serveur REST.\n".
|
404 |
"Consulter l'entête Allow pour connaître les méthodes autorisées.";
|
416 |
"Consulter l'entête Allow pour connaître les méthodes autorisées.";
|
Line 470... |
Line 482... |
470 |
if (count($paires) != 0) {
|
482 |
if (count($paires) != 0) {
|
471 |
if ($this->service != null) {
|
483 |
if ($this->service != null) {
|
472 |
$Service = new $this->service(self::$config);
|
484 |
$Service = new $this->service(self::$config);
|
473 |
if (method_exists($Service, self::METHODE_PUT)) {
|
485 |
if (method_exists($Service, self::METHODE_PUT)) {
|
474 |
$methodePut = self::METHODE_PUT;
|
486 |
$methodePut = self::METHODE_PUT;
|
475 |
$retour = $Service->$methodePut($this->ressources, $paires);
|
487 |
$retour = $Service->$methodePut($this->ressources, $paires);
|
476 |
if ($retour !== false) {
|
488 |
if ($retour !== false) {
|
477 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
489 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
478 |
}
|
490 |
}
|
479 |
} else {
|
491 |
} else {
|
480 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
492 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
481 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
493 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_PUT."' nécessaire ".
|
482 |
"lors de l'appel du service via la méthode HTTP GET.";
|
494 |
"lors de l'appel du service via la méthode HTTP GET.";
|
Line 491... |
Line 503... |
491 |
return $retour;
|
503 |
return $retour;
|
492 |
}
|
504 |
}
|
Line 493... |
Line 505... |
493 |
|
505 |
|
494 |
private function delete() {
|
506 |
private function delete() {
|
- |
|
507 |
if (count($this->ressources) != 0) {
|
495 |
if (count($this->ressources) != 0) {
|
508 |
$paires = $this->parserDonneesRequete();
|
496 |
if ($this->service != null) {
|
509 |
if ($this->service != null) {
|
497 |
$Service = new $this->service(self::$config);
|
510 |
$Service = new $this->service(self::$config);
|
498 |
if (method_exists($Service, self::METHODE_DELETE)) {
|
511 |
if (method_exists($Service, self::METHODE_DELETE)) {
|
499 |
$methodeDelete = self::METHODE_DELETE;
|
512 |
$methodeDelete = self::METHODE_DELETE;
|
500 |
$info = $Service->$methodeDelete($this->ressources);
|
513 |
$info = $Service->$methodeDelete($this->ressources, $paires);
|
501 |
if ($info === true) {
|
514 |
if ($info === true) {
|
502 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
515 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
503 |
} else if ($info === false) {
|
516 |
} else if ($info === false) {
|
504 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
517 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_RESSOURCE_INTROUVABLE);
|
Line 529... |
Line 542... |
529 |
private function parserDonneesRequete() {
|
542 |
private function parserDonneesRequete() {
|
530 |
$donnees = array();
|
543 |
$donnees = array();
|
531 |
if ($this->requeteDonneesParsees != null) {
|
544 |
if ($this->requeteDonneesParsees != null) {
|
532 |
$donnees = $this->requeteDonneesParsees;
|
545 |
$donnees = $this->requeteDonneesParsees;
|
533 |
} else if ($this->requeteDonnees != null) {
|
546 |
} else if ($this->requeteDonnees != null) {
|
- |
|
547 |
if (preg_match('/application\/json/', $_SERVER['CONTENT_TYPE'])) {
|
- |
|
548 |
$donnees = json_decode($this->requeteDonnees, true);
|
- |
|
549 |
} else {
|
534 |
$paires = explode('&', $this->requeteDonnees);
|
550 |
$paires = explode('&', $this->requeteDonnees);
|
535 |
foreach ($paires as $paire) {
|
551 |
foreach ($paires as $paire) {
|
536 |
list($cle, $valeur) = explode('=', $paire);
|
552 |
list($cle, $valeur) = explode('=', $paire);
|
537 |
$cle = (isset($cle)) ? trim(urldecode($cle)) : '';
|
553 |
$cle = (isset($cle)) ? trim(urldecode($cle)) : '';
|
538 |
$valeur = (isset($valeur)) ? trim(urldecode($valeur)) : '';
|
554 |
$valeur = (isset($valeur)) ? trim(urldecode($valeur)) : '';
|
539 |
$donnees[$cle] = $valeur;
|
555 |
$donnees[$cle] = $valeur;
|
- |
|
556 |
}
|
540 |
}
|
557 |
}
|
541 |
$this->requeteDonneesParsees = $donnees;
|
558 |
$this->requeteDonneesParsees = $donnees;
|
542 |
}
|
559 |
}
|
543 |
return $donnees;
|
560 |
return $donnees;
|
544 |
}
|
561 |
}
|
Line 563... |
Line 580... |
563 |
$retour .= self::gererErreurs();
|
580 |
$retour .= self::gererErreurs();
|
Line 564... |
Line 581... |
564 |
|
581 |
|
565 |
// Envoie des messages d'erreur et d'avertissement du serveur
|
582 |
// Envoie des messages d'erreur et d'avertissement du serveur
|
Line -... |
Line 583... |
- |
|
583 |
$retour .= self::envoyerMessages();
|
- |
|
584 |
|
- |
|
585 |
// Autorise l'accès depuis des serveurs tiers
|
566 |
$retour .= self::envoyerMessages();
|
586 |
//header('Access-Control-Allow-Origin: *');
|
567 |
|
587 |
|
Line 568... |
Line 588... |
568 |
// Envoie sur la sortie standard le contenu de la réponse HTTP
|
588 |
// Envoie sur la sortie standard le contenu de la réponse HTTP
|
569 |
print $retour;
|
589 |
print $retour;
|