Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

<?php
/**
 * 
 *      /syntaxons --> retourne l'ensemble des tuples de la table
 *      /syntaxons?masque.catminat=#catminat&masque.niveau=#niveau etc.--> retourne les syntaxons répondant à ces critères
 *      
 * * @package eflore-projets
* @author mathilde Salthun-Lassalle
* @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)
 *
 */

class SyntaxonsTous      extends SyntaxonsCommun {

        
        function __construct(Conteneur $conteneur) {
                 parent::__construct($conteneur);
                 $this->champs_recherches = 'cle, code_catminat, syntaxon,      code_fixe_nom, code_natura_2000, niveau ';
        }
        
        public function consulter($ressources, $parametres) {
                $this->ressources = $ressources;
                $this->parametres = $parametres;
                $this->traiterParametres();     
                $this->definirTables();
                $resultats = null;
                foreach ($this->table_version as $version) {
                        $this->table = $version;
                        $requete = $this->assemblerLaRequete();
                        $resultat =      $this->Bdd->recupererTous($requete);
                        // puisque notre implémentation de retournerResultatFormate() n'utilise pas NULL
                        // et que le prototype de Commun::traiterResultat() doit être respecté, nous passons
                        // NULL comme second paramètre.
                        $versionResultat = $this->traiterResultat($resultat, NULL);
                        if (count($this->table_version) > 1) {
                                $resultats[$version] = $versionResultat;
                        } else {
                                $resultats = $versionResultat;
                        }
                }
                return $resultats;
        }
        
        
        
        //+-------------------------------------traitement des ressources et des paramètres----------------------------------------+//
        
        public function traiterParametres() {
                if (isset($this->parametres) && !empty($this->parametres) ) {
                        foreach ($this->parametres as $param => $valeur) {
                                switch ($param) {
                                        case 'navigation.depart'  :
                                                $this->definirNavigationDepart($valeur);
                                                break;
                                        case 'navigation.limite'  :
                                                $this->definirNavigationLimite($valeur);
                                                break;
                                        case 'version.projet' :
                                                $this->traiterVersion($valeur);
                                                break;
                                        case 'masque.catminat' :
                                                $this->traiterCatminat($valeur);
                                                break;
                                        case 'masque.niveau' :
                                                $this->traiterNiveau($valeur);
                                                break;
                                        case 'masque.retenu' :
                                                $this->traiterRetenu($valeur);
                                                break;
                                        case 'masque.fixe' :
                                                $this->requete_condition[] = ' code_fixe_nom = \''.$valeur.'\' ';
                                                break;
                                        case 'retour.champs' :
                                                $this->champs_recherches .= ','.$valeur.' ';
                                                break;
                                        default :
                                                $e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
                                        .$param.' " n\'existe pas.';
                                        $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);     break;
                                }
                        }
                }
                        
        }
        
        public function traiterRetenu($valeur) {
                $valeur = trim($valeur);
                if( $valeur == 'true') {
                        $this->requete_condition[] = ' niveau NOT LIKE \'syn%\' ';
                } elseif ( $valeur == 'false') {
                        $this->requete_condition[] = ' niveau LIKE \'syn%\' ';
                }
        }
        
        public function traiterCatminat($valeur) {
                $valeur = trim($valeur);
                $valeur = str_replace('-', '/', $valeur);
                $this->requete_condition[] = ' code_catminat = '.$this->getBdd()->proteger($valeur).'';
        }
        
        public function traiterNiveau($valeur) {
                $valeur = strtoupper(trim($valeur));
                if (in_array($valeur,$this->niv)) {
                        $this->requete_condition[] = ' niveau = '.$this->getBdd()->proteger($valeur).'';
                        //$this->requete_condition[] = ' code_catminat = '.$this->catminat.'';
                } else {
                        $e = "Erreur : valeur inconnue pour masque.niveau."
                        ." valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT";
                        throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
                }
        }
        
        
        //+--------------------------formatages de resultats  -------------------------------------------+
        
        public function retournerResultatFormate($resultat) {
                $resultat_json = array();
                $resultat_json['entete'] = $this->ajouterEnteteResultat();
                foreach ($resultat as $cle => $res) {
                        $resultat[$cle]['href'] = $this->ajouterHref('syntaxons','cle:'.$res['cle']);
                        $resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau']));
                        unset($resultat[$cle]['niveau']);
                }
                $resultat_json['resultat'] = $resultat;
                return $resultat_json;
        }
        
        
        
        public function ajouterEnteteResultat() {
                $entete['depart'] = $this->limite_requete['depart'];
                $entete['limite'] = $this->limite_requete['limite'];
                $entete['total']  =      $this->total_resultat;
                $entete['version']      = $this->version_projet;
                $ressources = (empty($this->ressources)) ? '/syntaxons' : '/syntaxons/' ;
                $url = $this->formulerUrl($this->total_resultat, $ressources.implode('/',$this->ressources));
                if (isset($url['precedent']) && $url['precedent'] != '') {
                        $entete['href.precedent'] = $url['precedent'];
                }
                if (isset($url['suivant']) && $url['suivant'] != '') {
                        $entete['href.suivant']   = $url['suivant'];
                }
                return $entete;
        }
        
        
        
}
?>