* @author Delphine CAUQUIL * @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(); $texte = array_pop($texte['resultats']); if ($texte) { $coste['titre'] = $texte['titre']; // TODO: réintroduire les modif' effectuées sur modules/fiche/formateurs/Description.php // -les joies du code copié/collé- $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(';','
-','- '.$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']); } } } } ?>