Rev 82 | Rev 88 | 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;private $tableau_manuel = null;private $num_taxon = array(0=>0,1=>0,2=>0);//+----------------------------------------------------------------------------------------------------------------+// 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['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['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);if ($synonymes != '') {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'];/* à modifier qd base corrigée ajouter split ";"* si 1 fusion de ce nom pour donner synonyme proparte* sinon division*/}// recherche si taxon est un synonyme douteuxif ($this->donnees['info']['synonyme_douteux'] == 1) {$this->donnees['fiche_synonymie']['douteux']['num_nom'] = $this->donnees['info'];}/* si $this->donnees['info']['synonyme_mal_applique'] == 1 et $this->donnees['num_nom'] == $this->donnees['num_nom_retenu']* nom possede des synonymes mal appliquees* sinon si $this->donnees['info']['synonyme_mal_applique'] == 1 et $this->donnees['num_nom'] != $this->donnees['num_nom_retenu']* nom est synonyme mal applique de num_nom_retenu* si $this->donnees['info']['synonyme_orthographique'] == $this->donnees['num_nom']* nom possede des synonymes orthographiques* sinon $this->donnees['info']['synonyme_orthographique'] != ''* nom est synonyme mal applique de $this->donnees['info']['synonyme_orthographique']* si $this->donnees['info']['synonyme_proparte'] != ''** si $this->donnees['info']['homonyme'] == 1 recherche sur nom*/}}private function chargerChorologie() {$this->chargerTableauManuel('presence');$this->chargerTableauManuel('statuts_origine');$this->chargerTableauManuel('statuts_introduction');$this->chargerTableauManuel('statuts_culture');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->tableau_manuel['presence'][$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->tableau_manuel['presence'][$valeur];} elseif ($param == 'statut_origine') {$this->donnees['chorologie']['Statut d\'origine']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut d\'origine']['France']['valeur'] =$this->tableau_manuel['statuts_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->tableau_manuel['statuts_origine'][$valeur];} elseif ($param == 'statut_introduction') {$this->donnees['chorologie']['Statut d\'introduction']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut d\'introduction']['France']['valeur'] =$this->tableau_manuel['statuts_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->tableau_manuel['statuts_introduction'][$valeur];} elseif ($param == 'statut_culture') {$this->donnees['chorologie']['Statut de culture']['France']['code'] = $valeur;$this->donnees['chorologie']['Statut de culture']['France']['valeur'] =$this->tableau_manuel['statuts_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->tableau_manuel['statuts_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->tableau_manuel['statuts_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->tableau_manuel['statuts_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->tableau_manuel['statuts_culture'][''];}}}private function chargerClassification() {if ($this->donnees['info']['num_tax_sup'] != '' || isset($this->donnees['retenu']['num_tax_sup'])) {if ($this->donnees['num_nom'] == $this->donnees['num_nom_retenu']) {$this->donnees['classification']['supérieurs'] = array_reverse($this->taxonDao->getClassification('Superieur', $this->referentiel, $this->donnees['info']['num_tax_sup']));} else {$this->donnees['classification']['supérieurs'] = array_reverse($this->taxonDao->getClassification('Superieur', $this->referentiel, $this->donnees['retenu']['num_tax_sup']));}}if ($this->donnees['num_nom_retenu'] != '') {$class_inf = $this->taxonDao->getClassification('Inferieur', $this->referentiel, $this->donnees['num_nom_retenu']);$this->donnees['classification']['inférieurs'] = $class_inf['inf'];$this->donnees['niveau'] = $class_inf['niveau'];}}public function chargerComplements() {$champs_manuel_technique = explode(',', $this->manuel['champs']);$champs_base_donnees = key($this->donnees['info']);$champs_supp_base = array_diff_key($this->donnees['info'], array_flip($champs_manuel_technique));foreach ($champs_supp_base as $champ=>$valeur) {if (!(preg_match('/presence_(.*)/',$champ) || preg_match('/statut_origine_(.*)/', $champ) ||preg_match('/statut_introduction_(.*)/', $champ) || preg_match('/statut_culture_(.*)/', $champ))) {$this->donnees['complement'][$champ] = $valeur;}}}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);}// charger tableau de $this->manuelprivate function chargerTableauManuel($titreTableau) {$champs = explode(',', $this->manuel[$titreTableau]);foreach ($champs as $champ) {list($champ_nom, $type) = explode('=', trim($champ));$this->tableau_manuel[$titreTableau][$champ_nom] = $type;}}}