Rev 1106 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe mère de l'API 0.1 d'eFLore.** @category PHP 5.2* @package eflore-consultation* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @author Delphine CAUQUIL <delphine@tela-botanica.org>* @copyright 2011 Tela-Botanica* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2* @version $Id$*/abstract class Eflore {const RANG_FAMILLE = 180;const RANG_GENRE = 220;const RANG_ESPECE = 290;private $entete = null;private $projet = null;public function __construct($projet = null) {$this->projet = Registre::get('parametres.referentiel');if (!is_null($projet)) {$this->projet = $projet;}}public function setProjet($projet) {$this->projet = $projet;}public function getProjet() {return $this->projet;}public function getEnteteTotal() {return $this->entete['total'];}/*** Formate une url à partir d'un template contenant des paramètres à remplacer sous la forme {monParametre}.* Le tableau associatif de paramètres doit contenir en clé le paramêtre (monParametre) sans les accolades,* la valeur correspondante sera la valeur de remplacement.* Par défaut, les parametres suivant sont pris en compte par cette méthode :* - {projet} : le code du référentiel courrant ou définit dans le constructeur de l'objet métier.** @param String $tpl le squelette d'url à formater.* @param Array $parametres le tableau de parametres (sans accolades pour les clés).*/protected function formaterUrl($tpl, Array $parametres) {$parametres = $this->ajouterParametreParDefaut($parametres);foreach($parametres as $key=> $value) {if(is_array($value)) {$value = implode(',', $value);}$tpl = str_replace('{'.$key.'}',rawurlencode($value),$tpl);}Debug::printr($tpl);return $tpl;}public function ajouterParametreParDefaut(Array $parametres) {$parametres['projet'] = isset($parametres['projet']) ? $parametres['projet'] : $this->projet;return $parametres;}/*** Permet de consulter une url et retourne le résultat ou une erreur** @param $url l'url du service à appeler pour charger les données. */protected function chargerDonnees($url) {$resultat = false;$json = $this->getRestClient()->consulter($url);$entete = $this->getRestClient()->getReponseEntetes();//Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_dataif (isset($entete['wrapper_data'])) {$forceTableauAssociatif = true;$resultat = json_decode($json, $forceTableauAssociatif);$this->entete = (isset($resultat['entete'])) ? $resultat['entete'] : null;} else {$m = "L'url <a href=\"$url\">$url</a> lancée via RestClient renvoie une erreur";trigger_error($m, E_USER_WARNING);}return $resultat;}/*** Permet de consulter une url et retourne le résultat ou une erreur** @param $url l'url du service à appeler pour charger les données. */protected function chargerDonneesRecursivement($url) {$resultat = false;$resultat = $this->chargerDonnees($url);if (isset($resultat['entete']['href.suivant'])) {$resultatSuivant = $this->chargerDonneesRecursivement($resultat['entete']['href.suivant']);if ($resultatSuivant) {// utilisation de + obligatoire pour ne pas casser l'indexation par des ids// numériques (au lieu de array merge)$resultat['resultat'] = $resultat['resultat'] + $resultatSuivant['resultat'];}}return $resultat;}//+----------------------------------------------------------------------------------------------------------------+// GESTION DES CLASSES CHARGÉES À LA DEMANDEprivate function getRestClient() {if (!isset($this->restClient)) {$this->restClient = new RestClient();}return $this->restClient;}static function s_formaterUrl($tpl, Array $parametres, $enc = TRUE) {foreach($parametres as $key => $value) {if(is_array($value)) {$value = implode(',', $value);}$tpl = str_replace('{'.$key.'}',$enc ? rawurlencode($value) : $value, $tpl);}return $tpl;}}?>