Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1439 | Rev 1553 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
272 delphine 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Classe mère du module Liste.
5
 *
6
 * @category	PHP 5.2
7
 * @package		eflore-consultation
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
10
 * @copyright	2011 Tela-Botanica
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
13
 * @version		$Id$
14
 */
15
class Ethnobotanique extends aControleur {
302 jpm 16
 
17
	private $conteneur = null;
18
	private $nomCourant = null;
19
	private $nomsVernaculaires = null;
408 aurelien 20
	private $wikini;
959 delphine 21
	private $referentiel = 'bdtfx';
22
	private $donnees = array();
302 jpm 23
 
24
	public function __construct(Conteneur $conteneur) {
25
		$this->conteneur = $conteneur;
26
		$this->nomCourant = $this->conteneur->getNomCourant();
27
		$this->nomsVernaculaires = $this->conteneur->getApiNomsVernaculaires();
959 delphine 28
		$this->referentiel = $this->conteneur->getParametre('referentiel');
408 aurelien 29
		$this->wikini = $this->conteneur->getApiWikini();
1552 delphine 30
		$this->textes = $this->conteneur->getApiTextes ();
307 jpm 31
		$this->meta = $this->conteneur->getApiMetaDonnees();
32
		$this->appUrls = $this->conteneur->getAppUrls();
284 aurelien 33
	}
302 jpm 34
 
35
	public function obtenirDonnees() {
964 delphine 36
		$this->getNomsVernaculaires('.referentielVerna');
37
		$this->getNomsVernaculaires('.referentielVernaGrec');
959 delphine 38
		$this->getChorologie();
1552 delphine 39
		if ($this->referentiel == 'bdtfx') {
40
		  $this->getPlantUse();
41
		}
959 delphine 42
		$this->donnees['wikini'] = $this->getWikini();
43
		return $this->donnees;
306 jpm 44
	}
45
 
964 delphine 46
	private function getNomsVernaculaires($projet) {
47
		$projet = Config::get($this->referentiel.$projet);
959 delphine 48
		if ($projet != "") {
49
			$nt = $this->nomCourant->getNomRetenu()->get('num_taxonomique');
964 delphine 50
			$nomsVerna = $this->nomsVernaculaires->getRechercheComplete($projet, $nt);
959 delphine 51
			$this->donnees[$projet]['noms'] = $nomsVerna['resultat'];
52
			$this->meta->setProjet($projet);
53
			$meta = $this->meta->getMetaDonnees();
1130 aurelien 54
			$this->donnees[$projet]['meta'] = $meta[0];
959 delphine 55
			$this->donnees[$projet]['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($projet);
56
		}
272 delphine 57
	}
321 aurelien 58
 
1552 delphine 59
	private function getPlantUse() {
60
	    $plantuse = array ();
61
	    $this->textes->setProjet('plantuse');
62
	    $this->textes->setId ($this->nomCourant->getNomRetenu()->get('nom_sci'));
63
	    $texte = $this->textes->getUsage();
64
 
65
	    if ($texte['resultats']) {
66
	        $plantuse ['titre'] = "Résumé des usages de Pl@ntUse";
67
	        $plantuse ['description'] = $texte['resultats'];
68
	    }
69
	    $this->meta->setProjet('plantuse');
70
	    $meta = $this->meta->getMetaDonnees ();
71
	    $plantuse ['meta'] = $meta [0];
72
	    $plantuse ['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees('plantuse');
73
	    $this->donnees['plantuse'] = $plantuse;
74
	}
75
 
329 aurelien 76
	public function getBloc() {
77
		$nt = $this->nomCourant->getNomRetenu()->get('num_taxonomique');
964 delphine 78
		$projet = Config::get($this->referentiel.'.referentielVerna');
79
		if ($projet != "") {
80
			$nomsVerna = $this->nomsVernaculaires->getRechercheLimitee($projet, $nt);
81
			$this->donnees['nomsVerna'] = (isset($nomsVerna['resultat']) && is_array($nomsVerna['resultat'])) ? array_slice($nomsVerna['resultat'], 0, 3) : array();
82
			$this->donnees['autresNomsVerna'] = count($nomsVerna['resultat']) - 3;
83
		}
959 delphine 84
		$this->donnees['wikini'] = $this->getWikini();
85
		return $this->donnees;
329 aurelien 86
	}
87
 
321 aurelien 88
	private function getChorologie() {
448 delphine 89
		$infos_choro = $this->nomCourant->getNomRetenu()->getInfos();
959 delphine 90
		$this->donnees['chorologie'] = $this->traiterTableauChorologie($infos_choro);
91
		$this->meta->setProjet($this->referentiel);
329 aurelien 92
		$meta = $this->meta->getMetaDonnees();
1130 aurelien 93
		$this->donnees['chorologie']['meta'] = $meta[0];
959 delphine 94
		$this->donnees['chorologie']['meta']['url'] = $this->appUrls->obtenirUrlMetaDonnees($this->referentiel);
329 aurelien 95
	}
96
 
97
	private function traiterTableauChorologie($infos_choro) {
321 aurelien 98
		$donnees_choro = array();
99
		$colonnes = array();
100
		foreach ($infos_choro as $param => $valeur) {
1056 raphael 101
			if(strncmp($param, 'presence', 8) == 0) {
102
				$lieu = self::obtenirLieuPourCodePresence($this->referentiel, $param);
103
				if($lieu) {
321 aurelien 104
					$donnees_choro['Présence'][$lieu] = $valeur;
1056 raphael 105
					$colonnes[] = $lieu;
321 aurelien 106
				}
329 aurelien 107
			} else {
1056 raphael 108
				$donnees_choro = self::traiterChampsStatuts($this->referentiel, $donnees_choro, $param, $valeur);
321 aurelien 109
			}
110
		}
329 aurelien 111
 
1056 raphael 112
		ksort($donnees_choro);
113
		$donnees = array('colonnes' => array_unique($colonnes), 'donnees' => $donnees_choro);
321 aurelien 114
 
115
		return $donnees;
116
	}
329 aurelien 117
 
1056 raphael 118
	static function traiterChampsStatuts($ref, $tableau_donnees, $code, $valeur) {
455 delphine 119
		if ($code == 'statut_origine.libelle') {
1165 aurelien 120
			$tableau_donnees['Statut d\'origine'][self::obtenirIntituleLieuPourReferentiel($ref)] = $valeur;
455 delphine 121
		} elseif ($code == 'statut_introduction.libelle') {
1165 aurelien 122
			$tableau_donnees['Statut d\'introduction'][self::obtenirIntituleLieuPourReferentiel($ref)] = $valeur;
455 delphine 123
		} elseif ($code == 'statut_culture.libelle') {
1165 aurelien 124
			$tableau_donnees['Statut de culture'][self::obtenirIntituleLieuPourReferentiel($ref)] = $valeur;
329 aurelien 125
		}
126
 
127
		return $tableau_donnees;
306 jpm 128
	}
1056 raphael 129
 
130
	/* eg:
131
	 * - presence.libelle
132
	 * - presence_Guadeloupe.code */
133
	static function obtenirLieuPourCodePresence($ref, $str) {
134
		// ignore les paramètres JSON de présence qui ne contiennent pas le libellé
135
		// (= présence en toutes lettres)
136
		if(substr($str, -7) != 'libelle') return NULL;
1165 aurelien 137
		@list($prefixe, $lieu) = explode('_', $str, 2);
1056 raphael 138
 
139
		if($str == 'presence.libelle') {
1165 aurelien 140
			return self::obtenirIntituleLieuPourReferentiel($ref);
329 aurelien 141
		}
1056 raphael 142
 
143
		list($lieu, $param) = explode('.', $lieu, 2);
144
		if (strtolower($lieu) == 'ga') {
145
			return 'France (Hors Corse)';
146
		} elseif (strtolower($lieu) == 'co') {
147
			return 'France (Corse)';
148
		} elseif($lieu) {
149
			return $lieu;
329 aurelien 150
		}
1056 raphael 151
		return NULL;
329 aurelien 152
	}
408 aurelien 153
 
1165 aurelien 154
	private static function obtenirIntituleLieuPourReferentiel($ref) {
155
		$lieu = '';
156
		switch($ref) {
157
			case 'bdtfx':
158
				$lieu = 'France';
159
				break;
160
			case 'bdtxa':
161
				$lieu = 'Antilles';
1439 delphine 162
				break;
1165 aurelien 163
			case 'isfan':
164
				$lieu = 'Afrique du Nord';
165
				break;
166
		}
167
		return $lieu;
168
	}
169
 
408 aurelien 170
	private function getWikini() {
171
		$wikini = array();
172
		$wikini['titre'] = 'Wikini';
173
		$referentiel = $this->conteneur->getParametre('referentiel');
174
		$num_tax = $this->nomCourant->getNomSelectionne()->get('num_taxonomique');
175
		$page_wiki = $this->wikini->getPageWikiPourRefEtNumTax($referentiel, $num_tax);
419 aurelien 176
		$wikini['noms_communs'] = $this->wikini->getTexteFormate($page_wiki, 'noms communs');
177
		$wikini['culture_et_arts'] = $this->wikini->getTexteFormate($page_wiki, 'culture et arts');
178
		$wikini['usage'] = $this->wikini->getTexteFormate($page_wiki, 'usage');
408 aurelien 179
		return $wikini;
180
	}
272 delphine 181
}
182
?>