Subversion Repositories eFlore/Applications.del

Rev

Rev 1985 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe de récupération d'ontologies diverses
 *
 * @category   DEL
 * @package    Services
 * @subpackage Ontologies
 * @version    0.1
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
 */
class Ontologie extends RestService {

        private $parametres = array();
        private $ressources = array();
        private $methode = null;
        private $serviceNom = 'ontologie';

        private $conteneur;

        /** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
        protected $utilisationParametresBruts = true;

        public function __construct() {
                $this->cheminCourant = dirname(__FILE__).DS;
        }

        public function consulter($ressources, $parametres) {
                $this->methode = 'consulter';
                $this->conteneur = new Conteneur($parametres);
                
                if(!isset($ressources[0])) {
                        $message = "Le nom de l'ontologie doit être renseigné ".
                                        "Les ontologies disponibles sont : \n".
                                        " - en GET : pays \n";
                        $code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
                        throw new Exception($message, $code);
                } else {
                        $fonction = 'get'.ucwords($ressources[0]);
                        
                        if(method_exists($this, $fonction)) {
                                $resultat = $this->$fonction();
                                
                                $reponseHttp = new ReponseHttp();
                                $reponseHttp->setResultatService($resultat);
                                $reponseHttp->emettreLesEntetes();
                                $corps = $reponseHttp->getCorps();
                                return $corps;
                        } else {
                                $message = "L'ontologie demandée n'existe pas ".
                                                "Les ontologies disponibles sont : \n".
                                                " - en GET : pays \n";
                                $code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
                                throw new Exception($message, $code);
                        }
                }
        }
        
        public function getPays() {     
                $url = $this->conteneur->getParametre('url_service_base_eflore')."iso-3166-1/zone-geo?masque.statut=officiellement%20attribu%C3%A9&navigation.limite=1000";
                $restClient = $this->conteneur->getRestClient();
                $resultatJson = $restClient->consulter($url);
                $liste_pays = json_decode($resultatJson, true);

                $pays_fmt = array();
                foreach($liste_pays['resultat'] as $pays) {
                        // Les pays renvoyé par le web service sont tous en majuscule
                        $nom = mb_convert_case($pays['nom'], MB_CASE_TITLE, 'UTF-8');
                        $pays_fmt[] = array('code_iso_3166_1' => $pays['code'], 'nom_fr' => $nom);
                }
                
                // Tri par nom plutot que par code
                usort($pays_fmt, array($this, "trierPays"));
                
                $resultat = new ResultatService();
                $resultat->corps = $pays_fmt;
                return $resultat;
        }
        
        protected function trierPays($a, $b) {
                return strcmp($a['nom_fr'], $b['nom_fr']);
        }
}
?>