Subversion Repositories eFlore/Projets.eflore-projets

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
* 
*  
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* @package eflore-projets
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @author Mathilde SALTHUN-LASSALLE <mathilde@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-2011 Tela Botanica (accueil@tela-botanica.org)
*/

class ClimatGraph {
        
        private $parametres = array();
        private $ressources = array();
        private $Bdd;
        private $nomGraphique = 'graphique_11';
        protected $table="";
        private $requete_condition = "";
        private $config;
        private $convertisseur;
        private $cheminGraphBase;
        private $cache;
        protected $serviceNom = 'Graphiques';
        private $valeurs_en_pourcentage ;//array ("ve_temperature" => 0.1, "ve_continentalite" => 0.7, "ve_lumiere" => 0.9, "ve_humidite_atmos" => 0.2 );
        private $dom;
        private $graduations_id = array ("zero" => 0 ,"un"=> 0.1, "deux" => 0.2 , "trois" => 0.3, "quatre" => 0.4,
                                                                        "cinq" => 0.5, "six" => 0.6 ,"sept" => 0.7, "huit" => 0.8, "neuf" => 0.9,
                                                                        "dix" => 1 );
        
        
        
        public function __construct(Conteneur $conteneur) {
                $this->Bdd = $conteneur->getBdd();
                $this->config = $conteneur->getParametre('Graphiques');
                //$this->convertisseur = $this->config['convertisseur'];
                $this->cheminGraphBase = $this->config['chemin'];
                /*$cacheOptions = array('mise_en_cache' => $this->config['cache']['miseEnCache'],
                                                        'stockage_chemin' => $this->config['cache']['stockageChemin'],
                                                        'duree_de_vie' => $this->config['cache']['dureeDeVie']);
                $this->cache = $conteneur->getCacheSimple($cacheOptions);*/
        }
        

        public function consulter($ressources, $parametres) {
                $this->ressources = $ressources;
                $this->parametres = $parametres;
                
                //à faire traiter les versions du projet
                $resultats = '';
                $this->table = Config::get('bdd_table')."_v2012_03_19"; 
                $this->traiterRessources(); 
                $requete = $this->assemblerLaRequete();
                $resultat = $this->Bdd->recupererTous($requete);

                $versionResultat = $this->obtenirResultat($resultat);
        
                return $versionResultat;
        }
        
        

        
        //+--------------------------traitement ressources ou paramètres  -------------------------------------------+ 
        public function traiterRessources() {
                if (isset($this->ressources) && !empty($this->ressources[1])) {
                        if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[1], $retour)==1){
                                switch ($retour[1]) {
                                        case 'bdtfx' :
                                                $this->requete_condition[]= "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
                                                break;
                                        case  'bdafx' :
                                                $this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; 
                                                break;
                                        case  'bdbfx' :
                                                $this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; 
                                                break;
                                        default :
                                                $e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
                                                        .$retour[1].' " n\'existe pas.';
                                                $this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);     
                                                break;
                                }       
                                
                        }
                } 
        }
        

        //+-------------------------- formatage du résultat  -------------------------------------------+
        
        public function obtenirResultat($resultat) {
                if ((count($this->ressources)) != 0) {
                        $this->traiterValeursEcologiques($resultat[0]);

                        $svg = $this->genererSVG_sol();
                
                        $resultat = new ResultatService();
                        $resultat->corps = $svg;
                        $resultat->mime = 'image/svg+xml';
                }
                return $resultat;
        }
        

        public function traiterValeursEcologiques($valeurs){
                //humidite edaphique sur echelle de 12
                foreach($valeurs as $cle => $val){
                        /*if ($cle == 've_humidite_edaph'){
                                $this->valeurs_en_pourcentage[$cle] = round($val/12,1);
                        }else{*/
                                //salinite commence à 0
                                if($val == 0){
                                        $this->valeurs_en_pourcentage[$cle] = 0;
                                }else{
                                        $this->valeurs_en_pourcentage[$cle] = round($val/9,1);
                                }
                        }
                //}
        }
        
        public function genererSVG_sol(){

                $this->dom = new DOMDocument('1.0', 'UTF-8');
                //verifie que le xml est bien formé
                $this->dom->validateOnParse = true;
                $fichierSvg = $this->cheminGraphBase."".$this->nomGraphique.".svg";
                $this->dom->load($fichierSvg);
                $this->changerValeursSVG();
                $svg = $this->dom->saveXML();
                return $svg;
        }
        
        
        public function changerValeursSVG(){
                foreach ($this->valeurs_en_pourcentage as $cle => $val){
                        $grad_id = array_search($val,$this->graduations_id);
                        $element = $this->dom->getElementById($grad_id);
                        $pos_x = $element->getAttribute('x1');
                        $curseur = $this->dom->getElementById($cle);
                                $curseur->setAttribute('cx', $pos_x);
                }
        }
        
        //+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
        
        public function assemblerLaRequete() {
                $requete =      ' SELECT ve_lumiere , ve_temperature, ve_continentalite, ve_humidite_atmos 
                 FROM '.$this->table.' '.$this->retournerRequeteCondition();
                return $requete;
        }

        public  function retournerRequeteCondition() {
                $condition = '';
                if ($this->requete_condition !== "") {
                        $condition = ' WHERE '.implode(' AND ', $this->requete_condition);
                }
                return $condition;
        }
        
        
}
?>