Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 322 | Blame | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
* Gère le sous-service Legende de Cartes.
*
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Cartes
*
* @package eFlore/services
* @author Jean-Pascal MILCENT <jpm@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>
* @version 1.0
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org)
*/
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...
class LegendeCartes {

        private $parametres = array();
        private $ressources = array();

        const MIME_JSON = 'application/json';
        const LEGENDE = '10';

        private $formatsSupportes = array(self::MIME_JSON);
        private $tableOntologie = '';
        private $ontologies = '';
        private $legende = array();

        public function __construct(Conteneur $conteneur) {
                $this->Bdd = $conteneur->getBdd();
                $this->tableOntologie = $conteneur->getParametre('bdd_table_ontologies');
        }

        public function consulter($ressources, $parametres) {
                //$tpsDebut = microtime(true);
                $this->parametres = $parametres;
                $this->ressources = $ressources;

                $this->definirValeurParDefautDesParametres();
                $this->verifierParametres();

                $resultat = $this->obtenirResultat();

                return $resultat;
        }

        private function definirValeurParDefautDesParametres() {
                if (isset($this->parametres['retour']) == false) {
                        $this->parametres['retour'] = self::MIME_JSON;
                }
        }

        private function verifierParametres() {
                $erreurs = array();

                if (isset($this->parametres['retour']) == false) {
                        $erreurs[] = "Le paramètre type de retour 'retour' est obligatoire.";
                }
                if ($this->verifierValeurParametreRetour() == false) {
                        $erreurs[] = "Le type de retour '{$this->parametres['retour']}' n'est pas supporté.";
                }

                if (count($erreurs) > 0) {
                        $message = implode('<br />', $erreurs);
                        $code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
                        throw new Exception($message, $code);
                }
        }

        private function verifierValeurParametreRetour() {
                return in_array($this->parametres['retour'], $this->formatsSupportes);
        }

        private function obtenirResultat() {
                $this->chargerOntologies();
                $this->chargerLegende();

                $resultat = new ResultatService();
                $resultat->corps = $this->legende;
                $resultat->mime = $this->parametres['retour'];

                return $resultat;
        }

        private function chargerOntologies() {
                $requete = "SELECT * FROM {$this->tableOntologie} ";
                $resultats = $this->Bdd->recupererTous($requete);

                if (!is_array($resultats) || count($resultats) <= 0) {
                        $message = "Les données d'ontologies n'ont pu être chargées pour la ressource demandée";
                        $code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
                        throw new Exception($message, $code);
                }

                foreach ($resultats as $ontologie) {
                        $this->ontologies[$ontologie['id']] = $this->extraireComplementsOntologies($ontologie);
                }
        }

        private function extraireComplementsOntologies($ontologie) {
                if ($ontologie['complements'] != '') {
                        $complements = explode(',', trim($ontologie['complements']));
                        foreach ($complements as $complement) {
                                list($cle, $val) = explode('=', trim($complement));
                                $ontologie[trim($cle)] = trim($val);
                        }
                }
                return $ontologie;
        }

        private function chargerLegende() {
                foreach ($this->ontologies as $ontologie) {
                        if ($ontologie['classe_id'] == self::LEGENDE) {
                                $this->legende[] = array(
                                        'code' => $ontologie['code'],
                                        'couleur' => $ontologie['legende'],
                                        'nom' => $ontologie['nom'],
                                        'description' => $ontologie['description']);
                        }
                }
        }
}
?>