Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1554 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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