Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 478 Rev 487
Line 5... Line 5...
5
	const DOSSIER_V2 = '../../../donnees/coste/2.00/';
5
	const DOSSIER_V2 = '../../../donnees/coste/2.00/';
Line 6... Line 6...
6
 
6
 
7
	private $conteneur = null;
7
	private $conteneur = null;
8
	private $outils = null;
8
	private $outils = null;
-
 
9
	private $messages = null;
9
	private $messages = null;
10
	private $generateur = null;
10
	private $dossierBase = '';
11
	private $dossierBase = '';
11
	private $spIndex = array();
12
	private $spIndex = array();
-
 
13
	private $supraSpIndex = array();
12
	private $supraSpIndex = array();
14
	private $imgIndex = array();
13
	private $indexFinal = array();
15
	private $indexFinal = array();
14
	private $tableauParDefaut = array();
16
	private $tableauParDefaut = array();
15
	private $nbreTaxonInf = array();
17
	private $nbreTaxonInf = array();
16
	private $enteteFinal = array(
18
	private $enteteFinal = array(
17
		'num_nom',
19
		'num_nom',
18
		'num_nom_retenu',
20
		'num_nom_retenu',
19
		'num_tax_sup',
21
		'num_tax_sup',
20
		'rang',
22
		'rang',
-
 
23
		'nom_sci',
-
 
24
		'nom_supra_generique',
-
 
25
		'genre',
-
 
26
		'epithete_infra_generique',
-
 
27
		'epithete_sp',
-
 
28
		'type_epithete',
-
 
29
		'epithete_infra_sp',
-
 
30
		'cultivar_groupe',
-
 
31
		'cultivar',
21
		'nom_sci',
32
		'nom_commercial',
22
		'auteur',
-
 
23
		'nom_addendum',
33
		'auteur',
24
		'annee',
34
		'annee',
-
 
35
		'biblio_origine',
-
 
36
		'notes',
25
		'biblio_origine',
37
		'nom_addendum',
26
		'nom_francais',
38
		'nom_francais',
27
		'nom_coste',
39
		'nom_coste',
28
		'auteur_coste',
40
		'auteur_coste',
29
		'biblio_coste',
41
		'biblio_coste',
Line 32... Line 44...
32
		'num_tax_sup_coste',
44
		'num_tax_sup_coste',
33
		'synonymie_coste',
45
		'synonymie_coste',
34
		'tome',
46
		'tome',
35
		'page',
47
		'page',
36
		'nbre_taxons',
48
		'nbre_taxons',
37
		'bdnff_nn',
49
		'flore_bdtfx_nn',
38
		'bdnff_nt',
50
		'flore_bdtfx_nt',
39
		'image',
51
		'image',
-
 
52
		'image_auteur',
40
		'page_wiki_dsc',
53
		'page_wiki_dsc',
41
		'page_wiki_cle');
54
		'page_wiki_cle',
-
 
55
		'nom_sci_html');
Line 42... Line 56...
42
 
56
 
43
	public function __construct(Conteneur $conteneur) {
57
	public function __construct(Conteneur $conteneur) {
44
		mb_internal_encoding('UTF-8');
58
		mb_internal_encoding('UTF-8');
45
		setlocale(LC_ALL, 'fr_FR.UTF-8');
59
		setlocale(LC_ALL, 'fr_FR.UTF-8');
46
		$this->conteneur = $conteneur;
60
		$this->conteneur = $conteneur;
47
		$this->outils = $conteneur->getOutils();
61
		$this->outils = $conteneur->getOutils();
-
 
62
		$this->messages = $conteneur->getMessages();
48
		$this->messages = $conteneur->getMessages();
63
		$this->generateur = $conteneur->getGenerateurNomSciHtml();
49
		$this->dossierBase = dirname(__FILE__).'/';
64
		$this->dossierBase = dirname(__FILE__).'/';
Line 50... Line 65...
50
	}
65
	}
51
 
66
 
52
	public function fusionnerIndex() {
67
	public function fusionnerIndex() {
53
		$this->chargerIndexSp();
68
		$this->chargerIndexSp();
54
		$this->chargerIndexSupraSp();
69
		$this->chargerIndexSupraSp();
55
		$this->initialiserTableauLigneIndexFinal();
70
		$this->initialiserTableauLigneIndexFinal();
-
 
71
		$this->creerIndexFinal();
-
 
72
		$this->ajouterChampsDansIndexFinal();
-
 
73
		$this->ajouteurAuteurImage();
56
		$this->creerIndexFinal();
74
		$this->decomposerNomSci();
57
		$this->ajouterChampsDansIndexFinal();
75
		$this->ajouteurNomSciHtml();
Line 58... Line 76...
58
		$this->creerFichierCsvIndexFinal();
76
		$this->creerFichierCsvIndexFinal();
59
	}
77
	}
Line 150... Line 168...
150
		}
168
		}
151
	}
169
	}
Line 152... Line 170...
152
 
170
 
153
	private function genererPageWikiDsc($infos) {
171
	private function genererPageWikiDsc($infos) {
-
 
172
		$prefixe = $this->genererPrefixePage($infos);
-
 
173
		if ($infos['rang'] == '180') {
-
 
174
			$nomSci = str_replace(' ', '', ucwords(strtolower($infos['nom_coste'])));
154
		$prefixe = $this->genererPrefixePage($infos);
175
		} else {
-
 
176
			$nomSci = str_replace(' ', '', ucwords(strtolower($infos['nom_sci'])));
155
		$nomSci = str_replace(' ', '', ucwords(strtolower($infos['nom_sci'])));
177
		}
156
		$pageWiki = $prefixe.$nomSci;
178
		$pageWiki = $prefixe.$nomSci;
157
		return $pageWiki;
179
		return $pageWiki;
Line 158... Line 180...
158
	}
180
	}
159
 
181
 
160
	private function genererPageWikiCle($infos) {
182
	private function genererPageWikiCle($infos) {
161
		$pageWiki = '';
183
		$pageWiki = '';
162
		if ($infos['nbre_taxons'] > 1) {
184
		if ($infos['nbre_taxons'] > 1) {
-
 
185
			$prefixe = $this->genererPrefixePage($infos);
-
 
186
			if ($infos['rang'] == '20') {
-
 
187
				$pageWiki = $prefixe.'TabClaEtEmb';
-
 
188
			} elseif ($infos['rang'] == '40' && ($infos['num_nom_coste'] == 'E2' || $infos['num_nom_coste'] == 'E3')) {
-
 
189
				$pageWiki = $prefixe.'TabFam';
-
 
190
			} else if ($infos['rang'] == '80') {
163
			$prefixe = $this->genererPrefixePage($infos);
191
				$pageWiki = $prefixe.'TabFam';
164
			if ($infos['rang'] == '180') {
192
			} else if ($infos['rang'] == '180') {
165
				$pageWiki = $prefixe.'TabGen';
193
				$pageWiki = $prefixe.'TabGen';
166
			} else if ($infos['rang'] == '220') {
194
			} else if ($infos['rang'] == '220') {
167
				$pageWiki = $prefixe.'TabSp';
195
				$pageWiki = $prefixe.'TabSp';
Line 173... Line 201...
173
	private function genererPrefixePage($infos) {
201
	private function genererPrefixePage($infos) {
174
		$prefixe = '';
202
		$prefixe = '';
175
		$num = preg_replace('/^[a-z]*([0-9.]+)$/i', '$1', $infos['num_nom_coste']);
203
		$num = preg_replace('/^[a-z]*([0-9.]+)$/i', '$1', $infos['num_nom_coste']);
176
		if (preg_match('/^([0-9]+)[.][0-9]+$/i', $infos['num_nom_coste'], $match)) {
204
		if (preg_match('/^([0-9]+)[.][0-9]+$/i', $infos['num_nom_coste'], $match)) {
177
			$num = sprintf('%04s', $match[1]);
205
			$num = sprintf('%04s', $match[1]);
-
 
206
		} else if ($infos['rang'] == 20 ) {
-
 
207
			$num = '';
178
		} else if ($infos['rang'] < 80 ) {
208
		} else if ($infos['rang'] < 80 ) {
179
			$num = sprintf('%02s', $num);
209
			$num = sprintf('%02s', $num);
180
		} else if ($infos['rang'] < 290 ) {
210
		} else if ($infos['rang'] < 290 ) {
181
			$num = sprintf('%03s', $num);
211
			$num = sprintf('%03s', $num);
182
		} else {
212
		} else {
Line 189... Line 219...
189
		return $prefixe;
219
		return $prefixe;
190
	}
220
	}
Line 191... Line 221...
191
 
221
 
192
	private function obtenirNbreTaxon($infos) {
222
	private function obtenirNbreTaxon($infos) {
193
		$nbre = '';
-
 
194
		if ($infos['rang'] == 180 || $infos['rang'] == 220) {
223
		$nbre = '';
195
			if (isset($this->nbreTaxonInf[$infos['num_nom_coste']])) {
224
		if (isset($this->nbreTaxonInf[$infos['num_nom_coste']])) {
196
				$nbre = $this->nbreTaxonInf[$infos['num_nom_coste']];
-
 
197
			}
225
			$nbre = $this->nbreTaxonInf[$infos['num_nom_coste']];
198
		}
226
		}
199
		return $nbre;
227
		return $nbre;
Line 200... Line 228...
200
	}
228
	}
Line 205... Line 233...
205
			$img = $infos['num_nom_coste'].'.png';
233
			$img = $infos['num_nom_coste'].'.png';
206
		}
234
		}
207
		return $img;
235
		return $img;
208
	}
236
	}
Line -... Line 237...
-
 
237
 
-
 
238
	private function ajouteurAuteurImage() {
-
 
239
		$this->chargerAuteurImg();
-
 
240
		foreach ($this->indexFinal as $nnc => $infos) {
-
 
241
			$infos['image_auteur'] = $this->imgIndex[$infos['image']];
-
 
242
			$this->indexFinal[$nnc] = $infos;
-
 
243
		}
-
 
244
	}
-
 
245
 
-
 
246
	private function chargerAuteurImg() {
-
 
247
		$imgIndexFichier = $this->dossierBase.self::DOSSIER_V0.'coste_images_auteur_correspondance_bdnff.tsv';
-
 
248
		$index = $this->outils->transformerTxtTsvEnTableau($imgIndexFichier);
-
 
249
		foreach ($index as $infos) {
-
 
250
			$id = $infos['id_image'];
-
 
251
			$this->imgIndex[$id] = $infos['auteur'];
-
 
252
		}
-
 
253
	}
-
 
254
 
-
 
255
	private function decomposerNomSci() {
-
 
256
		$majuscule = "[ÆŒA-Z]";
-
 
257
		$epithete = "[æœïa-z-]+";
-
 
258
		foreach ($this->indexFinal as $nnc => $infos) {
-
 
259
			$id = $infos['num_nom_coste'];
-
 
260
			$nomSci = $infos['nom_sci'];
-
 
261
			$rang = $infos['rang'];
-
 
262
			if ($rang < 220) {
-
 
263
				$infos['nom_supra_generique'] = $nomSci;
-
 
264
			} else if ($rang == 220) {
-
 
265
				$infos['genre'] = $nomSci;
-
 
266
			} else if ($rang == 290) {
-
 
267
				if (preg_match("/^($majuscule$epithete) ($epithete)$/", $nomSci, $match)) {
-
 
268
					$infos['genre'] = $match[1];
-
 
269
					$infos['epithete_sp'] = $match[2];
-
 
270
				} else {
-
 
271
					$this->messages->traiterErreur("Le nom $nomSci ($id) de rang $rang n'est pas standard.");
-
 
272
				}
-
 
273
			} else if ($rang == 340) {
-
 
274
				if (preg_match("/^($majuscule$epithete) ($epithete) (var[.]) ($epithete)$/", $nomSci, $match)) {
-
 
275
					$infos['genre'] = $match[1];
-
 
276
					$infos['epithete_sp'] = $match[2];
-
 
277
					$infos['type_epithete'] = $match[3];
-
 
278
					$infos['epithete_infra_sp'] = $match[4];
-
 
279
				} else {
-
 
280
					$this->messages->traiterErreur("Le nom $nomSci ($id) de rang $rang n'est pas standard.");
-
 
281
				}
-
 
282
			}
-
 
283
 
-
 
284
			$this->indexFinal[$nnc] = $infos;
-
 
285
			$this->messages->afficherAvancement("Décomposition des noms scientifiques en cours");
-
 
286
		}
-
 
287
		echo "\n";
-
 
288
	}
-
 
289
 
-
 
290
	private function ajouteurNomSciHtml() {
-
 
291
		foreach ($this->indexFinal as $nnc => $infos) {
-
 
292
			$this->indexFinal[$nnc]['nom_sci_html'] = $this->generateur->genererNomSciHtml($infos);
-
 
293
			$this->messages->afficherAvancement("Création des noms scientifiques HTML en cours");
-
 
294
		}
-
 
295
		echo "\n";
-
 
296
	}
209
 
297
 
210
	private function creerFichierCsvIndexFinal() {
298
	private function creerFichierCsvIndexFinal() {
211
		$lignes = array();
299
		$lignes = array();
212
		array_unshift($this->indexFinal, $this->enteteFinal);
300
		array_unshift($this->indexFinal, $this->enteteFinal);
213
		foreach ($this->indexFinal as $infos) {
301
		foreach ($this->indexFinal as $infos) {