Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 292 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 292 Rev 426
1
<?php
1
<?php
2
 
2
 
3
// commande : /opt/lampp/bin/php cli.php description_sp -a tester -n /home/jennifer/Tela-botanica_projets/Coste/descriptions/html
3
// commande : /opt/lampp/bin/php cli.php description_sp -a tester -n /home/jennifer/Tela-botanica_projets/Coste/descriptions/html
4
 
4
 
5
class DescriptionSp extends Script {
5
class DescriptionSp extends Script {
6
 
6
 
7
	protected $donnees = array();
7
	protected $donnees = array();
8
	protected $nb_espece = 0;
8
	protected $nb_espece = 0;
9
	protected $donnees_espece = array();
9
	protected $donnees_espece = array();
10
	protected $fichier;
10
	protected $fichier;
11
	protected $table_espece = array();
11
	protected $table_espece = array();
12
 
12
 
13
	protected $parametres_autorises = array(
13
	protected $parametres_autorises = array(
14
		'-n' => array(true, null, 'nom du dossier à analyser'));
14
		'-n' => array(true, null, 'nom du dossier à analyser'));
15
 
15
 
16
	public function executer() {
16
	public function executer() {
17
		$this->bdd = new Bdd();
17
		$this->bdd = new Bdd();
18
 
18
 
19
		// Lancement de l'action demandée
19
		// Lancement de l'action demandée
20
		$cmd = $this->getParametre('a');
20
		$cmd = $this->getParametre('a');
21
		switch ($cmd) {
21
		switch ($cmd) {
22
			case 'integrer' :
22
			case 'integrer' :
-
 
23
				$this->supprimerPagesExistantes();
-
 
24
				$this->reinitialiserAutoIncrement('coste_pages');
-
 
25
				$this->reinitialiserAutoIncrement('coste_triples');
-
 
26
 
23
				$this->ouvrirDossier();
27
				$this->ouvrirDossier();
24
				$this->chargerIndexGpFG();
28
				$this->chargerIndexGpFG();
25
				$this->integrerSynonyme();
29
				$this->integrerSynonyme();
26
				ksort($this->table_espece);
30
				ksort($this->table_espece);
27
				$this->recupererDonneesBdnff();
31
				$this->recupererDonneesBdnff();
28
				$this->genererNumNom();
32
				$this->genererNumNom();
29
				$this->insererNumNomDansTriples();
33
				$this->insererNumNomDansTriples();
30
				$this->creerTableCoste();
34
				$this->creerTableCoste();
31
				$this->insererTableProjetCoste();
35
				$this->insererTableProjetCoste();
32
				break;
36
				break;
33
			default :
37
			default :
34
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
38
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
35
		}
39
		}
36
	}
40
	}
37
 
41
 
38
//---------------------------------FONCTION DE RECUPERATION DES DONNEES SUR LES ESPECES---------------------------------
42
//---------------------------------FONCTION DE RECUPERATION DES DONNEES SUR LES ESPECES---------------------------------
39
 
43
 
40
	private function ouvrirDossier() {
44
	private function ouvrirDossier() {
41
		$this->supprimerPagesExistantes();
-
 
42
		$this->reinitialiserAutoIncrement('coste_pages');
-
 
43
		$this->reinitialiserAutoIncrement('coste_triples');
-
 
44
		$nomDossier = $this->getParametre('n');
45
		$nomDossier = $this->getParametre('n');
45
		$tableaux = null;
46
		$tableaux = null;
46
		if (file_exists($nomDossier) === true) {
47
		if (file_exists($nomDossier) === true) {
47
			if (is_dir($nomDossier)) {
48
			if (is_dir($nomDossier)) {
48
				if ($dossierOuvert = opendir($nomDossier) ) {
49
				if ($dossierOuvert = opendir($nomDossier) ) {
49
					while ( ($nomFichier = readdir($dossierOuvert)) !== false) {
50
					while ( ($nomFichier = readdir($dossierOuvert)) !== false) {
50
						if ( !is_dir($nomFichier) && preg_match('/e[0-9]{4}\.htm/', $nomFichier)) {
51
						if ( !is_dir($nomFichier) && preg_match('/e[0-9]{4}\.htm/', $nomFichier)) {
51
							$nomFichier = $nomDossier.'/'.$nomFichier;
52
							$nomFichier = $nomDossier.'/'.$nomFichier;
52
							$this->traiterFichier($nomFichier);
53
							$this->traiterFichier($nomFichier);
53
						}
54
						}
54
					}
55
					}
55
					closedir($dossierOuvert);
56
					closedir($dossierOuvert);
56
				} else {
57
				} else {
57
					$this->traiterErreur("Le dossier $nomDossier n'a pas pu être ouvert.");
58
					$this->traiterErreur("Le dossier $nomDossier n'a pas pu être ouvert.");
58
				}
59
				}
59
			} else {
60
			} else {
60
				$tableaux[$nomDossier] = $this->ouvrirFichier($nomDossier);
61
				$tableaux[$nomDossier] = $this->ouvrirFichier($nomDossier);
61
			}
62
			}
62
		} else {
63
		} else {
63
			$this->traiterErreur("Le dossier $nomDossier est introuvable.");
64
			$this->traiterErreur("Le dossier $nomDossier est introuvable.");
64
		}
65
		}
65
		$this->traiterInfo('Nombre d\'espèce : '.$this->nb_espece);
66
		$this->traiterInfo('Nombre d\'espèce : '.$this->nb_espece);
66
		//$this->creerFichier('donneesEspeces.tsv', $this->donnees_espece, '/home/jennifer/Tela-botanica_projets/Coste/descriptions/');
67
		//$this->creerFichier('donneesEspeces.tsv', $this->donnees_espece, '/home/jennifer/Tela-botanica_projets/Coste/descriptions/');
67
		return $tableaux;
68
		return $tableaux;
68
	}
69
	}
69
 
70
 
70
	private function supprimerPagesExistantes() {
71
	private function supprimerPagesExistantes() {
71
		//suppression des tuples déjà existants
72
		//suppression des tuples déjà existants
72
		$requete = 'DELETE FROM coste_pages WHERE id > 35';
73
		$requete = 'DELETE FROM coste_pages WHERE id > 35';
73
		$this->bdd->requeter($requete);
74
		$this->bdd->requeter($requete);
74
		$requete = 'DELETE FROM coste_triples WHERE id > 1';
75
		$requete = 'DELETE FROM coste_triples WHERE id > 1';
75
		$this->bdd->requeter($requete);
76
		$this->bdd->requeter($requete);
76
		$requete = 'DELETE FROM coste_correspondance_bdnff ';
77
		$requete = 'DELETE FROM coste_correspondance_bdnff ';
77
		$this->bdd->requeter($requete);
78
		$this->bdd->requeter($requete);
78
		$this->traiterInfo('Table coste_pages, coste_triple et coste_correspondance_bdnff ont été vidés :)');
79
		$this->traiterInfo('Table coste_pages, coste_triple et coste_correspondance_bdnff ont été vidés :)');
79
	}
80
	}
80
 
81
 
81
 
82
 
82
	private function reinitialiserAutoIncrement($table) {
83
	private function reinitialiserAutoIncrement($table) {
83
		$requete_max_id = 'SELECT max(id) FROM '.$table;
84
		$requete_max_id = 'SELECT max(id) FROM '.$table;
84
		$id_max = $this->bdd->recuperer($requete_max_id);
85
		$id_max = $this->bdd->recuperer($requete_max_id);
85
		$id_max = $id_max['max(id)'];
86
		$id_max = $id_max['max(id)'];
86
		$id_max = $id_max+1;
87
		$id_max = $id_max+1;
87
		$requete_pages = 'ALTER TABLE '.$table.' AUTO_INCREMENT = '.$id_max;
88
		$requete_pages = 'ALTER TABLE '.$table.' AUTO_INCREMENT = '.$id_max;
88
		$this->bdd->requeter($requete_pages);
89
		$this->bdd->requeter($requete_pages);
89
	}
90
	}
90
 
91
 
91
 
92
 
92
	private function traiterFichier($nomFichier) {
93
	private function traiterFichier($nomFichier) {
93
		$donnees = $this->ouvrirFichier($nomFichier);
94
		$donnees = $this->ouvrirFichier($nomFichier);
94
		if ($donnees['ouvert'] == "oui") {
95
		if ($donnees['ouvert'] == "oui") {
95
			$donneesTag = $this->creerNomPage($donnees['tag']);
96
			$donneesTag = $this->creerNomPage($donnees['tag']);
96
			//on insère le triple titre dans coste_triples
97
			//on insère le triple titre dans coste_triples
97
			$this->donnees_espece[] = $donneesTag;
98
			$this->donnees_espece[] = $donneesTag;
98
			$requetePage = 'INSERT INTO coste_pages (tag, time, body, latest) VALUES ("'
99
			$requetePage = 'INSERT INTO coste_pages (tag, time, body, latest) VALUES ("'
99
							.$donneesTag['nomPage'].'", NOW(), "'.$donnees['texte'].'", "Y");';
100
							.$donneesTag['nomPage'].'", NOW(), "'.$donnees['texte'].'", "Y");';
100
			$requeteTriple = 'INSERT INTO coste_triples(resource, property, value) VALUES '
101
			$requeteTriple = 'INSERT INTO coste_triples(resource, property, value) VALUES '
101
							.'("'.$donneesTag['nomPage'].'", "titre", "'.$donneesTag['titre'].'"),';
102
							.'("'.$donneesTag['nomPage'].'", "titre", "'.$donneesTag['titre'].'"),';
102
			//on insère les correspondances avec bdnff
103
			//on insère les correspondances avec bdnff
103
			$donneesCorr = $this->creerCorrespondance($donnees['correspondance']);
104
			$donneesCorr = $this->creerCorrespondance($donnees['correspondance']);
104
			$requeteCorr = 'INSERT INTO coste_correspondance_bdnff VALUES ("'
105
			$requeteCorr = 'INSERT INTO coste_correspondance_bdnff VALUES ("'
105
							.$donneesTag['id'].'", "'.$donneesCorr['num_nom'].'", "'
106
							.$donneesTag['id'].'", "'.$donneesCorr['num_nom'].'", "'
106
							.$donneesCorr['num_tax'].'", "'.$donneesCorr['famille'].'", "'.$donneesCorr['nom_sci'].'");';
107
							.$donneesCorr['num_tax'].'", "'.$donneesCorr['famille'].'", "'.$donneesCorr['nom_sci'].'");';
107
			$requete = $requetePage." ".rtrim($requeteTriple, ',')."; ".$requeteCorr;
108
			$requete = $requetePage." ".rtrim($requeteTriple, ',')."; ".$requeteCorr;
108
			$this->bdd->requeter($requete);
109
			$this->bdd->requeter($requete);
109
 
110
 
110
			$this->nb_espece++;
111
			$this->nb_espece++;
111
			$this->afficherAvancement("insertion espece");
112
			$this->afficherAvancement("insertion espece");
112
		}
113
		}
113
	}
114
	}
114
 
115
 
115
	private function ouvrirFichier($nomFichier) {
116
	private function ouvrirFichier($nomFichier) {
116
		$this->fichier = $nomFichier;
117
		$this->fichier = $nomFichier;
117
		$donnees = null;
118
		$donnees = null;
118
		if (file_exists($nomFichier) === true && preg_match('/e[0-9]{4}.htm$/', $nomFichier)) {
119
		if (file_exists($nomFichier) === true && preg_match('/e[0-9]{4}.htm$/', $nomFichier)) {
119
			if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
120
			if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
120
				$donnees['ouvert'] = "oui";
121
				$donnees['ouvert'] = "oui";
121
				$i = 1;
122
				$i = 1;
122
				while ($ligne = fgets($fichierOuvert)) {
123
				while ($ligne = fgets($fichierOuvert)) {
123
					if ($i == 24) {
124
					if ($i == 24) {
124
						$donnees['tag'] = $this->traiterHtml($ligne);
125
						$donnees['tag'] = $this->traiterHtml($ligne);
125
					} elseif ($i == 45) {
126
					} elseif ($i == 45) {
126
						$donnees['texte'] = $this->traiterHtml($ligne, $au = true);
127
						$donnees['texte'] = $this->traiterHtml($ligne, $au = true);
127
						$this->donnees['texte'] = $this->traiterHtml($ligne);
128
						$this->donnees['texte'] = $this->traiterHtml($ligne);
128
					} elseif ($i == 46 || $i == 47) {
129
					} elseif ($i == 46 || $i == 47) {
129
						$donnees['texte'] .= $this->traiterHtml($ligne);
130
						$donnees['texte'] .= $this->traiterHtml($ligne);
130
					} elseif ($i == 63 || preg_match('/Bdnff /ui', $ligne)) {
131
					} elseif ($i == 63 || preg_match('/Bdnff /ui', $ligne)) {
131
						$donnees['correspondance'] = $this->traiterHtml($ligne);
132
						$donnees['correspondance'] = $this->traiterHtml($ligne);
132
					}
133
					}
133
					$i++;
134
					$i++;
134
				}
135
				}
135
				fclose($fichierOuvert);
136
				fclose($fichierOuvert);
136
			} else {
137
			} else {
137
				$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert.");
138
				$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert.");
138
			}
139
			}
139
		} else {
140
		} else {
140
			$this->traiterErreur("Le fichier $nomFichier est introuvable.");
141
			$this->traiterErreur("Le fichier $nomFichier est introuvable.");
141
		}
142
		}
142
		return $donnees;
143
		return $donnees;
143
	}
144
	}
144
 
145
 
145
 
146
 
146
	private function traiterHtml($donnees, $au = null) {
147
	private function traiterHtml($donnees, $au = null) {
147
		$donnees_traitees = strip_tags($donnees,'<B>,<I>');
148
		$donnees_traitees = strip_tags($donnees,'<B>,<I>');
148
		$donnees_traitees = html_entity_decode($donnees_traitees, ENT_NOQUOTES, 'UTF-8');
149
		$donnees_traitees = html_entity_decode($donnees_traitees, ENT_NOQUOTES, 'UTF-8');
149
		$donnees_traitees = str_replace('<B>', '**', $donnees_traitees);
150
		$donnees_traitees = str_replace('<B>', '**', $donnees_traitees);
150
		$donnees_traitees = str_replace('</B>', '**', $donnees_traitees);
151
		$donnees_traitees = str_replace('</B>', '**', $donnees_traitees);
151
		$donnees_traitees = str_replace('<I>', '//', $donnees_traitees);
152
		$donnees_traitees = str_replace('<I>', '//', $donnees_traitees);
152
		$donnees_traitees = str_replace('</I>', '//', $donnees_traitees);
153
		$donnees_traitees = str_replace('</I>', '//', $donnees_traitees);
153
		$donnees_traitees = trim($donnees_traitees);
154
		$donnees_traitees = trim($donnees_traitees);
154
		if ($au) {
155
		if ($au) {
155
			$donnees_traitees = str_replace('&#173;', '', $donnees_traitees);
156
			$donnees_traitees = str_replace('&#173;', '', $donnees_traitees);
156
		}
157
		}
157
		return $donnees_traitees;
158
		return $donnees_traitees;
158
	}
159
	}
159
 
160
 
160
 
161
 
161
	private function creerNomPage($tag) {
162
	private function creerNomPage($tag) {
162
	 	$partiesTag = explode(' - ', $tag);
163
	 	$partiesTag = explode(' - ', $tag);
163
		preg_match('/(C.*)/', $tag, $titre);
164
		preg_match('/(C.*)/', $tag, $titre);
164
		$donnees['titre'] = $titre[0];
165
		$donnees['titre'] = $titre[0];
165
 
166
 
166
		list($num, $donnees['id']) = explode(' ', trim($partiesTag[0]));
167
		list($num, $donnees['id']) = explode(' ', trim($partiesTag[0]));
167
		list($num, $donnees['num_nom_coste'] )	=  explode(' ', trim($partiesTag[0]));
168
		list($num, $donnees['num_nom_coste'] )	=  explode(' ', trim($partiesTag[0]));
168
 		$donnees['nom_sci'] = trim($partiesTag[1]);
169
 		$donnees['nom_sci'] = trim($partiesTag[1]);
169
		$partiesNomSci = explode(' ', $donnees['nom_sci']);
170
		$partiesNomSci = explode(' ', $donnees['nom_sci']);
170
 
171
 
171
		list($numFamille, $donnees['famille']) = explode(', ', trim($partiesTag[2]));
172
		list($numFamille, $donnees['famille']) = explode(', ', trim($partiesTag[2]));
172
		list($num, $tomePage) = explode(',', trim($partiesTag[3]));
173
		list($num, $tomePage) = explode(',', trim($partiesTag[3]));
173
 
174
 
174
	 	if (preg_match('/T(\d*)\.p(\d*)/', $tomePage, $match)){
175
	 	if (preg_match('/T(\d*)\.p(\d*)/', $tomePage, $match)){
175
  			$donnees['tome'] = $match[1];
176
  			$donnees['tome'] = $match[1];
176
	 		$donnees['page'] = sprintf("%04d",$match[2]);
177
	 		$donnees['page'] = sprintf("%04d",$match[2]);
177
	 	}
178
	 	}
178
	 	$donnees['nomPage'] = 'DscCoste1937T'.$donnees['tome'].'P'.$donnees['page'].implode(array_map('ucfirst',$partiesNomSci));
179
	 	$donnees['nomPage'] = 'DscCoste1937T'.$donnees['tome'].'P'.$donnees['page'].implode(array_map('ucfirst',$partiesNomSci));
179
		if ($donnees['nomPage'] == 'DscCoste1937TP') echo 'MERDE!!!!!!!!!!!! à la page '.$this->fichier;
180
		if ($donnees['nomPage'] == 'DscCoste1937TP') echo 'MERDE!!!!!!!!!!!! à la page '.$this->fichier;
180
	 	$partieNumTaxSupFamille = explode(',', $partiesTag[2]);
181
	 	$partieNumTaxSupFamille = explode(',', $partiesTag[2]);
181
	 	$partieNumTaxSupGenre = explode(',', $partiesTag[3]);
182
	 	$partieNumTaxSupGenre = explode(',', $partiesTag[3]);
182
		$donnees['num_tax_sup_genre'] = trim($partieNumTaxSupGenre[0]);
183
		$donnees['num_tax_sup_genre'] = trim($partieNumTaxSupGenre[0]);
183
		//on recupère les auteurs, synonymes et nom_vernaculaires
184
		//on recupère les auteurs, synonymes et nom_vernaculaires
184
		$this->recupererInfosComplementaires($donnees);
185
		$this->recupererInfosComplementaires($donnees);
185
		return $donnees;
186
		return $donnees;
186
	}
187
	}
187
 
188
 
188
 
189
 
189
	private function recupererInfosComplementaires(&$donnees) {
190
	private function recupererInfosComplementaires(&$donnees) {
190
	 	$this->donnees['texte'] = str_replace('­', '', $this->donnees['texte']); //on enlève un petit tiret présent entre la plupart des mots (non visible ici)
191
	 	$this->donnees['texte'] = str_replace('­', '', $this->donnees['texte']); //on enlève un petit tiret présent entre la plupart des mots (non visible ici)
191
		preg_match('/^ {0,1}[*]{2}([^*]+)[*]{2} ([^–(\/]+\.?)?\s*(?:[(]([^)]+)[)])?[ –.]*(?:[\/]{2}([^\/]+)\s*–\s*[\/]{2})?/', $this->donnees['texte'], $match2);
192
		preg_match('/^ {0,1}[*]{2}([^*]+)[*]{2} ([^–(\/]+\.?)?\s*(?:[(]([^)]+)[)])?[ –.]*(?:[\/]{2}([^\/]+)\s*–\s*[\/]{2})?/', $this->donnees['texte'], $match2);
192
 
193
 
193
		$annee = '';
194
		$annee = '';
194
		if ($match2 == array()) echo "donnees du fichier : $this->fichier";
195
		if ($match2 == array()) echo "donnees du fichier : $this->fichier";
195
		if (isset($match2[1]) && strrpos($match2[1], ' subsp. ') !== false) {
196
		if (isset($match2[1]) && strrpos($match2[1], ' subsp. ') !== false) {
196
			$donnees['nom_sci'] = preg_replace(array('/ All./', '/ L./','/^\s*[0-9]{4}[ –.]*/'), '', $match2[1]);
197
			$donnees['nom_sci'] = preg_replace(array('/ All./', '/ L./','/^\s*[0-9]{4}[ –.]*/'), '', $match2[1]);
197
		}
198
		}
198
		$auteur = (isset($match2[2])) ? $match2[2] : '';
199
		$auteur = (isset($match2[2])) ? $match2[2] : '';
199
		$synonyme = (isset($match2[3])) ? $match2[3] : '';
200
		$synonyme = (isset($match2[3])) ? $match2[3] : '';
200
		$nom_verna = (isset($match2[4])) ? $match2[4] : '';
201
		$nom_verna = (isset($match2[4])) ? $match2[4] : '';
201
		if (preg_match('/^\s*[1-9]{4}\s*$/', $synonyme)) {
202
		if (preg_match('/^\s*[1-9]{4}\s*$/', $synonyme)) {
202
			$annee = $synonyme;
203
			$annee = $synonyme;
203
			$synonyme = '';
204
			$synonyme = '';
204
		} elseif (preg_match('/.*?([0-9]{4})/', $auteur, $annee_match) && !preg_match('/ in /', $annee_match[1])) {
205
		} elseif (preg_match('/.*?([0-9]{4})/', $auteur, $annee_match) && !preg_match('/ in /', $annee_match[1])) {
205
			$annee = $annee_match[1];
206
			$annee = $annee_match[1];
206
			$auteur = preg_replace('/ [0-9]{4}/', '', $auteur);
207
			$auteur = preg_replace('/ [0-9]{4}/', '', $auteur);
207
		}
208
		}
208
		$donnees['annee'] = $annee;
209
		$donnees['annee'] = $annee;
209
		$donnees['auteur'] = $auteur;
210
		$donnees['auteur'] = $auteur;
210
		$donnees['synonyme'] = $synonyme;
211
		$donnees['synonyme'] = $synonyme;
211
		$donnees['nom_vernaculaire'] = $nom_verna;
212
		$donnees['nom_vernaculaire'] = $nom_verna;
212
		$this->insererDansTableEspece($donnees);
213
		$this->insererDansTableEspece($donnees);
213
	}
214
	}
214
 
215
 
215
 
216
 
216
	private function insererDansTableEspece($donnees) {
217
	private function insererDansTableEspece($donnees) {
217
		$this->table_espece[$donnees['num_nom_coste']] = array(
218
		$this->table_espece[$donnees['num_nom_coste']] = array(
218
														'tag' => $donnees['nomPage'],
219
														'tag' => $donnees['nomPage'],
219
														'num_nom_retenu_coste' => $donnees['num_nom_coste'],
220
														'num_nom_retenu_coste' => $donnees['num_nom_coste'],
220
														'num_nom_coste' => $donnees['num_nom_coste'],
221
														'num_nom_coste' => $donnees['num_nom_coste'],
221
														'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],
222
														'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],
222
														'rang' => 290,
223
														'rang' => 290,
223
														'nom_sci' => $donnees['nom_sci'],
224
														'nom_sci' => $donnees['nom_sci'],
224
														'auteur' => $donnees['auteur'],
225
														'auteur' => $donnees['auteur'],
225
														'nom_vernaculaire' => $donnees['nom_vernaculaire'],
226
														'nom_vernaculaire' => $donnees['nom_vernaculaire'],
226
														'nom_coste' => $donnees['nom_sci'],
227
														'nom_coste' => $donnees['nom_sci'],
227
														'tome' => $donnees['tome'],
228
														'tome' => $donnees['tome'],
228
														'annee' => $donnees['annee'],
229
														'annee' => $donnees['annee'],
229
														'synonyme' => $donnees['synonyme']);
230
														'synonyme' => $donnees['synonyme']);
230
	}
231
	}
231
 
232
 
232
 
233
 
233
	private function creerCorrespondance($correspondance) {
234
	private function creerCorrespondance($correspondance) {
234
		$parties = explode('-', $correspondance);
235
		$parties = explode('-', $correspondance);
235
		if (isset($parties[1])) {
236
		if (isset($parties[1])) {
236
			list($num, $donnees['num_nom']) = explode(' ', trim($parties[0]));
237
			list($num, $donnees['num_nom']) = explode(' ', trim($parties[0]));
237
			$donnees['nom_sci'] = trim($parties[1]);
238
			$donnees['nom_sci'] = trim($parties[1]);
238
			$donnees['famille'] = trim($parties[2]);
239
			$donnees['famille'] = trim($parties[2]);
239
			list($num, $num_tax) = explode('=', trim($parties[3]));
240
			list($num, $num_tax) = explode('=', trim($parties[3]));
240
			$donnees['num_tax'] = ($num_tax == "") ? 'NULL' : $num_tax;
241
			$donnees['num_tax'] = ($num_tax == "") ? 'NULL' : $num_tax;
241
		} else {
242
		} else {
242
			$donnees['num_nom'] = 'NULL';
243
			$donnees['num_nom'] = 'NULL';
243
			$donnees['nom_sci'] = 'NULL';
244
			$donnees['nom_sci'] = 'NULL';
244
			$donnees['famille'] = 'NULL';
245
			$donnees['famille'] = 'NULL';
245
			$donnees['num_tax'] = 'NULL';
246
			$donnees['num_tax'] = 'NULL';
246
		}
247
		}
247
		return $donnees;
248
		return $donnees;
248
	}
249
	}
249
 
250
 
250
//---------------------------------------FONCTION DE CREATION DE LA TABLE COSTE------------------------------------------
251
//---------------------------------------FONCTION DE CREATION DE LA TABLE COSTE------------------------------------------
251
 
252
 
252
	private function chargerIndexGpFG() {
253
	private function chargerIndexGpFG() {
253
		$requete = 	'SELECT * FROM coste_index_general ';
254
		$requete = 	'SELECT * FROM coste_index_general ';
254
		$resultat = $this->bdd->recupererTous($requete);
255
		$resultat = $this->bdd->recupererTous($requete);
255
		foreach ($resultat as $nom) {
256
		foreach ($resultat as $nom) {
256
			$nom_coste = ($nom['nom_coste'] == '') ? $this->transliterer($nom['nom_sci']) : $this->transliterer($nom['nom_coste']);
257
			$nom_coste = ($nom['nom_coste'] == '') ? $this->transliterer($nom['nom_sci']) : $this->transliterer($nom['nom_coste']);
257
			$nom_sci = $this->transliterer($nom['nom_sci']);
258
			$nom_sci = $this->transliterer($nom['nom_sci']);
258
			$tome = $nom['tome'];
259
			$tome = $nom['tome'];
259
			$page = $nom['page'];
260
			$page = $nom['page'];
260
			$num_tax_sup_coste = $nom['num_tax_sup_coste'];
261
			$num_tax_sup_coste = $nom['num_tax_sup_coste'];
261
			$num_nom_coste = $nom['num_nom_coste'];
262
			$num_nom_coste = $nom['num_nom_coste'];
262
			$rang = $nom['rang'];
263
			$rang = $nom['rang'];
263
			$this->indexGpFG[$num_nom_coste] = array('nom_sci' => $nom_sci,
264
			$this->indexGpFG[$num_nom_coste] = array('nom_sci' => $nom_sci,
264
													'rang' => $rang,
265
													'rang' => $rang,
265
													'nom_coste' => $nom_coste,
266
													'nom_coste' => $nom_coste,
266
													'num_nom_coste' => $num_nom_coste,
267
													'num_nom_coste' => $num_nom_coste,
267
													'num_tax_sup_coste' => $num_tax_sup_coste,
268
													'num_tax_sup_coste' => $num_tax_sup_coste,
268
													'tome' => $tome,
269
													'tome' => $tome,
269
													'page' => $page);
270
													'page' => $page);
270
		}
271
		}
271
	}
272
	}
272
 
273
 
273
 
274
 
274
	private function transliterer($txt) {
275
	private function transliterer($txt) {
275
		$txt = ucwords(strtolower(Chaine::supprimerAccents($txt)));
276
		$txt = ucwords(strtolower(Chaine::supprimerAccents($txt)));
276
		return trim($txt);
277
		return trim($txt);
277
	}
278
	}
278
 
279
 
279
 
280
 
280
	private function integrerSynonyme() {
281
	private function integrerSynonyme() {
281
		foreach ($this->table_espece as $num_nom_coste => $donnees) {
282
		foreach ($this->table_espece as $num_nom_coste => $donnees) {
282
			$et = false; //cas où on a "syno et syno L."
283
			$et = false; //cas où on a "syno et syno L."
283
			$auteur = '';
284
			$auteur = '';
284
			$genre_syn = '';
285
			$genre_syn = '';
285
			if ($donnees['synonyme'] != '') {
286
			if ($donnees['synonyme'] != '') {
286
				$donnees['synonyme'] = preg_replace(array('/^t\s{1}/','/^et\s{1}/', '/^avec /', '/, etc\.$/', '/\//', '/­/'), '', $donnees['synonyme']);
287
				$donnees['synonyme'] = preg_replace(array('/^t\s{1}/','/^et\s{1}/', '/^avec /', '/, etc\.$/', '/\//', '/­/'), '', $donnees['synonyme']);
287
				if (strrpos($donnees['synonyme'], ';') === false
288
				if (strrpos($donnees['synonyme'], ';') === false
288
				&& preg_match('/^[A-Z][^ ]+ [^ ]+(?: ([^,;]+))?\s*[.]?(et|,)[ ]?[A-Z]{1}[^ on,]+ [^., ]+[ ]+(?:.*)?$/', $donnees['synonyme'], $ponctu)) {
289
				&& preg_match('/^[A-Z][^ ]+ [^ ]+(?: ([^,;]+))?\s*[.]?(et|,)[ ]?[A-Z]{1}[^ on,]+ [^., ]+[ ]+(?:.*)?$/', $donnees['synonyme'], $ponctu)) {
289
					if ($ponctu[2] == 'et') {
290
					if ($ponctu[2] == 'et') {
290
						$synonymes = array_reverse(explode($ponctu[2], $donnees['synonyme']));
291
						$synonymes = array_reverse(explode($ponctu[2], $donnees['synonyme']));
291
						$et = true;
292
						$et = true;
292
					} else {
293
					} else {
293
						$synonymes = explode($ponctu[2], $donnees['synonyme']);
294
						$synonymes = explode($ponctu[2], $donnees['synonyme']);
294
					}
295
					}
295
				} else {
296
				} else {
296
					$synonymes = explode(';', $donnees['synonyme']);
297
					$synonymes = explode(';', $donnees['synonyme']);
297
				}
298
				}
298
				$num_syn = 0; //on numerote les synonyme avec comme num_nom_coste : num_nom_coste du retenu + ".1", ".2" , ...
299
				$num_syn = 0; //on numerote les synonyme avec comme num_nom_coste : num_nom_coste du retenu + ".1", ".2" , ...
299
				foreach ($synonymes as $nom_syn) {
300
				foreach ($synonymes as $nom_syn) {
300
					$annee = '';
301
					$annee = '';
301
					$notes = $this->recupererLesNotesDesSynonymes($nom_syn);
302
					$notes = $this->recupererLesNotesDesSynonymes($nom_syn);
302
					$this->recupererAnneeSynonyme($nom_syn, $annee);
303
					$this->recupererAnneeSynonyme($nom_syn, $annee);
303
					if (preg_match('/^\s*([^ ]*) ([^ ]*)( (?:VAR\.|v\.) [^ ]+)?(?: (.*))?$/', $nom_syn, $match)) {
304
					if (preg_match('/^\s*([^ ]*) ([^ ]*)( (?:VAR\.|v\.) [^ ]+)?(?: (.*))?$/', $nom_syn, $match)) {
304
						$num_syn++;
305
						$num_syn++;
305
						$nom_sci = $this->recupererNomSciComplet($match, $donnees, $num_syn, $genre_syn);
306
						$nom_sci = $this->recupererNomSciComplet($match, $donnees, $num_syn, $genre_syn);
306
						$auteur_syn = $this->recupererAuteurSyn($match, $auteur, $et);
307
						$auteur_syn = $this->recupererAuteurSyn($match, $auteur, $et);
307
						$this->ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn);
308
						$this->ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn);
308
					} else {
309
					} else {
309
						$this->traiterErreur('Synonyme '.$nom_syn.' non reconnu par l\'expression régulière ');
310
						$this->traiterErreur('Synonyme '.$nom_syn.' non reconnu par l\'expression régulière ');
310
					}
311
					}
311
				}
312
				}
312
			}
313
			}
313
		}
314
		}
314
	}
315
	}
315
 
316
 
316
 
317
 
317
	private function recupererNomSciComplet(&$match, &$donnees, &$num_syn, &$genre_syn) {
318
	private function recupererNomSciComplet(&$match, &$donnees, &$num_syn, &$genre_syn) {
318
		//on récupère le nom complet du genre dans les cas ou le genre est noté : A.
319
		//on récupère le nom complet du genre dans les cas ou le genre est noté : A.
319
		//Attention à l'ex suivant : D. THUILLIERI G. G. ; AIRA SETACEA Huds.; A. DISCOLOR Thuil.; A. ULIGINOSA Weihe
320
		//Attention à l'ex suivant : D. THUILLIERI G. G. ; AIRA SETACEA Huds.; A. DISCOLOR Thuil.; A. ULIGINOSA Weihe
320
		if ($num_syn == 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
321
		if ($num_syn == 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
321
			preg_match('/\s*([^ ]+) .+$/', $donnees['nom_sci'], $nom_genre);
322
			preg_match('/\s*([^ ]+) .+$/', $donnees['nom_sci'], $nom_genre);
322
			$match[1] = $nom_genre[1];
323
			$match[1] = $nom_genre[1];
323
			$genre_syn = $nom_genre[1];
324
			$genre_syn = $nom_genre[1];
324
		} elseif (!preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
325
		} elseif (!preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
325
			$genre_syn = $match[1];
326
			$genre_syn = $match[1];
326
		} elseif ($num_syn != 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
327
		} elseif ($num_syn != 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {
327
			$match[1] = $genre_syn;
328
			$match[1] = $genre_syn;
328
		}
329
		}
329
		if (isset($match[3])) {
330
		if (isset($match[3])) {
330
			$nom_sci = ucfirst(strtolower($match[1].' '.$match[2].str_replace('v. ', 'var. ', $match[3])));
331
			$nom_sci = ucfirst(strtolower($match[1].' '.$match[2].str_replace('v. ', 'var. ', $match[3])));
331
		} else {
332
		} else {
332
			$nom_sci = ucfirst(strtolower($match[1].' '.$match[2]));
333
			$nom_sci = ucfirst(strtolower($match[1].' '.$match[2]));
333
		}
334
		}
334
		return $nom_sci;
335
		return $nom_sci;
335
	}
336
	}
336
 
337
 
337
 
338
 
338
	private function recupererAnneeSynonyme(&$nom_syn, &$annee) {
339
	private function recupererAnneeSynonyme(&$nom_syn, &$annee) {
339
		if (preg_match('/ ([0-9]{4})\s*/', $nom_syn, $annee_match)) {
340
		if (preg_match('/ ([0-9]{4})\s*/', $nom_syn, $annee_match)) {
340
			$annee = $annee_match[1];
341
			$annee = $annee_match[1];
341
		}
342
		}
342
	}
343
	}
343
 
344
 
344
 
345
 
345
	private function recupererAuteurSyn(&$match, &$auteur, &$et) {
346
	private function recupererAuteurSyn(&$match, &$auteur, &$et) {
346
		//on recupere l'auteur ds une variable ds le cas ou : R. machin et R. truc auteur.
347
		//on recupere l'auteur ds une variable ds le cas ou : R. machin et R. truc auteur.
347
		if (isset($match[4]) && $match[4] != '' && $et) {
348
		if (isset($match[4]) && $match[4] != '' && $et) {
348
			$auteur = $match[4];
349
			$auteur = $match[4];
349
		}
350
		}
350
		$auteur_syn = $auteur;
351
		$auteur_syn = $auteur;
351
		if (isset($match[3]) && !$et) {
352
		if (isset($match[3]) && !$et) {
352
			$auteur_syn = preg_replace('/ [0-9]{4}/', '', $match[4]);
353
			$auteur_syn = preg_replace('/ [0-9]{4}/', '', $match[4]);
353
		} elseif ($auteur != '' && $et) {
354
		} elseif ($auteur != '' && $et) {
354
			$auteur_syn = preg_replace('/ [0-9]{4}/', '', $auteur);
355
			$auteur_syn = preg_replace('/ [0-9]{4}/', '', $auteur);
355
		}
356
		}
356
		return $auteur_syn;
357
		return $auteur_syn;
357
	}
358
	}
358
 
359
 
359
	public function recupererLesNotesDesSynonymes(&$nom_syn) {
360
	public function recupererLesNotesDesSynonymes(&$nom_syn) {
360
		// on recupère les notes
361
		// on recupère les notes
361
		if (preg_match('/^(ompr.|incl.) (.*)/i', $nom_syn, $note_abbr)) {
362
		if (preg_match('/^(ompr.|incl.) (.*)/i', $nom_syn, $note_abbr)) {
362
			$notes = ($note_abbr[1] == 'ompr.') ? 'compr.' : 'incl.';
363
			$notes = ($note_abbr[1] == 'ompr.') ? 'compr.' : 'incl.';
363
			$nom_syn = $note_abbr[2];
364
			$nom_syn = $note_abbr[2];
364
		} else {
365
		} else {
365
			$notes = '';
366
			$notes = '';
366
		}
367
		}
367
		return $notes;
368
		return $notes;
368
	}
369
	}
369
 
370
 
370
	public function ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn) {
371
	public function ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn) {
371
		$num_nom_coste_syn = $donnees['num_nom_coste'].'.'.$num_syn;
372
		$num_nom_coste_syn = $donnees['num_nom_coste'].'.'.$num_syn;
372
		$this->table_espece[$num_nom_coste_syn] = array(
373
		$this->table_espece[$num_nom_coste_syn] = array(
373
												'num_nom_coste' => $donnees['num_nom_coste'].'.'.$num_syn,
374
												'num_nom_coste' => $donnees['num_nom_coste'].'.'.$num_syn,
374
												'num_nom_retenu_coste' => $donnees['num_nom_coste'],
375
												'num_nom_retenu_coste' => $donnees['num_nom_coste'],
375
												'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],
376
												'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],
376
												'rang' => 290,
377
												'rang' => 290,
377
												'nom_sci' => $nom_sci,
378
												'nom_sci' => $nom_sci,
378
												'auteur' => $auteur_syn,
379
												'auteur' => $auteur_syn,
379
												'nom_vernaculaire' => '',
380
												'nom_vernaculaire' => '',
380
												'nom_coste' => $nom_sci,
381
												'nom_coste' => $nom_sci,
381
												'tome' => $donnees['tome'],
382
												'tome' => $donnees['tome'],
382
												'annee' => $annee,
383
												'annee' => $annee,
383
												'flore_bdnff_num' => '',
384
												'flore_bdnff_num' => '',
384
												'flore_bdnff_nom_sci' => '',
385
												'flore_bdnff_nom_sci' => '',
385
												'notes' => $notes);
386
												'notes' => $notes);
386
	}
387
	}
387
 
388
 
388
	private function recupererDonneesBdnff() {
389
	private function recupererDonneesBdnff() {
389
		$req = "SELECT * FROM coste_correspondance_bdnff";
390
		$req = "SELECT * FROM coste_correspondance_bdnff";
390
		$res = $this->bdd->recupererTous($req);
391
		$res = $this->bdd->recupererTous($req);
391
		$total = 0;
392
		$total = 0;
392
		if ($res) {
393
		if ($res) {
393
			foreach ($res as $espece_bdnff) {
394
			foreach ($res as $espece_bdnff) {
394
				$num_nom_coste = $espece_bdnff['id'];
395
				$num_nom_coste = $espece_bdnff['id'];
395
				if (isset($this->table_espece[$num_nom_coste])) {
396
				if (isset($this->table_espece[$num_nom_coste])) {
396
					$this->table_espece[$num_nom_coste]['flore_bdnff_num'] = $espece_bdnff['num_nom'];
397
					$this->table_espece[$num_nom_coste]['flore_bdnff_num'] = $espece_bdnff['num_nom'];
397
					$this->table_espece[$num_nom_coste]['flore_bdnff_num_tax'] = $espece_bdnff['num_tax'];
398
					$this->table_espece[$num_nom_coste]['flore_bdnff_num_tax'] = $espece_bdnff['num_tax'];
398
					$this->table_espece[$num_nom_coste]['flore_bdnff_nom_sci'] = $espece_bdnff['nom_sci'];
399
					$this->table_espece[$num_nom_coste]['flore_bdnff_nom_sci'] = $espece_bdnff['nom_sci'];
399
					$total++;
400
					$total++;
400
				} else {
401
				} else {
401
					$e = "Le num_nom_coste $num_nom_coste de la table de correspondance bdnff n'exsite pas dans la table donneesEspece ";
402
					$e = "Le num_nom_coste $num_nom_coste de la table de correspondance bdnff n'exsite pas dans la table donneesEspece ";
402
					$this->traiterErreur($e);
403
					$this->traiterErreur($e);
403
				}
404
				}
404
			}
405
			}
405
		} else {
406
		} else {
406
			$this->traiterErreur('recupererDonneesBdnff() : mauvaise requete');
407
			$this->traiterErreur('recupererDonneesBdnff() : mauvaise requete');
407
		}
408
		}
408
		if ($total != 0) {
409
		if ($total != 0) {
409
			$this->traiterInfo('Donnees de la bdnff recuperées pour les especes. Total bdnff = '.$total.'\n');
410
			$this->traiterInfo('Donnees de la bdnff recuperées pour les especes. Total bdnff = '.$total.'\n');
410
		}
411
		}
411
	}
412
	}
412
 
413
 
413
 
414
 
414
	private function genererNumNom() {
415
	private function genererNumNom() {
415
		$this->table_num_nom = array();
416
		$this->table_num_nom = array();
416
		$num_nom = 1;
417
		$num_nom = 1;
417
		foreach($this->indexGpFG as $donneesCle) {
418
		foreach($this->indexGpFG as $donneesCle) {
418
			$this->table_num_nom[$num_nom] = $donneesCle['num_nom_coste'];
419
			$this->table_num_nom[$num_nom] = $donneesCle['num_nom_coste'];
419
			$this->indexGpFG[$donneesCle['num_nom_coste']]['num_nom'] = $num_nom;
420
			$this->indexGpFG[$donneesCle['num_nom_coste']]['num_nom'] = $num_nom;
420
			$num_nom++;
421
			$num_nom++;
421
			if (preg_match('/^G[0-9]+/',$donneesCle['num_nom_coste'])) {
422
			if (preg_match('/^G[0-9]+/',$donneesCle['num_nom_coste'])) {
422
				foreach ($this->table_espece as $donneesEspece) {
423
				foreach ($this->table_espece as $donneesEspece) {
423
					if ($donneesEspece['num_tax_sup_genre'] == $donneesCle['num_nom_coste']) {
424
					if ($donneesEspece['num_tax_sup_genre'] == $donneesCle['num_nom_coste']) {
424
						$this->table_num_nom[$num_nom] = $donneesEspece['num_nom_coste'];
425
						$this->table_num_nom[$num_nom] = $donneesEspece['num_nom_coste'];
425
						$this->table_espece[$donneesEspece['num_nom_coste']]['num_nom'] = $num_nom;
426
						$this->table_espece[$donneesEspece['num_nom_coste']]['num_nom'] = $num_nom;
426
						$num_nom++;
427
						$num_nom++;
427
					}
428
					}
428
				}
429
				}
429
			}
430
			}
430
		}
431
		}
431
		if ($this->table_num_nom != array()) $this->traiterInfo('Num_nom generer. Total num_nom = '.count($this->table_num_nom));
432
		if ($this->table_num_nom != array()) $this->traiterInfo('Num_nom generer. Total num_nom = '.count($this->table_num_nom));
432
		else $this->traiterErreur( 'erreur dans la génération des num_nom\n');
433
		else $this->traiterErreur( 'erreur dans la génération des num_nom\n');
433
	}
434
	}
434
 
435
 
435
 
436
 
436
	private function insererNumNomDansTriples() {
437
	private function insererNumNomDansTriples() {
437
		$table_triples = array();
438
		$table_triples = array();
438
		foreach ($this->table_espece as $num_nom_coste => $donnees) {
439
		foreach ($this->table_espece as $num_nom_coste => $donnees) {
439
			if (isset($donnees['synonyme'])) {
440
			if (isset($donnees['synonyme'])) {
440
				$table_triples[] = array('resource' => $donnees['tag'], 'property' => 'num_nom', 'value' => $donnees['num_nom']);
441
				$table_triples[] = array('resource' => $donnees['tag'], 'property' => 'num_nom', 'value' => $donnees['num_nom']);
441
			}
442
			}
442
		}
443
		}
443
		$this->suppressionTriplesExistants();
444
		$this->suppressionTriplesExistants();
444
		$this->reinitialiserAutoIncrement('coste_triples');
445
		$this->reinitialiserAutoIncrement('coste_triples');
445
		//insertion des triples num_nom en une seule requete
446
		//insertion des triples num_nom en une seule requete
446
		foreach ($table_triples as $triple) {
447
		foreach ($table_triples as $triple) {
447
			$resource = $this->bdd->proteger($triple['resource']);
448
			$resource = $this->bdd->proteger($triple['resource']);
448
			$property = $this->bdd->proteger($triple['property']);
449
			$property = $this->bdd->proteger($triple['property']);
449
			$value = $this->bdd->proteger($triple['value']);
450
			$value = $this->bdd->proteger($triple['value']);
450
			$requete = "INSERT INTO coste_triples (resource, property, value) VALUES ($resource,$property ,$value)";
451
			$requete = "INSERT INTO coste_triples (resource, property, value) VALUES ($resource,$property ,$value)";
451
			$res = $this->bdd->requeter($requete);
452
			$res = $this->bdd->requeter($requete);
452
			if ($res) {
453
			if ($res) {
453
				$this->afficherAvancement('Insertion des triples existants');
454
				$this->afficherAvancement('Insertion des triples existants');
454
			} else {
455
			} else {
455
				$this->afficherAvancement('Erreur de insertion des triples existants');
456
				$this->afficherAvancement('Erreur de insertion des triples existants');
456
			}
457
			}
457
		}
458
		}
458
	}
459
	}
459
 
460
 
460
	private function suppressionTriplesExistants() {
461
	private function suppressionTriplesExistants() {
461
		$requete = 'DELETE FROM coste_triples '.
462
		$requete = 'DELETE FROM coste_triples '.
462
				'WHERE property = "num_nom"'.
463
				'WHERE property = "num_nom"'.
463
				'AND resource IN ("'.implode(array_keys($this->table_espece), '","').'")';
464
				'AND resource IN ("'.implode(array_keys($this->table_espece), '","').'")';
464
		$res = $this->bdd->requeter($requete);
465
		$res = $this->bdd->requeter($requete);
465
		if ($res == '') {
466
		if ($res == '') {
466
			$this->traiterErreur('Suppression des triples existants : aucun existant');
467
			$this->traiterErreur('Suppression des triples existants : aucun existant');
467
		} elseif ($res) {
468
		} elseif ($res) {
468
			$this->traiterInfo('Suppression des triples existants');
469
			$this->traiterInfo('Suppression des triples existants');
469
		} else {
470
		} else {
470
			$this->traiterErreur('Erreur de suppression des triples existants');
471
			$this->traiterErreur('Erreur de suppression des triples existants');
471
		}
472
		}
472
	}
473
	}
473
 
474
 
474
	private function creerTableCoste() {
475
	private function creerTableCoste() {
475
		$this->insererGpFG();
476
		$this->insererGpFG();
476
		$this->insererEspeces();
477
		$this->insererEspeces();
477
		ksort($this->table_projet);
478
		ksort($this->table_projet);
478
	}
479
	}
479
 
480
 
480
	private function insererGpFG() {
481
	private function insererGpFG() {
481
		$total = 0;
482
		$total = 0;
482
		foreach ($this->indexGpFG as $donneesGpFG) {
483
		foreach ($this->indexGpFG as $donneesGpFG) {
483
			$num_nom = $donneesGpFG['num_nom'];
484
			$num_nom = $donneesGpFG['num_nom'];
484
			$num_nom_retenu = $donneesGpFG['num_nom'];
485
			$num_nom_retenu = $donneesGpFG['num_nom'];
485
			$num_tax_sup = array_search($donneesGpFG['num_tax_sup_coste'], $this->table_num_nom);
486
			$num_tax_sup = array_search($donneesGpFG['num_tax_sup_coste'], $this->table_num_nom);
486
			$annee = '';
487
			$annee = '';
487
			$nom_sci = $donneesGpFG['nom_sci'];
488
			$nom_sci = $donneesGpFG['nom_sci'];
488
			$rang = $donneesGpFG['rang'];
489
			$rang = $donneesGpFG['rang'];
489
			$nom_coste = $donneesGpFG['nom_coste'];
490
			$nom_coste = $donneesGpFG['nom_coste'];
490
			$num_nom_coste = $donneesGpFG['num_nom_coste'];
491
			$num_nom_coste = $donneesGpFG['num_nom_coste'];
491
			$tome = $donneesGpFG['tome'];
492
			$tome = $donneesGpFG['tome'];
492
			$page = $donneesGpFG['page'];
493
			$page = $donneesGpFG['page'];
493
			$genre = '';
494
			$genre = '';
494
			$nom_supra_generique = '';
495
			$nom_supra_generique = '';
495
			if ($rang != '220') {
496
			if ($rang != '220') {
496
				$nom_supra_generique = $nom_sci;
497
				$nom_supra_generique = $nom_sci;
497
			} else {
498
			} else {
498
				$genre = $nom_sci;
499
				$genre = $nom_sci;
499
			}
500
			}
500
 
501
 
501
			$this->table_projet[$num_nom] = array(
502
			$this->table_projet[$num_nom] = array(
502
				'num_nom_retenu' => $num_nom_retenu,
503
				'num_nom_retenu' => $num_nom_retenu,
503
				'num_tax_sup' => $num_tax_sup,
504
				'num_tax_sup' => $num_tax_sup,
504
				'rang' => $rang,
505
				'rang' => $rang,
505
				'nom_sci' => $nom_sci,
506
				'nom_sci' => $nom_sci,
506
				'nom_supra_generique' => $nom_supra_generique,
507
				'nom_supra_generique' => $nom_supra_generique,
507
				'genre' => $genre,
508
				'genre' => $genre,
508
				'epithete_infra_generique' => '',
509
				'epithete_infra_generique' => '',
509
				'epithete_sp' => '',
510
				'epithete_sp' => '',
510
				'type_epithete' => '',
511
				'type_epithete' => '',
511
				'epithete_infra_sp' => '',
512
				'epithete_infra_sp' => '',
512
				'cultivar_groupe' => '',
513
				'cultivar_groupe' => '',
513
				'cultivar' => '',
514
				'cultivar' => '',
514
				'nom_commercial' => '',
515
				'nom_commercial' => '',
515
				'auteur' => '',
516
				'auteur' => '',
516
				'annee' => '',
517
				'annee' => '',
517
				'biblio_origine' => '',
518
				'biblio_origine' => '',
518
				'notes' => '',
519
				'notes' => '',
519
				'nom_adenddum' => '',
520
				'nom_adenddum' => '',
520
				'basionyme' => '',
521
				'basionyme' => '',
521
				'nom_francais' => '',
522
				'nom_francais' => '',
522
				'nom_coste' => $nom_coste,
523
				'nom_coste' => $nom_coste,
523
				'num_nom_coste' => $num_nom_coste,
524
				'num_nom_coste' => $num_nom_coste,
524
				'tome' => $tome,
525
				'tome' => $tome,
525
				'page' => $page,
526
				'page' => $page,
526
				'flore_bdnff_num' => '',
527
				'flore_bdnff_num' => '',
527
				'flore_bdnff_nom_sci' => '',
528
				'flore_bdnff_nom_sci' => '',
528
				'nom_sci_html' => ''
529
				'nom_sci_html' => ''
529
			);
530
			);
530
			$total++;
531
			$total++;
531
		}
532
		}
532
		$this->traiterInfo('Donnees ajoutées à la table pour les groupes, familles et genres. Total donnees = '.$total.'\n');
533
		$this->traiterInfo('Donnees ajoutées à la table pour les groupes, familles et genres. Total donnees = '.$total.'\n');
533
	}
534
	}
534
 
535
 
535
 
536
 
536
	private function insererEspeces() {
537
	private function insererEspeces() {
537
		$total = 0;
538
		$total = 0;
538
		foreach ($this->table_espece as $donnees) {
539
		foreach ($this->table_espece as $donnees) {
539
			$num_nom = $donnees['num_nom'];
540
			$num_nom = $donnees['num_nom'];
540
			if (isset($donnees['num_nom_retenu_coste'])) {
541
			if (isset($donnees['num_nom_retenu_coste'])) {
541
				$num_nom_retenu = array_search($donnees['num_nom_retenu_coste'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste
542
				$num_nom_retenu = array_search($donnees['num_nom_retenu_coste'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste
542
			} else {
543
			} else {
543
				$num_nom_retenu = $donnees['num_nom'];
544
				$num_nom_retenu = $donnees['num_nom'];
544
			}
545
			}
545
			$num_tax_sup = array_search($donnees['num_tax_sup_genre'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste
546
			$num_tax_sup = array_search($donnees['num_tax_sup_genre'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste
546
			$nom_sci = $donnees['nom_sci'];
547
			$nom_sci = $donnees['nom_sci'];
547
			$rang = $donnees['rang'];
548
			$rang = $donnees['rang'];
548
			$nom_coste = $donnees['nom_coste'];
549
			$nom_coste = $donnees['nom_coste'];
549
			$num_nom_coste = (preg_match('/^([0-9]+)(?:\.[0-9]{1})?$/', $donnees['num_nom_coste'], $match)) ? $match[1] : $donnees['num_nom_coste'];
550
			$num_nom_coste = (preg_match('/^([0-9]+)(?:\.[0-9]{1})?$/', $donnees['num_nom_coste'], $match)) ? $match[1] : $donnees['num_nom_coste'];
550
			$tome = $donnees['tome'];
551
			$tome = $donnees['tome'];
551
			$auteur = $donnees['auteur'];
552
			$auteur = $donnees['auteur'];
552
			$annee = $donnees['annee'];
553
			$annee = $donnees['annee'];
553
			//$synonyme = $donnees['synonyme'];
554
			//$synonyme = $donnees['synonyme'];
554
			$nom_verna = $donnees['nom_vernaculaire'];
555
			$nom_verna = $donnees['nom_vernaculaire'];
555
			$flore_bdnff_num = $donnees['flore_bdnff_num'];
556
			$flore_bdnff_num = $donnees['flore_bdnff_num'];
556
			$flore_bdnff_nom_sci = $donnees['flore_bdnff_nom_sci'];
557
			$flore_bdnff_nom_sci = $donnees['flore_bdnff_nom_sci'];
557
			$notes = (isset($donnees['notes'])) ? $donnees['notes'] : '';
558
			$notes = (isset($donnees['notes'])) ? $donnees['notes'] : '';
558
			$genre = '';
559
			$genre = '';
559
			$epithete_sp = '';
560
			$epithete_sp = '';
560
			$type_epithete = '';
561
			$type_epithete = '';
561
			$epithete_infra_sp = '';
562
			$epithete_infra_sp = '';
562
			$biblio_origine = '';
563
			$biblio_origine = '';
563
			if ($num_nom_coste == '1988') $auteur = 'Coste';
564
			if ($num_nom_coste == '1988') $auteur = 'Coste';
564
			$this->traiterTypeEpithete($type_epithete, $nom_sci, $genre, $epithete_sp, $epithete_infra_sp);
565
			$this->traiterTypeEpithete($type_epithete, $nom_sci, $genre, $epithete_sp, $epithete_infra_sp);
565
			$this->traiterRefBiblio($auteur, $biblio_origine, $num_nom_coste);
566
			$this->traiterRefBiblio($auteur, $biblio_origine, $num_nom_coste);
566
 
567
 
567
			$this->table_projet[$num_nom] = array(
568
			$this->table_projet[$num_nom] = array(
568
				'num_nom_retenu' => $num_nom_retenu,
569
				'num_nom_retenu' => $num_nom_retenu,
569
				'num_tax_sup' => $num_tax_sup,
570
				'num_tax_sup' => $num_tax_sup,
570
				'rang' => $rang,
571
				'rang' => $rang,
571
				'nom_sci' => $nom_sci,
572
				'nom_sci' => $nom_sci,
572
				'nom_supra_generique' => '',
573
				'nom_supra_generique' => '',
573
				'genre' => $genre,
574
				'genre' => $genre,
574
				'epithete_infra_generique' => '',
575
				'epithete_infra_generique' => '',
575
				'epithete_sp' => $epithete_sp,
576
				'epithete_sp' => $epithete_sp,
576
				'type_epithete' => $type_epithete,
577
				'type_epithete' => $type_epithete,
577
				'epithete_infra_sp' => $epithete_infra_sp,
578
				'epithete_infra_sp' => $epithete_infra_sp,
578
				'cultivar_groupe' => '',
579
				'cultivar_groupe' => '',
579
				'cultivar' => '',
580
				'cultivar' => '',
580
				'nom_commercial' => '',
581
				'nom_commercial' => '',
581
				'auteur' => $auteur,
582
				'auteur' => $auteur,
582
				'annee' => $annee,
583
				'annee' => $annee,
583
				'biblio_origine' => $biblio_origine,
584
				'biblio_origine' => $biblio_origine,
584
				'notes' => $notes,
585
				'notes' => $notes,
585
				'nom_adenddum' => '',
586
				'nom_adenddum' => '',
586
				'basionyme' => '',
587
				'basionyme' => '',
587
				'nom_francais' => $nom_verna,
588
				'nom_francais' => $nom_verna,
588
				'nom_coste' => $nom_coste,
589
				'nom_coste' => $nom_coste,
589
				'num_nom_coste' => $num_nom_coste,
590
				'num_nom_coste' => $num_nom_coste,
590
				'tome' => $tome,
591
				'tome' => $tome,
591
				'page' => null,
592
				'page' => null,
592
				'flore_bdnff_num' => $flore_bdnff_num,
593
				'flore_bdnff_num' => $flore_bdnff_num,
593
				'flore_bdnff_nom_sci' => $flore_bdnff_nom_sci,
594
				'flore_bdnff_nom_sci' => $flore_bdnff_nom_sci,
594
				'nom_sci_html' => ''
595
				'nom_sci_html' => ''
595
			);
596
			);
596
			$total++;
597
			$total++;
597
		}
598
		}
598
		$this->traiterInfo('Donnees ajoutées à la table pour les especes. Total donnees = '.$total.'\n');
599
		$this->traiterInfo('Donnees ajoutées à la table pour les especes. Total donnees = '.$total.'\n');
599
	}
600
	}
600
 
601
 
601
 
602
 
602
	private function traiterRefBiblio(&$auteur, &$biblio_origine, $num_nom_coste) {
603
	private function traiterRefBiblio(&$auteur, &$biblio_origine, $num_nom_coste) {
603
		if (preg_match('/^(.+)\s*(in .+)$/i', $auteur, $match)) {
604
		if (preg_match('/^(.+)\s*(in .+)$/i', $auteur, $match)) {
604
			if (isset($match[2]) && !empty($match[2]) && isset($match[1]) && !empty($match[1])) {
605
			if (isset($match[2]) && !empty($match[2]) && isset($match[1]) && !empty($match[1])) {
605
				$auteur = rtrim($match[1], ' ,');
606
				$auteur = rtrim($match[1], ' ,');
606
				$biblio_origine = $match[2];
607
				$biblio_origine = $match[2];
607
			}
608
			}
608
		} elseif (preg_match('/^[^,]+\s*,\s*(.+)$/', $auteur, $match2)) {
609
		} elseif (preg_match('/^[^,]+\s*,\s*(.+)$/', $auteur, $match2)) {
609
			if (!preg_match('/^\s*non /i', $match2[1]) && !preg_match('/\s*et /i', $match2[1])) {
610
			if (!preg_match('/^\s*non /i', $match2[1]) && !preg_match('/\s*et /i', $match2[1])) {
610
				if (isset($match2) && !empty($match2)) {
611
				if (isset($match2) && !empty($match2)) {
611
					//affichage pour vérfier qu"aucun n'a été oublié
612
					//affichage pour vérfier qu"aucun n'a été oublié
612
					//echo $num_nom_coste;
613
					//echo $num_nom_coste;
613
					//print_r($match2);
614
					//print_r($match2);
614
				}
615
				}
615
			}
616
			}
616
		} elseif (preg_match('/^(.+) (Sp[.].*)$/', $auteur, $match3)) {
617
		} elseif (preg_match('/^(.+) (Sp[.].*)$/', $auteur, $match3)) {
617
			if (isset($match3) && !empty($match3)) {
618
			if (isset($match3) && !empty($match3)) {
618
				$auteur = rtrim($match3[1], ', ');
619
				$auteur = rtrim($match3[1], ', ');
619
				$biblio_origine = $match3[2];
620
				$biblio_origine = $match3[2];
620
			}
621
			}
621
		}
622
		}
622
	}
623
	}
623
 
624
 
624
 
625
 
625
	private function traiterTypeEpithete(&$type_epithete, &$nom_sci, &$genre, &$epithete_sp, &$epithete_infra_sp) {
626
	private function traiterTypeEpithete(&$type_epithete, &$nom_sci, &$genre, &$epithete_sp, &$epithete_infra_sp) {
626
		if (preg_match('/^([^ ]+) ([^ ]+)(?: ([^ ]+\.) ([^ ]+))?$/', $nom_sci, $match)) {
627
		if (preg_match('/^([^ ]+) ([^ ]+)(?: ([^ ]+\.) ([^ ]+))?$/', $nom_sci, $match)) {
627
			$genre = $match[1];
628
			$genre = $match[1];
628
			$epithete_sp = $match[2];
629
			$epithete_sp = $match[2];
629
			if (isset($match[3])) {
630
			if (isset($match[3])) {
630
				$type_epithete = $match[3];
631
				$type_epithete = $match[3];
631
				//$this->traiterErreur('Nom : '.$nom_sci);
632
				//$this->traiterErreur('Nom : '.$nom_sci);
632
			}
633
			}
633
			if (isset($match[4])) $epithete_infra_sp = $match[4];
634
			if (isset($match[4])) $epithete_infra_sp = $match[4];
634
		} else {
635
		} else {
635
			$this->traiterErreur('Erreur pr récupérer la nomenclature pr le nom_sci : '.$nom_sci);
636
			$this->traiterErreur('Erreur pr récupérer la nomenclature pr le nom_sci : '.$nom_sci);
636
		}
637
		}
637
	}
638
	}
638
 
639
 
639
 
640
 
640
	private function insererTableProjetCoste() {
641
	private function insererTableProjetCoste() {
641
		$this->supprimerTableExistante();
642
		$this->supprimerTableExistante();
642
		$this->creerTableCosteSQL();
643
		$this->creerTableCosteSQL();
643
		$total = 0;
644
		$total = 0;
644
		foreach ($this->table_projet as $num_nom => $donnees) {
645
		foreach ($this->table_projet as $num_nom => $donnees) {
645
 
646
 
646
			foreach ($donnees as $key => $donn) {
647
			foreach ($donnees as $key => $donn) {
647
				if (!in_array($key, array('rang', 'annee', 'tome', 'page'))) {
648
				if (!in_array($key, array('rang', 'annee', 'tome', 'page'))) {
648
					if ($donn == 'NULL') $donn = '';
649
					if ($donn == 'NULL') $donn = '';
649
					$donnees_2[$key] = $this->bdd->proteger($donn);
650
					$donnees_2[$key] = $this->bdd->proteger($donn);
650
				} else {
651
				} else {
651
					if ($donn == '') $donn = 'null';
652
					if ($donn == '') $donn = 'null';
652
					$donnees_2[$key] = $donn;
653
					$donnees_2[$key] = $donn;
653
				}
654
				}
654
			}
655
			}
655
			$req = 'INSERT INTO coste_v0_2 VALUES ('.$num_nom.', '.implode(', ', $donnees_2).')';
656
			$req = 'INSERT INTO coste_v0_2 VALUES ('.$num_nom.', '.implode(', ', $donnees_2).')';
656
			$res = $this->bdd->requeter($req);
657
			$res = $this->bdd->requeter($req);
657
 
658
 
658
			if ($res) {
659
			if ($res) {
659
				$this->afficherAvancement('Insertion des noms dans Coste');
660
				$this->afficherAvancement('Insertion des noms dans Coste');
660
			} else {
661
			} else {
661
				$this->afficherAvancement('Erreur d\'insertion des noms dans coste');
662
				$this->afficherAvancement('Erreur d\'insertion des noms dans coste');
662
			}
663
			}
663
		}
664
		}
664
	}
665
	}
665
 
666
 
666
	private function supprimerTableExistante() {
667
	private function supprimerTableExistante() {
667
		$req = 'DROP TABLE coste_v0_2';
668
		$req = 'DROP TABLE coste_v0_2';
668
		$res = $this->bdd->requeter($req);
669
		$res = $this->bdd->requeter($req);
669
		if ($res) {
670
		if ($res) {
670
			$this->traiterInfo('La table coste a été supprimer');
671
			$this->traiterInfo('La table coste a été supprimer');
671
		}
672
		}
672
	}
673
	}
673
 
674
 
674
	private function creerTableCosteSQL() {
675
	private function creerTableCosteSQL() {
675
		$requete = 'CREATE TABLE IF NOT EXISTS coste_v0_2 (
676
		$requete = 'CREATE TABLE IF NOT EXISTS coste_v0_2 (
676
				num_nom int(9) NOT NULL DEFAULT 0,
677
				num_nom int(9) NOT NULL DEFAULT 0,
677
				num_nom_retenu varchar(9) DEFAULT NULL,
678
				num_nom_retenu varchar(9) DEFAULT NULL,
678
				num_tax_sup varchar(9) DEFAULT NULL,
679
				num_tax_sup varchar(9) DEFAULT NULL,
679
				rang int(3),
680
				rang int(3),
680
				nom_sci varchar(500) CHARACTER SET utf8 DEFAULT "",
681
				nom_sci varchar(500) CHARACTER SET utf8 DEFAULT "",
681
				nom_supra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",
682
				nom_supra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",
682
				genre varchar(500) CHARACTER SET utf8 DEFAULT "",
683
				genre varchar(500) CHARACTER SET utf8 DEFAULT "",
683
				epithete_infra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",
684
				epithete_infra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",
684
				epithete_sp varchar(500) CHARACTER SET utf8 DEFAULT "",
685
				epithete_sp varchar(500) CHARACTER SET utf8 DEFAULT "",
685
				type_epithete varchar(500) CHARACTER SET utf8 DEFAULT "",
686
				type_epithete varchar(500) CHARACTER SET utf8 DEFAULT "",
686
				epithete_infra_sp varchar(500) CHARACTER SET utf8 DEFAULT "",
687
				epithete_infra_sp varchar(500) CHARACTER SET utf8 DEFAULT "",
687
				cultivar_groupe varchar(500) CHARACTER SET utf8 DEFAULT "",
688
				cultivar_groupe varchar(500) CHARACTER SET utf8 DEFAULT "",
688
				cultivar varchar(500) CHARACTER SET utf8 DEFAULT "",
689
				cultivar varchar(500) CHARACTER SET utf8 DEFAULT "",
689
				nom_commercial varchar(500) CHARACTER SET utf8 DEFAULT "",
690
				nom_commercial varchar(500) CHARACTER SET utf8 DEFAULT "",
690
				auteur varchar(100) CHARACTER SET utf8 DEFAULT "",
691
				auteur varchar(100) CHARACTER SET utf8 DEFAULT "",
691
				annee int(4) DEFAULT NULL,
692
				annee int(4) DEFAULT NULL,
692
				biblio_origine varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
693
				biblio_origine varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
693
				notes varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
694
				notes varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
694
				nom_addendum varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
695
				nom_addendum varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",
695
				basionyme varchar(9) CHARACTER SET utf8 NOT NULL DEFAULT "",
696
				basionyme varchar(9) CHARACTER SET utf8 NOT NULL DEFAULT "",
696
				nom_francais text CHARACTER SET utf8 DEFAULT "",
697
				nom_francais text CHARACTER SET utf8 DEFAULT "",
697
				nom_coste varchar(500) CHARACTER SET utf8 DEFAULT "",
698
				nom_coste varchar(500) CHARACTER SET utf8 DEFAULT "",
698
				num_nom_coste varchar(9) CHARACTER SET utf8 DEFAULT "",
699
				num_nom_coste varchar(9) CHARACTER SET utf8 DEFAULT "",
699
				tome int(1) DEFAULT NULL,
700
				tome int(1) DEFAULT NULL,
700
				page int(4) DEFAULT NULL,
701
				page int(4) DEFAULT NULL,
701
				flore_bdnff_num varchar(9) DEFAULT NULL,
702
				flore_bdnff_num varchar(9) DEFAULT NULL,
702
				flore_bdnff_nom_sci varchar(500) CHARACTER SET utf8 DEFAULT NULL,
703
				flore_bdnff_nom_sci varchar(500) CHARACTER SET utf8 DEFAULT NULL,
703
				nom_sci_html varchar(500) CHARACTER SET utf8 DEFAULT NULL,
704
				nom_sci_html varchar(500) CHARACTER SET utf8 DEFAULT NULL,
704
				PRIMARY KEY (num_nom)
705
				PRIMARY KEY (num_nom)
705
				) ENGINE=MyISAM DEFAULT CHARSET=utf8';
706
				) ENGINE=MyISAM DEFAULT CHARSET=utf8';
706
		$res = $this->bdd->requeter($requete);
707
		$res = $this->bdd->requeter($requete);
707
		if ($res) {
708
		if ($res) {
708
			$this->traiterInfo('La table coste a été crée');
709
			$this->traiterInfo('La table coste a été crée');
709
		} else {
710
		} else {
710
			$this->traiterErreur('Probleme : la table coste n\'a pas été créée');
711
			$this->traiterErreur('Probleme : la table coste n\'a pas été créée');
711
		}
712
		}
712
	}
713
	}
713
 
714
 
714
 
715
 
715
	private function creerFichier($fichier, $tab, $chemin = null) {
716
	private function creerFichier($fichier, $tab, $chemin = null) {
716
		if (!$chemin) {
717
		if (!$chemin) {
717
			$chemin = Config::get('chemin_test');
718
			$chemin = Config::get('chemin_test');
718
		}
719
		}
719
		$intitule = '';
720
		$intitule = '';
720
		$nom_fichier = fopen($chemin.$fichier, 'w+');
721
		$nom_fichier = fopen($chemin.$fichier, 'w+');
721
		foreach ($tab as $key => $val) {
722
		foreach ($tab as $key => $val) {
722
			foreach ($val as $k => $v) {
723
			foreach ($val as $k => $v) {
723
				$intitule .= $k."\t";
724
				$intitule .= $k."\t";
724
			}
725
			}
725
			fwrite($nom_fichier, trim($intitule)."\n");
726
			fwrite($nom_fichier, trim($intitule)."\n");
726
			break;
727
			break;
727
		}
728
		}
728
		foreach ($tab as $key => $val) {
729
		foreach ($tab as $key => $val) {
729
			fwrite($nom_fichier, implode("\t", $val)."\n");
730
			fwrite($nom_fichier, implode("\t", $val)."\n");
730
		}
731
		}
731
		fclose($nom_fichier);
732
		fclose($nom_fichier);
732
	}
733
	}
733
 
734
 
734
 
735
 
735
}
736
}
736
?>
737
?>