Subversion Repositories eFlore/Applications.eflore-consultation

Rev

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 Floraison extends aControleur {

        private $conteneur = null;
        private $nomCourant = null;
        private $textes = null;
        private $meta = null;
        private $wikini = null;
        private $informations = null;
        private $mois = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août',
                                                  'septembre', 'octobre', 'novembre', 'décembre');
        private $CosteFormate;
        private $CosteTexte;
        
        private $referentiel = 'bdtfx';
        private $donnees = array();

        public function __construct(Conteneur $conteneur) {
                $this->conteneur = $conteneur;
                $this->nomCourant = $this->conteneur->getNomCourant();
                $this->referentiel = $this->conteneur->getParametre('referentiel');
                $this->textes = $this->conteneur->getApiTextes();
                $this->wikini = $this->conteneur->getApiWikini();
                $this->meta = $this->conteneur->getApiMetaDonnees();
                $this->informations = $this->conteneur->getApiInformations();
                $this->appUrls = $this->conteneur->getAppUrls();
        }
        
        public function getDonnees() {
                $this->getCoste();
                if (isset($this->CosteFormate['floraison'])) {
                        $this->donnees['floraison'] = $this->getIndiceMois($this->CosteFormate['floraison']);
                } else {
                        $this->getFloraisonBaseflor();
                }
                if (isset($this->CosteFormate['fructification'])) {
                        $this->donnees['fructification'] = $this->getIndiceMois($this->CosteFormate['fructification']);
                } else {
                        $this->donnees['fructification'] = -1;
                }
        
                return $this->donnees;
        }
        
        private function getCoste() {
                $coste = array();
                $this->textes->setProjet('coste');
                $this->textes->setId('bdtfx.nn:'.$this->nomCourant->getNnr());
                $texte = $this->textes->getTexte();
                if ($texte) {
                        $coste['titre'] = $texte['titre'];
                        $coste['description'] = $this->mettreEnFormeCoste($texte['texte']);
                }
                
                $this->donnees['coste'] = $coste;
        }       
        
        private function getIndiceMois($elt) {
                $mois = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août',
                                          'septembre', 'octobre', 'novembre', 'décembre');
                $indice_mois = -1;
                $elt = $this->nettoyerTexte($elt);
                $arr = preg_split('/-/', $elt, -1, PREG_SPLIT_NO_EMPTY);
                if (isset($arr[1])) {
                        $mois1 = $this->getIndiceMois($arr[0]);
                        $mois2 = $this->getIndiceMois($arr[1]);
                        $indice_mois = $mois1.'-'.$mois2;
                } else {
                        for ($i = 0; $i < count($mois); $i++) {
                        if ($elt == $mois[$i]) {
                                $indice_mois = $i;
                        }
                    }
                }
                
                return $indice_mois;
        }
        
        private function nettoyerTexte($texte) {
                $texte = trim($texte);
                
                $a_effacer = array('.', ' ', 'de');
                $texte = str_replace($a_effacer, '', $texte);

                $texte = strtolower($texte);
                return $texte;
        }

        private function getFloraisonBaseflor() {
                $baseflor = array();
                $this->informations->setProjet('baseflor');
                $this->informations->setBdnt($this->conteneur->getParametre('referentiel'));
                $this->informations->setNum_nom($this->conteneur->getParametre('num_nom'));
                $informations = $this->informations->getInformationsDescription();
                
                if ($informations){
                        $baseflor['chorologie'] = isset($informations['chorologie']) ? $informations['chorologie'] : '';
                        $baseflor['inflorescence'] = isset($informations['inflorescence']) ? $informations['inflorescence'] : '';
                        $baseflor['sexualite'] = isset($informations['sexualite']) ? $informations['sexualite'] : '';
                        $baseflor['ordre_maturation'] = isset($informations['ordre_maturation']) ? $informations['ordre_maturation'] : '';
                        $baseflor['pollinisation'] = isset($informations['pollinisation']) ? $informations['pollinisation'] : '';
                        $baseflor['dissemination'] = isset($informations['dissemination']) ? $informations['dissemination'] : '';
                        $baseflor['fruit'] = isset($informations['fruit']) ? $informations['fruit'] : '';
                        $baseflor['couleur_fleur'] = isset($informations['couleur_fleur']) ? $informations['couleur_fleur'] : '';
                        $baseflor['macule'] = isset($informations['macule']) ? $informations['macule'] : '';
                        $baseflor['type_bio'] = isset($informations['type_bio']) ? $informations['type_bio'] : '';
                        $baseflor['form_vegetale'] = isset($informations['form_vegetale']) ? $informations['form_vegetale'] : '';
                        $baseflor['floraison'] = isset($informations['floraison']) ? $informations['floraison'] : '';
                }
                $this->donnees['baseflor'] = $baseflor;
                $this->donnees['floraison'] = $baseflor['floraison'];
        }


        public function mettreEnFormeCoste($texte){
                $this->CosteFormate = array();
                $this->CosteTexte = $texte;
                //decouper elements remarquables avant le texte
                $this->separerNomScientifique_a_NomCommun();
                $this->CosteTexte = preg_replace('/\//','',$this->CosteTexte);
                //decouper elements remarquables  après le texte
                $this->separerEcologie_a_Usages();
                //le morceau qui reste est le gros de la description
                $this->CosteTexte = str_replace(';','<br /> -','- '.$this->CosteTexte);
                $this->CosteTexte = str_replace('–','',$this->CosteTexte);
                $this->CosteFormate['texte'] = htmlspecialchars_decode(htmlentities($this->CosteTexte, ENT_NOQUOTES, 'UTF-8'), ENT_NOQUOTES);
                return $this->CosteFormate;
        }

        public function separerNomScientifique_a_NomCommun(){
                if ( preg_match('/\*\*(.+)\*\*([^–]*)–/', $this->CosteTexte, $retour)){
                        /* !! attention on enlève un tiret cadratin – pas un trait d'union - !! */
                        $a_enlever  = array('/–/','/\./' );
                        $this->CosteFormate['nom_scientifique'] = preg_replace($a_enlever,'',$retour[1]);
                        if(preg_match('/\((.+)\)/',$retour[2],$synonymes)){
                                $this->CosteFormate['synonymes'] = $synonymes[1];
                        } else {
                                $this->CosteFormate['nom_scientifique'] .=  $retour[2];
                        }
                        $this->CosteTexte = str_replace($retour[0],'',$this->CosteTexte);
                }
                /* !! attention il y a un espace avant les // du début !! */
                if ( preg_match('/^ \/\/([^\/\/]+)\/\//', $this->CosteTexte, $retour)){
                        $a_enlever = array('/–/','/\./' );
                        $this->CosteFormate['nom_commun'] = preg_replace($a_enlever,'',$retour[1]);
                        $this->CosteTexte = str_replace($retour[0],'',$this->CosteTexte);
                }
        }

        public function separerEcologie_a_Usages(){
                if ( preg_match('/\.[ ]*([A-ZÉÀÈ].+)$/',$this->CosteTexte, $retour)){
                        $this->CosteFormate['ecologie'] = $retour[1];
                        $this->CosteTexte = str_replace($retour[0],'.',$this->CosteTexte);
                        if (isset($this->CosteFormate['ecologie']) && preg_match('/–(.+)/', $this->CosteFormate['ecologie'] , $retour)){
                                $this->CosteFormate['repartition'] = $retour[1];
                                $this->CosteFormate['ecologie'] = str_replace($retour[0],'',$this->CosteFormate['ecologie']);
                        }
                        if (isset($this->CosteFormate['repartition']) &&  preg_match('/=(.+)$/', $this->CosteFormate['repartition'], $retour)){
                                $this->CosteFormate['floraison'] = $retour[1];
                                $this->CosteFormate['repartition'] = str_replace($retour[0],'',$this->CosteFormate['repartition']);
                        }
                        if (isset($this->CosteFormate['floraison']) &&  preg_match('/–(.+)$|\n(.+)$/',$this->CosteFormate['floraison'], $retour)){
                                $this->CosteFormate['usages'] = isset($retour[1]) ? $retour[1] : $retour[2];
                                $this->CosteFormate['floraison'] = str_replace($retour[0],'.',$this->CosteFormate['floraison']);
                        }
                        if (isset($this->CosteFormate['floraison']) &&  preg_match('/([Ff]l\.) (.+)/',$this->CosteFormate['floraison'], $retour)){
                                $this->CosteFormate['floraison'] = $retour[2];
                                $this->CosteFormate['floraison'] = str_replace($retour[1],'',$this->CosteFormate['floraison']);
                        }
                        if (isset($this->CosteFormate['floraison']) &&  preg_match('/([Ff]r\.) (.+)/',$this->CosteFormate['floraison'], $retour)){
                                $this->CosteFormate['fructification'] = $retour[2];
                                $this->CosteFormate['floraison'] = str_replace($retour[0],'',$this->CosteFormate['floraison']);
                                $this->CosteFormate['floraison'] = str_replace(',','',$this->CosteFormate['floraison']);
                                $this->CosteFormate['fructification'] = str_replace($retour[1],'',$this->CosteFormate['fructification']);
                                $this->CosteFormate['fructification'] = str_replace('.','',$this->CosteFormate['fructification']);
                        }
                }
        }
}
?>