Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1217 | Rev 1327 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * Classe mère du module Liste.
 *
 * @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$
 */
class Repartition extends aControleur {

        private $conteneur = null;
        private $nomCourant = null;
        private $referentiel = 'bdtfx';
        private $donnees = array();
        private $tailleBloc = "190x178";
        private $serviceChorodep = null;
        private $cartes;
        private $meta;
        private $appUrls;
        
        public function __construct(Conteneur $conteneur) {
                $this->conteneur = $conteneur;
                $this->nomCourant = $this->conteneur->getNomCourant();
                $this->referentiel = $this->conteneur->getParametre('referentiel');
                $this->cartes = $this->conteneur->getApiCartes();
                $this->meta = $this->conteneur->getApiMetaDonnees();
                $this->appUrls = $this->conteneur->getAppUrls();
        }

        public function obtenirDonnees() {
                $this->getRepartition();
                $this->getMoissonnage();
                $this->getFloreProbable();
                $this->donnees['widget']['nt'] = $this->nomCourant->getNt();
                $this->donnees['widget']['nn'] = $this->nomCourant->getNnr();
                $this->donnees['widget']['referentiel'] = $this->referentiel;
                return $this->donnees;
        }

        public function obtenirDonneesExport() {
                $this->getRepartition();
                $donnees['chorodep'] = $this->donnees['repartition'];
                $this->getMoissonnageExport();
                // TODO: renommer l'index "eflore" en moissonnage
                // et renommer dans pdf_export/squelettes/pdf_repartition.tpl.html 
                $donnees['eflore'] = $this->donnees['moissonnage'];
                return $donnees;
        }
        
        private function getRepartition() {
                $projetRepartition = Config::get($this->referentiel.'.baseRepartition');
                // eg: eflore ou chorodep
                // cf: bdtfx.ini, bdtxa.ini
                if ($projetRepartition != "") {
                        $this->cartes->setProjet($projetRepartition);
                        $this->cartes->setLargeur('630');
                        
                        //TODO: démochir ce code
                        // Chargement des nn des synonymes pour obtenir une carte plus complète
                        $noms = $this->conteneur->getApiNoms();
                        $syns = $noms->getSynonymes($this->nomCourant->getNnr());
                        $nns_syns = array_keys($syns['resultat']);
                        $nns_syns[] = $this->nomCourant->getNnr();
                        $id = 'nn:'.implode(',', $nns_syns);
                        
                        $this->cartes->setId($id);
                        $repartition['svgUrl'] = $this->cartes->getUrlDataSvg();
                        $repartition['pngUrl'] = $this->cartes->getUrlPng();
                        $repartition['legende'] = $this->cartes->getLegendeId();
                        $this->meta->setProjet($projetRepartition);
                        $meta = $this->meta->getMetaDonnees();
                        $repartition['meta'] = $meta[0];
                        $repartition['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($projetRepartition);
                        $this->donnees['repartition'] = $repartition;
                }
        }
        
        private function getMoissonnage() {
                $projetMoissonnage = Config::get($this->referentiel.'.baseMoissonnage');
                if (! $projetMoissonnage) return;
                $this->cartes->setProjet('moissonnage');
                $this->cartes->setLargeur('600');
                $this->cartes->setInfoNom($this->nomCourant->getNt());
                $this->cartes->setInfoReferentiel($this->referentiel);
                $eflore['mapUrl'] = $this->cartes->getUrlMapSvg();
                $eflore['mapTelechargementUrls'] = array('png' => $this->cartes->getUrlTelechargementMapPng(),
                                                                                                'html' => $this->cartes->getUrlTelechargementMapHtml());
                $eflore['legende'] = $this->cartes->getLegende();
                $this->donnees['moissonnage'] = $eflore;
        }
        
        private function getMoissonnageExport() {
                $projetMoissonnage = Config::get($this->referentiel.'.baseMoissonnage');
                if (! $projetMoissonnage) return;
                $this->cartes->setProjet($projetMoissonnage);
                $this->cartes->setLargeur('min');
                $this->cartes->setInfoNom($this->nomCourant->getNomRetenu());
                $eflore['min'] = $this->cartes->getUrlEflorePng();
                $eflore['legende'] = $this->cartes->getLegende();
                $this->donnees['moissonnage'] = $eflore;
        }
        
        private function getFloreProbable() {
                $projetFloreProbable = Config::get($this->referentiel.'.baseFloreProbable');
                if (! $projetFloreProbable) return;
                $this->cartes->setProjet($projetFloreProbable);
                $this->meta->setProjet($projetFloreProbable);
                $this->cartes->setId($this->referentiel.'.nt:'.$this->nomCourant->getNt());
                // TODO: url téléchargement de la carte lorsqu'on sera sur que c'est possible
                // dans ['carte']['telechargement'] par exemple
                $this->donnees['flore_probable'] = array('carte' => array(), 'meta' => array());
                $this->donnees['flore_probable']['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($projetFloreProbable);
                $this->donnees['flore_probable']['carte']['url'] = $this->cartes->getUrlFloreProbablePng();
        }

        public function getBloc() {
                $donnees['chorodep'] = $this->getChorodepMiniature();
                $donnees['eflore'] = $this->getMoissonnageMiniature();

                // TODO: moche, comment gérer le fait que l'onglet "synthèse", en "bdtxa", doive
                // afficher la carte chorologie, et non la carte chorodep.
                // workaround: écrasement de l'URL dans ['répartition']['chorodep']:
                if($this->referentiel == 'bdtxa') {
                        $syns = $this->conteneur->getApiNoms()->getSynonymes($this->nomCourant->getNnr());
                        $nns_syns = array_keys($syns['resultat']);
                        $nns_syns[] = $this->nomCourant->getNnr();
                        $donnees['chorodep'] = Cartes::getCarteUrlPng(Config::get($this->referentiel.'.baseRepartition'),
                                                                                                                  'nn:'.implode(',', $nns_syns),
                                                                                                                  '190x178');
                }

                return $donnees;
        }
        
        private function getChorodepMiniature() {
                $projetRepartition = Config::get($this->referentiel.'.baseRepartition');
                $url = null;
                if ($projetRepartition != "") {
                        $this->cartes->setProjet($projetRepartition);
                        $this->cartes->setProjet('chorodep');
                        $this->cartes->setLargeur('190x178');
                        //TODO: démochir ce code
                        // Chargement des nn des synonymes pour obtenir une carte plus complète
                        $noms = $this->conteneur->getApiNoms();
                        $syns = $noms->getSynonymes($this->nomCourant->getNnr());
                        $nns_syns = array_keys($syns['resultat']);
                        $nns_syns[] = $this->nomCourant->getNnr();
                        $id = 'nn:'.implode(',', $nns_syns);
                        $this->cartes->setId($id);
                        $url =  $this->cartes->getUrlPng();
                }
                return $url;
        }
        
        private function getMoissonnageMiniature() {
                $projetMoissonnage = Config::get($this->referentiel.'.baseMoissonnage');
                $url = null;
                if ($projetMoissonnage != "") {
                        $this->cartes->setProjet('moissonnage');
                        $this->cartes->setLargeur('190');
                        $this->cartes->setInfoReferentiel($this->referentiel);
                        $this->cartes->setInfoNom($this->nomCourant->getNt());
                        $url = $this->cartes->getUrlMapPng();
                }
                return $url;
        }
}
?>