Subversion Repositories Applications.referentiel

Rev

Rev 82 | Rev 88 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 82 Rev 85
Line 13... Line 13...
13
 */
13
 */
14
class FicheTaxon extends AppliControleur {
14
class FicheTaxon extends AppliControleur {
Line 15... Line 15...
15
	
15
	
16
	private $donnees = array();
16
	private $donnees = array();
-
 
17
	protected $taxonDao = null;
-
 
18
	private $tableau_manuel = null;
Line 17... Line -...
17
	protected $taxonDao = null;
-
 
18
	
-
 
19
	// Codification de la présence d'un taxon
-
 
20
	private $presence_taxon = array (
-
 
21
		'P' => 'Présent',
-
 
22
		'S' => 'Supposé présent (présence à confirmer)',
-
 
23
		'D' => 'Présence douteuse',
-
 
24
		'E' => 'Éteint',	
-
 
25
		'C' => 'Cité par erreur comme présent',
-
 
26
		'A' => 'Absent',
-
 
27
		'' => 'Pas d\'information',
-
 
28
		'-' => 'Autre statut de présence',	
-
 
29
		'E-W' => 'Disparu',
-
 
30
		'P-B' =>'Présence accidentelle (Taxon « visiteur »)',
-
 
31
		'E-F' => 'Trouvé en fouille', 
-
 
32
		'-C' => 'Cryptogène');
-
 
33
	// Codification du statut d'origine	
-
 
34
	private $statut_origine= array(
-
 
35
		'N' => 'Natif',
-
 
36
		'S' => 'Supposé natif',	
-
 
37
		'D' => 'Origine douteuse',
-
 
38
		'E' => 'Anciennement natif (éteint)',
-
 
39
		'C' => 'Cité par erreur comme natif',	
-
 
40
		'A' => 'Non natif',
-
 
41
		'' => 'Pas d\'information',
-
 
42
		'X' => 'Inapplicable','-' => 'Autre statut d\'origine',
-
 
43
		'N-E' => 'Endémique',
-
 
44
		'N-S' => 'Sub-Endémique',
-
 
45
		'E-Z' => 'Endémique éteinte');
-
 
46
	// Codification du statut d'introduction
-
 
47
	private $statut_introduction = array(
-
 
48
		'I' => 'Introduit',
-
 
49
		'S' => 'Supposé introduit',
-
 
50
		'D' => 'Introduction douteuse',
-
 
51
		'E' => 'Anciennement introduit (éteint)',
-
 
52
		'C' => 'Cité par erreur comme introduit',
-
 
53
		'A' => 'Non introduit',
-
 
54
		'' => 'Pas d\'information',
-
 
55
		'X' => 'Inapplicable',
-
 
56
		'-' => 'Autre notion d\'introduction',
-
 
57
		'I-J' => 'Introduit envahissant',
-
 
58
		'I-M' => 'Domestique / Introduit non établi'	
-
 
59
	);
-
 
60
	// Codification du statut de culture	
-
 
61
	private $statut_culture = array(
-
 
62
		'C' => 'Cultivé en extérieur',
-
 
63
		'I' => 'Cultivé en intérieur', 
-
 
64
		'S' => 'Supposé cultivé', 
-
 
65
		'D' => 'Culture douteuse',
-
 
66
		'E' => 'Anciennement cultivé (éteint)', 
-
 
67
		'C' => 'Cité par erreur comme cultivé',
-
 
68
		'' => 'Pas d\'information',
-
 
69
		'X' => 'Inapplicable',
-
 
70
		'-' => 'Autre notion de culture'
19
	private $num_taxon = array(0=>0,1=>0,2=>0);
71
	);
20
	
72
	//+----------------------------------------------------------------------------------------------------------------+
21
	//+----------------------------------------------------------------------------------------------------------------+
73
	// Méthodes
22
	// Méthodes
74
	/**
23
	/**
Line 104... Line 53...
104
			$this->donnees['info'] = $this->taxonDao->getTaxon($this->referentiel, $this->donnees['num_nom']);
53
			$this->donnees['info'] = $this->taxonDao->getTaxon($this->referentiel, $this->donnees['num_nom']);
Line 105... Line 54...
105
			
54
			
106
			// Chargement des données des onglets
55
			// Chargement des données des onglets
107
			$this->chargerNomenclature();
56
			$this->chargerNomenclature();
108
			$this->chargerSynonymie();
57
			$this->chargerSynonymie();
109
			//$this->chargerClassification();
58
			$this->chargerClassification();
110
			$this->chargerChorologie();
59
			$this->chargerChorologie();
Line 111... Line 60...
111
			//$this->chargerComplements();
60
			$this->chargerComplements();
112
			
61
			
113
			$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_taxon', $this->donnees));
62
			$this->setSortie(self::RENDU_CORPS, $this->getVue('fiche_taxon', $this->donnees));
Line 114... Line 63...
114
		}
63
		}
115
	}
64
	}
116
	
65
	
117
	private function chargerNomenclature() {
66
	private function chargerNomenclature() {
118
		$this->donnees['selectionne'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom']);
67
		$this->donnees['selectionne'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom']);
119
		if (strpos($this->donnees['nom'], ' x ') ) {
68
		if (strpos($this->donnees['nom'], ' x ') ) {
120
			if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu']) {
69
			if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu'] && $this->donnees['num_nom_retenu'] != '') {
121
				$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);
70
				$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);
122
				$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom_retenu']);
71
				$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom_retenu']);
123
			} else {
72
			} else {
124
				$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom']);
73
				$this->donnees['parents'] = $this->taxonDao->getParentsHybride($this->referentiel, $this->donnees['num_nom']);
125
			}	
74
			}	
126
		} else {
75
		} else {
127
			if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu']) {
76
			if ($this->donnees['num_nom'] != $this->donnees['num_nom_retenu'] && $this->donnees['num_nom_retenu'] != '') {
128
				$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);
77
				$this->donnees['retenu'] = $this->taxonDao->getNomenclature($this->referentiel, $this->donnees['num_nom_retenu']);
Line 134... Line 83...
134
	private function chargerSynonymie() {
83
	private function chargerSynonymie() {
135
		$rechercheDao = new RechercheDao();
84
		$rechercheDao = new RechercheDao();
136
		// recherche des synonymes nomenclaturaux et taxonomiques
85
		// recherche des synonymes nomenclaturaux et taxonomiques
137
		$parametres = $this->parserChaineDeRecherche('nn:'.$this->donnees['num_nom'].' tax:1');
86
		$parametres = $this->parserChaineDeRecherche('nn:'.$this->donnees['num_nom'].' tax:1');
138
		$parametres['ref']= $this->referentiel;
87
		$parametres['ref']= $this->referentiel;
139
		$synonymes = $rechercheDao->chercher('ParTaxon', $parametres);
88
		$synonymes = $rechercheDao->chercher('ParTaxon', $parametres); 
-
 
89
		if ($synonymes != '') {
140
		foreach ($synonymes as $synonyme) {
90
			foreach ($synonymes as $synonyme) {
141
			if ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null) {
91
				if ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null) {
142
				if (($this->donnees['num_nom'] != $synonyme['num_nom']) && ($synonyme['basionyme'] == $this->donnees['num_nom'] || 
92
					if (($this->donnees['num_nom'] != $synonyme['num_nom']) && ($synonyme['basionyme'] == $this->donnees['num_nom'] || 
143
						$this->donnees['info']['basionyme'] == $synonyme['num_nom'] || $this->donnees['info']['basionyme'] == $synonyme['basionyme'])) {
93
							$this->donnees['info']['basionyme'] == $synonyme['num_nom'] || $this->donnees['info']['basionyme'] == $synonyme['basionyme'])) {
144
					$this->donnees['fiche_synonymie']['nomenclaturale'][] = $synonyme;	
94
						$this->donnees['fiche_synonymie']['nomenclaturale'][] = $synonyme;	
145
				} elseif ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null && 
95
					} elseif ($this->donnees['num_nom'] != $synonyme['num_nom'] && $synonyme['basionyme'] != null && 
146
					$this->donnees['info']['basionyme'] != null) {
96
						$this->donnees['info']['basionyme'] != null) {
147
					$this->donnees['fiche_synonymie']['taxonomique'][] = $synonyme;
97
						$this->donnees['fiche_synonymie']['taxonomique'][] = $synonyme;
148
				}	
98
					}	
149
			} elseif ($this->donnees['num_nom'] != $synonyme['num_nom']) {
99
				} elseif ($this->donnees['num_nom'] != $synonyme['num_nom']) {
150
				///nom est synonyme mal applique de num_nom_retenu
100
					///nom est synonyme mal applique de num_nom_retenu
151
				if ($synonyme['synonyme_mal_applique'] == 1) {
101
					if ($synonyme['synonyme_mal_applique'] == 1) {
152
					$this->donnees['fiche_synonymie']['mal appliquée'][] = $synonyme;
102
						$this->donnees['fiche_synonymie']['mal appliquée'][] = $synonyme;
153
				} else {
103
					} else {
154
					$this->donnees['fiche_synonymie']['indéterminée (pas de basionyme)'][] = $synonyme;
104
						$this->donnees['fiche_synonymie']['indéterminée (pas de basionyme)'][] = $synonyme;
-
 
105
					}
155
				}
106
				}
156
			}
107
			}
157
		}
-
 
158
		// recherche synonyme proparte
108
			// recherche synonyme proparte
159
		if ($this->donnees['info']['synonyme_proparte'] != ''){
109
			if ($this->donnees['info']['synonyme_proparte'] != ''){
160
			$this->donnees['fiche_synonymie']['pro parte']['num_nom'] = $this->donnees['info']['synonyme_proparte'];
110
				$this->donnees['fiche_synonymie']['pro parte']['num_nom'] = $this->donnees['info']['synonyme_proparte'];
-
 
111
				/* à modifier qd base corrigée ajouter split ";" 
-
 
112
			 	 * 	si 1	fusion de ce nom pour donner synonyme proparte
-
 
113
			 	 * 	sinon   division
-
 
114
				 */
161
		}
115
			}
162
		// recherche si taxon est un synonyme douteux
116
			// recherche si taxon est un synonyme douteux
163
		if ($this->donnees['info']['synonyme_douteux'] == 1) {
117
			if ($this->donnees['info']['synonyme_douteux'] == 1) {
164
			$this->donnees['fiche_synonymie']['douteux']['num_nom'] = $this->donnees['info'];
118
				$this->donnees['fiche_synonymie']['douteux']['num_nom'] = $this->donnees['info'];
165
		}
119
			}
-
 
120
			/* si $this->donnees['info']['synonyme_mal_applique'] == 1 et $this->donnees['num_nom'] == $this->donnees['num_nom_retenu']
-
 
121
			 * 		nom possede des synonymes mal appliquees
-
 
122
			 * 		sinon si $this->donnees['info']['synonyme_mal_applique'] == 1 et $this->donnees['num_nom'] != $this->donnees['num_nom_retenu']
-
 
123
			 * 			nom est synonyme mal applique de num_nom_retenu
-
 
124
			 * si $this->donnees['info']['synonyme_orthographique'] == $this->donnees['num_nom']
-
 
125
			 * 		nom possede des synonymes orthographiques
-
 
126
			 * 		sinon $this->donnees['info']['synonyme_orthographique'] != ''
-
 
127
			 * 			nom est synonyme mal applique de $this->donnees['info']['synonyme_orthographique']
-
 
128
			 * si $this->donnees['info']['synonyme_proparte'] != ''
-
 
129
			 * 		
-
 
130
			 * si $this->donnees['info']['homonyme'] == 1 recherche sur nom
-
 
131
			*/
166
	
132
		}	
167
	}
133
	}
Line 168... Line 134...
168
	
134
	
-
 
135
	private function chargerChorologie() {
-
 
136
		$this->chargerTableauManuel('presence');
-
 
137
		$this->chargerTableauManuel('statuts_origine');
-
 
138
		$this->chargerTableauManuel('statuts_introduction');
169
	private function chargerChorologie() {
139
		$this->chargerTableauManuel('statuts_culture');
170
		foreach ($this->donnees['info'] as $param => $valeur) {
140
		foreach ($this->donnees['info'] as $param => $valeur) {
171
			if ($param == 'presence') {
141
			if ($param == 'presence') {
172
				$this->donnees['chorologie']['Présence']['France']['code'] = $valeur;
142
				$this->donnees['chorologie']['Présence']['France']['code'] = $valeur;
173
				$this->donnees['chorologie']['Présence']['France']['valeur'] = $this->presence_taxon[$valeur];
143
				$this->donnees['chorologie']['Présence']['France']['valeur'] = $this->tableau_manuel['presence'][$valeur];
174
			} elseif (preg_match('/presence_(.*)/', $param, $lieu)) {
144
			} elseif (preg_match('/presence_(.*)/', $param, $lieu)) {
175
				$this->donnees['chorologie']['Présence'][$lieu['1']]['code'] = $valeur;
145
				$this->donnees['chorologie']['Présence'][$lieu['1']]['code'] = $valeur;
176
				$this->donnees['chorologie']['Présence'][$lieu['1']]['valeur'] = $this->presence_taxon[$valeur];
146
				$this->donnees['chorologie']['Présence'][$lieu['1']]['valeur'] = $this->tableau_manuel['presence'][$valeur];
177
			} elseif ($param == 'statut_origine') {
147
			} elseif ($param == 'statut_origine') {
178
				$this->donnees['chorologie']['Statut d\'origine']['France']['code'] = $valeur;
148
				$this->donnees['chorologie']['Statut d\'origine']['France']['code'] = $valeur;
-
 
149
				$this->donnees['chorologie']['Statut d\'origine']['France']['valeur'] = 
179
				$this->donnees['chorologie']['Statut d\'origine']['France']['valeur'] = $this->statut_origine[$valeur];
150
					$this->tableau_manuel['statuts_origine'][$valeur];
180
			} elseif (preg_match('/statut_origine_(.*)/', $param, $lieu)) {
151
			} elseif (preg_match('/statut_origine_(.*)/', $param, $lieu)) {
181
				$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['code'] = $valeur;
152
				$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['code'] = $valeur;
-
 
153
				$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['valeur'] = 
182
				$this->donnees['chorologie']['Statut d\'origine'][$lieu['1']]['valeur'] = $this->statut_origine[$valeur];
154
					$this->tableau_manuel['statuts_origine'][$valeur];
183
			} elseif ($param == 'statut_introduction') {
155
			} elseif ($param == 'statut_introduction') {
184
				$this->donnees['chorologie']['Statut d\'introduction']['France']['code'] = $valeur;
156
				$this->donnees['chorologie']['Statut d\'introduction']['France']['code'] = $valeur;
-
 
157
				$this->donnees['chorologie']['Statut d\'introduction']['France']['valeur'] = 
185
				$this->donnees['chorologie']['Statut d\'introduction']['France']['valeur'] = $this->statut_introduction[$valeur];
158
					$this->tableau_manuel['statuts_introduction'][$valeur];
186
			} elseif (preg_match('/statut_introduction_(.*)/', $param, $lieu)) {
159
			} elseif (preg_match('/statut_introduction_(.*)/', $param, $lieu)) {
187
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['code'] = $valeur;
160
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['code'] = $valeur;
-
 
161
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['valeur'] = 
188
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu['1']]['valeur'] = $this->statut_introduction[$valeur];
162
					$this->tableau_manuel['statuts_introduction'][$valeur];
189
			} elseif ($param == 'statut_culture') {
163
			} elseif ($param == 'statut_culture') {
190
				$this->donnees['chorologie']['Statut de culture']['France']['code'] = $valeur;
164
				$this->donnees['chorologie']['Statut de culture']['France']['code'] = $valeur;
-
 
165
				$this->donnees['chorologie']['Statut de culture']['France']['valeur'] = 
191
				$this->donnees['chorologie']['Statut de culture']['France']['valeur'] = $this->statut_culture[$valeur];
166
					$this->tableau_manuel['statuts_culture'][$valeur];
192
			} elseif (preg_match('/statut_culture_(.*)/', $param, $lieu)) {
167
			} elseif (preg_match('/statut_culture_(.*)/', $param, $lieu)) {
193
				$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['code'] = $valeur;
168
				$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['code'] = $valeur;
-
 
169
				$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['valeur'] = 
194
				$this->donnees['chorologie']['Statut de culture'][$lieu['1']]['valeur'] = $this->statut_culture[$valeur];
170
					$this->tableau_manuel['statuts_culture'][$valeur];
195
			}
171
			}
196
		}
172
		}
197
		foreach ($this->donnees['chorologie']['Présence'] as $lieu=>$valeur) {
173
		foreach ($this->donnees['chorologie']['Présence'] as $lieu=>$valeur) {
198
			if (!isset($this->donnees['chorologie']['Statut d\'origine'][$lieu])) {
174
			if (!isset($this->donnees['chorologie']['Statut d\'origine'][$lieu])) {
199
				$this->donnees['chorologie']['Statut d\'origine'][$lieu]['code'] = '';
175
				$this->donnees['chorologie']['Statut d\'origine'][$lieu]['code'] = '';
-
 
176
				$this->donnees['chorologie']['Statut d\'origine'][$lieu]['valeur'] = 
200
				$this->donnees['chorologie']['Statut d\'origine'][$lieu]['valeur'] = $this->statut_origine[''];
177
					$this->tableau_manuel['statuts_origine'][''];
201
			}
178
			}
202
			if (!isset($this->donnees['chorologie']['Statut d\'introduction'][$lieu])) {
179
			if (!isset($this->donnees['chorologie']['Statut d\'introduction'][$lieu])) {
203
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['code'] = '';
180
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['code'] = '';
-
 
181
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['valeur'] = 
204
				$this->donnees['chorologie']['Statut d\'introduction'][$lieu]['valeur'] = $this->statut_introduction[''];
182
					$this->tableau_manuel['statuts_introduction'][''];
205
			}
183
			}
206
			if (!isset($this->donnees['chorologie']['Statut de culture'][$lieu])) {
184
			if (!isset($this->donnees['chorologie']['Statut de culture'][$lieu])) {
207
				$this->donnees['chorologie']['Statut de culture'][$lieu]['code'] = '';
185
				$this->donnees['chorologie']['Statut de culture'][$lieu]['code'] = '';
-
 
186
				$this->donnees['chorologie']['Statut de culture'][$lieu]['valeur'] = 
-
 
187
					$this->tableau_manuel['statuts_culture'][''];
-
 
188
			}
-
 
189
		}
-
 
190
	}
-
 
191
	
-
 
192
	private function chargerClassification() {
-
 
193
		if ($this->donnees['info']['num_tax_sup'] != '' || isset($this->donnees['retenu']['num_tax_sup'])) {
-
 
194
			if ($this->donnees['num_nom'] == $this->donnees['num_nom_retenu']) {
-
 
195
				$this->donnees['classification']['supérieurs'] = array_reverse($this->taxonDao->getClassification
-
 
196
					('Superieur', $this->referentiel, $this->donnees['info']['num_tax_sup']));
-
 
197
			} else {
-
 
198
				$this->donnees['classification']['supérieurs'] = array_reverse($this->taxonDao->getClassification
-
 
199
				('Superieur', $this->referentiel, $this->donnees['retenu']['num_tax_sup']));
-
 
200
			}		
-
 
201
		}	
-
 
202
		if ($this->donnees['num_nom_retenu'] != '') {
-
 
203
			$class_inf = $this->taxonDao->getClassification
-
 
204
				('Inferieur', $this->referentiel, $this->donnees['num_nom_retenu']);
-
 
205
			$this->donnees['classification']['inférieurs'] = $class_inf['inf'];	
-
 
206
			$this->donnees['niveau'] = $class_inf['niveau'];
-
 
207
		}	
-
 
208
	}
-
 
209
	
-
 
210
	public function chargerComplements() {
-
 
211
		$champs_manuel_technique = explode(',', $this->manuel['champs']);
-
 
212
		$champs_base_donnees = key($this->donnees['info']);
-
 
213
		$champs_supp_base = array_diff_key($this->donnees['info'], array_flip($champs_manuel_technique));
-
 
214
		foreach ($champs_supp_base as $champ=>$valeur) {
-
 
215
			if (!(preg_match('/presence_(.*)/',$champ) || preg_match('/statut_origine_(.*)/', $champ) || 
-
 
216
				 preg_match('/statut_introduction_(.*)/', $champ) || preg_match('/statut_culture_(.*)/', $champ))) {
208
				$this->donnees['chorologie']['Statut de culture'][$lieu]['valeur'] = $this->statut_culture[''];
217
				$this->donnees['complement'][$champ] = $valeur;
209
			}
218
			}
210
		}
219
		}
Line 211... Line 220...
211
	}
220
	}
Line 255... Line 264...
255
			default : break;
264
			default : break;
256
		}
265
		}
257
		return Recherche::getUrlFicheTaxon($taxon);
266
		return Recherche::getUrlFicheTaxon($taxon);
258
	}
267
	}
Line -... Line 268...
-
 
268
	
-
 
269
	// charger tableau de $this->manuel
-
 
270
	private function chargerTableauManuel($titreTableau) {
-
 
271
		$champs = explode(',', $this->manuel[$titreTableau]);
-
 
272
		foreach ($champs as $champ) {
-
 
273
			list($champ_nom, $type) = explode('=', trim($champ));
-
 
274
			$this->tableau_manuel[$titreTableau][$champ_nom] = $type;
-
 
275
		}
-
 
276
	}
Line 259... Line 277...
259
	
277
	
260
 
278