Rev 78 | Rev 85 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe Controleur du module Fiche Taxon.** @category Php 5.2* @package Taxon* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version SVN: $Id: Fiche.php 96 2010-06-21 16:46:31Z jpm $*/class FicheTaxon extends AppliControleur {private $donnees = array();protected $taxonDao = null;// Codification de la présence d'un taxonprivate $presence_taxon = array ('P' => 'Présent','S' => 'Supposé présent (présence à confirmer)','D' => 'Présence douteuse','E' => 'Éteint','C' => 'Cité par erreur comme présent','A' => 'Absent','' => 'Pas d\'information','-' => 'Autre statut de présence','E-W' => 'Disparu','P-B' =>'Présence accidentelle (Taxon « visiteur »)','E-F' => 'Trouvé en fouille','-C' => 'Cryptogène');// Codification du statut d'origineprivate $statut_origine= array('N' => 'Natif','S' => 'Supposé natif','D' => 'Origine douteuse','E' => 'Anciennement natif (éteint)','C' => 'Cité par erreur comme natif','A' => 'Non natif','' => 'Pas d\'information','X' => 'Inapplicable','-' => 'Autre statut d\'origine','N-E' => 'Endémique','N-S' => 'Sub-Endémique','E-Z' => 'Endémique éteinte');// Codification du statut d'introductionprivate $statut_introduction = array('I' => 'Introduit','S' => 'Supposé introduit','D' => 'Introduction douteuse','E' => 'Anciennement introduit (éteint)','C' => 'Cité par erreur comme introduit','A' => 'Non introduit','' => 'Pas d\'information','X' => 'Inapplicable','-' => 'Autre notion d\'introduction','I-J' => 'Introduit envahissant','I-M' => 'Domestique / Introduit non établi');// Codification du statut de cultureprivate $statut_culture = array('C' => 'Cultivé en extérieur','I' => 'Cultivé en intérieur','S' => 'Supposé cultivé','D' => 'Culture douteuse','E' => 'Anciennement cultivé (éteint)','C' => 'Cité par erreur comme cultivé','' => 'Pas d\'information','X' => 'Inapplicable','-' => 'Autre notion de culture');//+----------------------------------------------------------------------------------------------------------------+// Méthodes/*** Fonction d'affichage par défaut*/public function executerActionParDefaut() {return $this->afficherTaxon();}// +---------------------------------------------------------------------------------------------------------------+// FICHE CONSULTATION TAXONpublic function afficherTaxon() {// Récupération du référentielif (isset($_GET['ref'])) {$this->referentiel = strtolower($_GET['ref']);}// Gestion des actions par défaut$this->taxonDao = new TaxonDao();$this->definirCommeModulePrincipal(get_class($this));$this->construireMenu($this->referentiel);$this->construireFilAriane($this->referentiel);$this->executerActionReferentiel('Recherche', 'chargerMoteurRecherche', $this->referentiel);// Gestion des données de la requêteif (!isset($_GET['num_nom'])) {} else {// Récupération des données$this->donnees['referentiel'] = $this->referentiel;$this->donnees['num_nom'] = $_GET['num_nom'];$this->donnees['num_nom_retenu'] = $_GET['num_nom_retenu'];$this->donnees['nom'] = $_GET['nom'];$this->donnees['info'] = $this->taxonDao->getTaxon($this->referentiel, $this->donnees['num_nom']);// Chargement des données des onglets$this->chargerNomenclature();$this->chargerSynonymie();//$this->chargerClassification();$this->chargerChorologie();//$this->chargerComplements();$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_taxon', $this->donnees));}}private function chargerNomenclature() {$this->donnees['selectionne'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom']);if (strpos($this->donnees['nom'], ' x ') ) {if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu']) {$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom_retenu']);} else {$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom']);}} else {if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu']) {$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);}}}// recherche les synonymes (à compléter)private function chargerSynonymie() {$rechercheDao = new RechercheDao();// recherche des synonymes nomenclaturaux et taxonomiques$parametres = $this->parserChaineDeRecherche('nn:'.$this->donnees['num_nom'].' tax:1');$parametres['ref']= $this->referentiel;$synonymes = $rechercheDao->chercher('ParTaxon', $parametres);foreach ($synonymes as $synonyme) {if ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null) {if (($this->donnees['num_nom'] != $synonyme['num_nom']) && ($synonyme['basionyme'] == $this->donnees['num_nom'] ||$this->donnees['info']['basionyme'] == $synonyme['num_nom'] || $this->donnees['info']['basionyme'] == $synonyme['basionyme'])) {$this->donnees['fiche_synonymie']['nomenclaturale'][] = $synonyme;} elseif ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null &&$this->donnees['info']['basionyme'] != null) {$this->donnees['fiche_synonymie']['taxonomique'][] = $synonyme;}} elseif ($this->donnees['num_nom'] != $synonyme['num_nom']) {///nom est synonyme mal applique de num_nom_retenuif ($synonyme['synonyme_mal_applique'] == 1) {$this->donnees['fiche_synonymie']['mal appliquée'][] = $synonyme;} else {$this->donnees['fiche_synonymie']['indéterminée (pas de basionyme)'][] = $synonyme;}}}// recherche synonyme proparteif ($this->donnees['info']['synonyme_proparte'] != ''){$this->donnees['fiche_synonymie']['pro parte']['num_nom'] = $this->donnees['info']['synonyme_proparte'];}// recherche si taxon est un synonyme douteuxif ($this->donnees['info']['synonyme_douteux'] == 1) {$this->donnees['fiche_synonymie']['douteux']['num_nom'] = $this->donnees['info'];}}private function chargerChorologie() {foreach ($this->donnees['info'] as $param => $valeur) {if ($param == 'presence') {$this->donnees['chorologie']['Présence']['France']['code'] = $valeur;$this->donnees['chorologie']['Présence']['France']['valeur'] = $this->presence_taxon[$valeur];} elseif (preg_match('/presence_(.*)/', $param, $lieu)) {$this->donnees['chorologie']['Présence'][$lieu['1']]['code'] = $valeur;$this->donnees['chorologie']['Présence'][$lieu['1']]['valeur'] = $this->presence_taxon[$valeur];} elseif ($param == 'statut_origine') {$this->donnees['chorologie']['Statut d\'origine']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut d\'origine']['France']['valeur'] = $this->statut_origine[$valeur];} elseif (preg_match('/statut_origine_(.*)/', $param, $lieu)) {$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['code'] = $valeur;$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['valeur'] = $this->statut_origine[$valeur];} elseif ($param == 'statut_introduction') {$this->donnees['chorologie']['Statut d\'introduction']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut d\'introduction']['France']['valeur'] = $this->statut_introduction[$valeur];} elseif (preg_match('/statut_introduction_(.*)/', $param, $lieu)) {$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['code'] = $valeur;$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['valeur'] = $this->statut_introduction[$valeur];} elseif ($param == 'statut_culture') {$this->donnees['chorologie']['Statut de culture']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut de culture']['France']['valeur'] = $this->statut_culture[$valeur];} elseif (preg_match('/statut_culture_(.*)/', $param, $lieu)) {$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['code'] = $valeur;$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['valeur'] = $this->statut_culture[$valeur];}}foreach ($this->donnees['chorologie']['Présence'] as $lieu=>$valeur) {if (!isset($this->donnees['chorologie']['Statut d\'origine'][$lieu])) {$this->donnees['chorologie']['Statut d\'origine'][$lieu]['code'] = '';$this->donnees['chorologie']['Statut d\'origine'][$lieu]['valeur'] = $this->statut_origine[''];}if (!isset($this->donnees['chorologie']['Statut d\'introduction'][$lieu])) {$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['code'] = '';$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['valeur'] = $this->statut_introduction[''];}if (!isset($this->donnees['chorologie']['Statut de culture'][$lieu])) {$this->donnees['chorologie']['Statut de culture'][$lieu]['code'] = '';$this->donnees['chorologie']['Statut de culture'][$lieu]['valeur'] = $this->statut_culture[''];}}}private function parserChaineDeRecherche($chaine) {$mots = preg_split('/ /i', $chaine, -1, PREG_SPLIT_NO_EMPTY);$parametres = array('mots' => '');$cle_precedente = null;foreach ($mots as $mot) {if (preg_match('/^(sg|gen|sp|ssp|au|an|nn|bib|nr|tax):(.*)$/', $mot, $match)) {$cle = $match[1];$cle_precedente = $cle;$valeur = $match[2];$parametres[$cle] = $valeur;} else if (!is_null($cle_precedente)) {$parametres[$cle_precedente] .= ' '.$mot;} else if (is_null($cle_precedente)) {if (empty($parametres['mots'])) {$parametres['mots'] = $mot;} else {$parametres['mots'] .= ' '.$mot;}}}return $parametres;}// retourne l'url de la fiche taxon pour les lienspublic static function getUrlFicheTaxon($params, $type) {$taxon = null;switch ($type) {case 'bas' :$taxon['num_nom'] = $params['bas_num'];$taxon['num_nom_retenu'] = $params['bas_num_retenu'];$taxon['nom_complet'] = $params['bas_nom'];break;case 'p1' :$taxon['num_nom'] = $params['p1_num'];$taxon['num_nom_retenu'] = $params['p1_num'];$taxon['nom_complet'] = $params['p1_nom'];break;case 'p2' :$taxon['num_nom'] = $params['p2_num'];$taxon['num_nom_retenu'] = $params['p2_num'];$taxon['nom_complet'] = $params['p2_nom'];break;default : break;}return Recherche::getUrlFicheTaxon($taxon);}}