Subversion Repositories eFlore/Projets.eflore-projets

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
11 jpm 1
<?php
2
/**
3
 * Exemple de lancement :
4
 * /opt/lampp/bin/php cli.php coste/cles -a parser -d /home/jpm/eflore/donnees/coste/cles/html -v 3
5
 * Classe analysant les clés de Coste en HTML.
6
 *
7
 * @category	php 5.2
8
 * @package		eflore/scripts/coste
9
 * @author		Jennifer DHÉ <jennifer@tela-botanica.org>
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @version		$Id$
15
 */
16
class Cles extends Script {
17
 
18
	private $bdd = null;
19
	private $fichier = null;
20
	private $ligneNumero = null;
21
	private $contenu = null;
22
	private $pages = array();
23
	private $stats = array('nbreDsc' => 0, 'nbreCle' => 0, 'nbreGenre' => 0, 'nbreFamille' => 0, 'nbreDscClasse' => 0, 'nbrCleClasse' => 0);
24
	protected $parametres_autorises = array(
25
		'-d' => array(false, null, 'nom du dossier à analyser'),
26
		'-f' => array(false, null, 'nom du fichier à analyser'));
27
 
28
	private $table_triples = array(); //permet de stocker
29
	private $famille = ''; //permet de stocker le nom de la famille surlaquelle on travaille
30
	protected $indexGpFG = array();
31
	protected $table_espece = array();
32
	protected $table_num_nom = array();
33
	protected $projet_coste = array();
34
	protected $nb_fichier = 0;
35
	protected $nb_pages = 0;
36
	protected $table_coste;
37
 
38
 
39
	public function initialiser() {
40
		$this->bdd = new Bdd();
41
	}
42
 
43
	public function executer() {
44
 
45
		$this->initialiser();
46
		$cmd = $this->getParametre('a');
47
	    switch ($cmd) {
48
			case 'tester' :
49
				$this->test();
50
				break;
51
			case 'parser' :
52
				$this->recupererTableCoste();
53
				$this->chargerIndexGpFG();
54
				$this->parserFichiers();
55
				break;
56
			default :
57
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
58
		}
59
    }
60
 
61
 
62
	private function test() {
63
		//on recupère les textes
64
		$this->fichier = $this->getParametre('f');
65
		$this->parserFichier();
66
		$fichier_test = str_replace('.html', '-test.html', $this->getParametre('f'));
67
		file_put_contents($fichier_test, $this->contenu);
68
 
69
 
70
 
71
	}
72
 
73
 
74
	private function parserFichiers() {
75
 
76
		$nomDossier = $this->getParametre('d');
77
		$tableaux = null;
78
		if (file_exists($nomDossier) === true) {
79
			if (is_dir($nomDossier)) {
80
				if ($dossierOuvert = opendir($nomDossier) ) {
81
					while ( ($nomFichier = readdir($dossierOuvert)) !== false) {
82
						if (!is_dir($nomFichier) ) {
83
							$this->fichier = $nomDossier.DS.$nomFichier;
84
							$this->parserFichier();
85
						}
86
					}
87
					$this->traiterInfo('Nb de fichier : '.$this->nb_fichier);
88
					$this->traiterInfo('Nb de pages : '.$this->nb_pages);
89
					closedir($dossierOuvert);
90
				} else {
91
					$this->traiterErreur("Le dossier $nomDossier n'a pas pu être ouvert.");
92
				}
93
			} else {
94
				$this->traiterErreur("$nomDossier n'est pas un dossier.");
95
			}
96
		} else {
97
			$this->traiterErreur("Le dossier $nomDossier est introuvable.");
98
		}
99
		$this->afficherStats();
100
	}
101
 
102
 
103
	private function parserFichier() {
104
		$this->nb_fichier++;
105
		$contenu = $this->recupererContenuFichier($this->fichier);
106
		$contenu = $this->nettoyerHtml($contenu);
107
		$contenu = $this->supprimerDescriptionSp($contenu);
108
		$contenu = $this->nettoyerTexte($contenu);
109
		$this->contenu = $contenu;
110
		$this->analyserCle($contenu);
111
		$this->nettoyerParType();
112
		$this->insererDansWikini();
113
		$this->nb_pages += count($this->pages);
114
		$this->pages = array();
115
		$this->table_triples = array();
116
	}
117
 
118
 
119
	private function recupererContenuFichier($nomFichier) {
120
 
121
		$contenu = null;
122
		if (file_exists($nomFichier)) {
123
			if (!$contenu = file_get_contents($nomFichier)) {
124
				$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert.");
125
			}
126
		} else {
127
			$this->traiterErreur("Le fichier $nomFichier est introuvable.");
128
		}
129
		return $contenu;
130
	}
131
 
132
 
133
	private function chargerIndexGpFG() {
134
 
135
		$requete = 	'SELECT * '.
136
					'FROM coste_index_general ';
137
		$resultat = $this->bdd->recupererTous($requete);
138
 
139
		foreach ($resultat as $nom) {
140
			$nom_coste = ($nom['nom_coste'] == '') ? $this->transliterer($nom['nom_sci']) : $this->transliterer($nom['nom_coste']);
141
			$nom_sci = $this->transliterer($nom['nom_sci']);
142
			$tome = $nom['tome'];
143
			$page = $nom['page'];
144
			$num_tax_sup_coste = $nom['num_tax_sup_coste'];
145
			$num_nom_coste = $nom['num_nom_coste'];
146
			$rang = $nom['rang'];
147
 
148
			$this->indexGpFG[$nom_coste] = array( 'nom_sci' => $nom_sci,
149
													'rang' => $rang,
150
													'tome' => $tome,
151
													'page' => $page,
152
													'nom_coste' => $nom_coste,
153
													'num_nom_coste' => $num_nom_coste,
154
													'num_tax_sup_coste' => $num_tax_sup_coste
155
													);
156
		}
157
	}
158
 
159
 
160
	private function transliterer($txt) {
161
 
162
		$txt = ucwords(strtolower(Chaine::supprimerAccents($txt)));
163
		return trim($txt);
164
	}
165
 
166
 
167
	private function nettoyerHtml($contenu) {
168
 
169
		$contenu = strip_tags($contenu, '<b><i><table><title>');
170
		$expressions = array('/<b>\s*<\/b>/',
171
			'/<i>\s*<\/i>/',
172
			'/<title>[^<]+<\/title>/',
173
			'/&shy;/');
174
		$remplacements = '';
175
		$contenu = preg_replace($expressions, $remplacements, $contenu);
176
		return $contenu;
177
	}
178
 
179
 
180
	private function supprimerDescriptionSp($contenu) {
181
 
182
		//on supprime les tables contenant les images et les descriptions des espèces
183
		$contenu = preg_replace('/<table.+?<\/table>/uis', '', $contenu);
184
		return $contenu;
185
	}
186
 
187
	private function nettoyerTexte($contenu) {
188
 
189
		$remplacement = array('F\MILLE' => 'FAMILLE');
190
		$contenu = strtr($contenu, $remplacement);
191
		$expressions = array('/(?:\s*(?:\n|\r\n|\r))+/uis',
192
			'/\n\s+<b>/uis',
193
			'/^[ ]+/u',
194
			'/[ ]{2,}/',
195
			'/[.]\n[.]/us');
196
		$remplacements = array("\n",
197
			"\t<b>",
198
			'',
199
			' ',
200
			".\n");
201
		$contenu = preg_replace($expressions, $remplacements, $contenu);
202
		return $contenu;
203
	}
204
 
205
	private function analyserCle($contenu) {
206
 
207
		//creation des tags et des pages pour la table coste_page
208
		$lignes = preg_split('/[\n]+/', $contenu);
209
		$nom = '';
210
		$texte = '';
211
		$tag_wiki = '';
212
		$nbre_lignes = count($lignes);
213
		$num_famille = '';
214
 
215
		foreach ($lignes as $this->ligneNumero => $ligne) {
216
			$ligne = $ligne."\n";
217
 
218
			if (preg_match('/^FAMILLE ([0-9]+)(?:[.]| ) (?:- |)([^ .$]+)/iu',  strip_tags($ligne), $match)) {
219
				//Description de la famille
220
				$this->ajouterPage($tag_wiki, $texte);
221
				$nom = $match[2];
222
 
223
				$this->stats['nbreFamille']++;
224
				$num_famille = $match[1];
225
				$this->famille = $this->transliterer($match[2]);
226
				$this->famille = $this->corrigerNom($this->famille);
227
 
228
				$tag_wiki = $this->creerTagWiki($nom, 'Dsc');
229
				$texte = $ligne;
230
 
231
 
232
			} else if (preg_match('/^TABLEAU DES GENRES$/u', strip_tags($ligne))) {
233
				//Clé de la famille
234
				$this->ajouterPage($tag_wiki, $texte);
235
				$tag_wiki = $this->creerTagWiki($nom, 'Cle');
236
				$texte = $ligne;
237
 
238
			} else if (preg_match('/^\s*(?:Genre|Cenre)\s*([0-9]+)(?:[.;]|)\s+(?:--|-|_|)\s*([^ ]+)\s+/ui', strip_tags($ligne), $match)) {
239
				//Description des genres
240
				$this->ajouterPage($tag_wiki, $texte);
241
				$nom = $match[2];
242
				$this->stats['nbreGenre']++;
243
				$tag_wiki = $this->creerTagWiki($nom, 'Dsc');
244
				$texte = $ligne;
245
				$this->recupererDonneesGenre($ligne, $nom);
246
 
247
 
248
			} else if (preg_match('/^TABLEAU DES ESP[ÈÉE]CES$/u', strip_tags($ligne))) {
249
				//Clé du genre
250
				$this->ajouterPage($tag_wiki, $texte);
251
				$tag_wiki = $this->creerTagWiki($nom, 'Cle');
252
				$texte = $ligne;
253
 
254
			} else if (preg_match('/^<b>TABLE ANALYTIQUE DES FAMILLES<\/b>$/u', $ligne)) {
255
				//recuperation des Groupes
256
				$nom = 'Plantae';
257
				$tag_wiki = $this->creerTagWiki($nom, 'Cle');
258
				$texte = $ligne;
259
 
260
			} else if (preg_match('/^<b>(?:1|[IV]+).\s+(?:-\s+){0,1}([A-ZÉÈ]+)[.]<\/b>$/u', $ligne, $match)) {
261
				//recuperation pour chaque groupe la clé des familles
262
				$this->ajouterPage($tag_wiki, $texte);
263
				$nom = $match[1];
264
				$tag_wiki = $this->creerTagWiki($nom, 'Cle');
265
				$texte = $ligne;
266
 
267
			} else if (preg_match('/^<b>ORDRE DES FAMILLES<\/b>$/u', $ligne)) {
268
				//récupère les ordres des familles par groupe
269
				$this->ajouterPage($tag_wiki, $texte);
270
				$tag_wiki = 'OrdreFamilles';
271
				$texte = $ligne;
272
			//rajout des descriptions des classes (il y en a trois au total)
273
			} else if (strrpos($ligne, 'Classe') !== false || strrpos($ligne, 'CRYPTOGAMES-VASCULAIRES') !== false || strrpos($ligne, 'MONOCOTYLÉDONES') !== false) {
274
				if (strrpos($ligne, 'CRYPTOGAME') !== false) {
275
					$this->ajouterPage($tag_wiki, $texte);
276
					$nom = 'cryptogames';
277
					$this->stats['nbreDscClasse']++;
278
					$tag_wiki = $this->creerTagWiki($nom, 'Dsc');;
279
					$texte = $ligne;
280
 
281
				} elseif (strrpos($ligne, 'MONOCOTYLÉDONES') !== false) {
282
					$this->ajouterPage($tag_wiki, $texte);
283
					$nom = 'monocotylédones';
284
					$this->stats['nbreDscClasse']++;
285
					$tag_wiki = $this->creerTagWiki($nom, 'Dsc');
286
					$texte = $ligne;
287
 
288
				} else {
289
					preg_match('/^(?:<i>){0,1}(?:Première|Deuxième)? Classe[.][-\s]*[^b]*b>([A-Z]+)<\/b>[.]?/ui', $ligne, $match);
290
					$this->ajouterPage($tag_wiki, $texte);
291
 
292
					if (isset($match[1])) {
293
						$nom = $match[1];
294
						$tag_wiki = $this->creerTagWiki($nom, 'Dsc');
295
						$this->stats['nbreDscClasse']++;
296
						$texte = $ligne;
297
					} else {
298
						$this->traiterErreur("Classe non repérée dans la ligne \"$ligne\" du fichier $this->fichier ! Modifier l'expression regulière");
299
					}
300
				}
301
 
302
			} else if ($nbre_lignes == ($this->ligneNumero + 1)) {
303
				$texte .= $ligne;
304
				$this->ajouterPage($tag_wiki, $texte);
305
			} else {
306
				$texte .= $ligne;
307
			}
308
		}
309
	}
310
 
311
 
312
	private function recupererDonneesGenre($ligne, $nom) {
313
 
314
		if (preg_match('/^\s*(?:Genre|Cenre)\s*(?:<i>)?[0-9]+(?:[.;]|)\s+(?:--|-|_|)\s*[^ ]+(.*)?$\s+/ui', strip_tags($ligne, '<i>'), $donnees)) {
315
			$donnees_genre = array('nom_coste' => $nom, 'auteur' => '', 'nom_verna' => '');
316
			if (isset($donnees[1]) && !empty($donnees[1])) {
317
				//  cas possible : <i>L. - Passerage.</i>
318
				if (preg_match('/^(?:(?:^\s*<i>([^-]+)-([^-]+)))/ui', $donnees[1], $don)) {
319
					if (isset($don[1])) {
320
						$auteur = $don[1];
321
						$donnees_genre['auteur'] = $auteur;
322
					}
323
					if (isset($don[2])) {
324
						$nom_verna = $don[2];
325
						$donnees_genre['nom_verna'] = $nom_verna;
326
					}
327
				} elseif (preg_match('/^(?:(^\s*[^-<>]*)(?:[-\s]*)(?:<i>(?:[-\s]*)([^<>]*))?)/ui', $donnees[1], $don)) {
328
					if (isset($don[1])) {
329
						$auteur = $don[1];
330
						$donnees_genre['auteur'] = $auteur;
331
					}
332
					if (isset($don[2])) {
333
						$nom_verna = $don[2];
334
						$donnees_genre['nom_verna'] = $nom_verna;
335
					}
336
				} else{
337
					$this->traiterErreur("Les donnees : $donnees[1] ne sont pas reconnues par l'expression régulière");
338
				}
339
			}
340
		} else {
341
			$this->traiterErreur("Le genre $ligne n'est pas reconnu par l'expression régulière");
342
		}
343
		//print_r($donnees_genre);
344
		$this->insererDonneesGenre($donnees_genre);
345
	}
346
 
347
 
348
	private function insererDonneesGenre($donnees_genre) {
349
		$nom_coste = $this->bdd->proteger($donnees_genre['nom_coste']);
350
		$auteur = $this->bdd->proteger($donnees_genre['auteur']);
351
		$nom_francais = $this->bdd->proteger($donnees_genre['nom_verna']);
352
		$requete = 'UPDATE coste_v0_1 SET '.
353
						'auteur = '.$auteur.
354
						', nom_francais = '.$nom_francais
355
					.' WHERE nom_coste = '.$nom_coste;
356
		$res = $this->bdd->requeter($requete);
357
		if (!$res) {
358
			$e = 'Les données du genre '.$nom_coste.' n\'ont pas été insérée via la requete '.$requete;
359
			$this->traiterErreur($e);
360
		}
361
	}
362
 
363
 
364
	private function ajouterPage($tag, $txt) {
365
 
366
		if ($txt != '' && $tag != '') {
367
			$txt = $this->formaterSyntaxeWikini($txt);
368
			$this->pages[$tag] = $txt;
369
		}
370
	}
371
 
372
 
373
	private function formaterSyntaxeWikini($txt) {
374
 
375
		$remplacements = array('<b>' => '**', '</b>' => '**',
376
			'<i>' => '//', '</i>' => '//');
377
		$txt = strtr($txt, $remplacements);
378
		return $txt;
379
	}
380
 
381
 
382
	private function creerTagWiki($nom, $type) {
383
 
384
		$tag = '';
385
		$page = null;
386
		$tome = null;
387
		$nom_sci = '';
388
		$groupe = array('Thalamiflores', 'Caliciflores', 'Monopetales', 'Monochlamydees', 'Gymnospermes', 'Monocotyledones', 'Cryptogames');
389
		$nom = $this->transliterer($nom);
390
		$nom = $this->corrigerNom($nom);
391
 
392
		if (in_array($nom, $groupe) && $type == 'Cle') {
393
			$pages = array('1', '4', '5', '9', '12', '12', '14');
394
			$page = str_replace($groupe, $pages, $nom);
395
			$page = sprintf('%04d', $page);
396
			$tome = 1;
397
			$tag = "{$type}Coste1937T{$tome}P{$page}$nom";
398
			$this->stats['nbreCle']++;
399
			$this->stats['nbrCleClasse']++;
400
		} else {
401
			if ($type == 'Dsc') {
402
				$this->stats['nbreDsc']++;
403
			} else if ($type == 'Cle') {
404
				$this->stats['nbreCle']++;
405
			}
406
			if (array_key_exists($nom, $this->indexGpFG)) {
407
				$tome = $this->indexGpFG[$nom]['tome'];
408
				$page = $this->indexGpFG[$nom]['page'];
409
				$nom_sci = $this->indexGpFG[$nom]['nom_sci'];
410
 
411
			} else {
412
				$this->traiterErreur("Impossible de trouver le nom $nom dans l'index pour le fichier $this->fichier à la ligne $this->ligneNumero.");
413
			}
414
			if (!is_null($page) && !is_null($tome)) {
415
				$page =  sprintf('%04d', $page);
416
				$tome = strtr($tome, array('I' => 1, 'II' => 2, 'III' => 3, ));
417
				$tag = "{$type}Coste1937T{$tome}P{$page}$nom_sci";
418
 
419
			}
420
		}
421
		$this->creerTriples($tag, $nom, $tome, $page);
422
		return $tag;
423
	}
424
 
425
 
426
	public function creerTriples($tag, $nom, $tome, $page) {
427
 
428
		if (array_key_exists($nom, $this->indexGpFG)) {
429
			$this->table_triples[] = array ('resource' => $tag,
430
											'property' => 'titre',
431
											'value' => $this->creerTitre($nom, $tag));
432
			if (isset($this->table_coste[$nom])) {
433
				$num_nom = $this->table_coste[$nom];
434
				$this->table_triples[] = array ('resource' => $tag,
435
											'property' => 'num_nom',
436
											'value' => $num_nom);
437
			} else {
438
				$this->traiterErreur("Impossible de trouver le nom $nom dans la table coste");
439
			}
440
		} else {
441
			$this->traiterErreur("Impossible de trouver le nom $nom dans l'index ");
442
		}
443
	}
444
 
445
 
446
	private function recupererTableCoste() {
447
		$table_coste = array();
448
		$req = 'SELECT num_nom, nom_coste FROM coste_v0_1 WHERE rang != "290" ';
449
		$res = $this->bdd->recupererTous($req);
450
		if ($res) {
451
			foreach ($res as $donnees) {
452
				$this->table_coste[$donnees['nom_coste']] = $donnees['num_nom'];
453
			}
454
		} else {
455
			$this->traiterErreur('Erreur dans la requete '.$req);
456
		}
457
	}
458
 
459
 
460
	private function creerTitre($nom, $tag) {
461
		$titre = '';
462
		if (array_key_exists($nom, $this->indexGpFG)) {
463
			$num_nom_coste = $this->indexGpFG[$nom]['num_nom_coste'];
464
			$tome = $this->indexGpFG[$nom]['tome'];
465
			if (preg_match('/^(?:Cle|Dsc)Coste1937T[1-3]{1}P[0]*([1-9]*).+$/', $tag, $match_page)) { //on recherche dans le tag puisque les clés et les descriprtions ont des pages différentes pour les classes par ex
466
				$page = $match_page[1];
467
			} else {
468
				$this->traiterErreur('La page n\'est pas reconnu dans le tag '.$tag);
469
			}
470
			if ($num_nom_coste == 'R') {
471
				$titre = "Coste $num_nom_coste - $nom - T$tome.p$page";
472
			} else {
473
				$num_tax_sup = $this->indexGpFG[$nom]['num_tax_sup_coste'];
474
				$nom_tax_sup = $this->recupererNom($num_tax_sup);
475
				$titre = "Coste $num_nom_coste - $nom - $num_tax_sup, $nom_tax_sup - T$tome.p$page";
476
			}
477
		} else {
478
			$this->traiterErreur("Impossible de trouver le nom $nom dans l'index pour créer le titre");
479
		}
480
		return $titre;
481
	}
482
 
483
 
484
	private function recupererNom($id_coste) {
485
		foreach ($this->indexGpFG as $donnees) {
486
			if ($donnees['num_nom_coste'] == $id_coste) {
487
				$nom = $donnees['nom_sci'];
488
				break;
489
			}
490
		}
491
		return $nom;
492
	}
493
 
494
 
495
	private function corrigerNom($nom) {
496
		$remplacements = array('Ceraniacees' => 'Geraniacees',
497
			'Sucowia' => 'Succowia',
498
			'Tilla' => 'Tilia');
499
		$nom = strtr($nom, $remplacements);
500
		$nom = trim($nom);
501
		return $nom;
502
	}
503
 
504
 
505
	private function nettoyerParType() {
506
		foreach ($this->pages as $tag => $txt) {
507
			if (preg_match('/^Cle/', $tag)) {
508
				$txt = $this->nettoyerCle($txt);
509
			}
510
			$this->pages[$tag] = $txt;
511
		}
512
	}
513
 
514
 
515
	private function nettoyerCle($txt) {
516
		$txt = preg_replace('/([*]{2})(\s+)([A-Z])/u', '$2$1$3', $txt);
517
		$txt = preg_replace('/(\w)\t(\w)/ui', '$1 $2', $txt);
518
		$txt = preg_replace('/(\w)\s+([.])/ui', '$1$2', $txt);
519
		$txt = preg_replace('/\n\s+(\(|[\*]{2}|[[:alpha:]éèàê]+|[0-9]+-[0-9]+ )/Uuis', ' $1', $txt);
520
		$txt = preg_replace('/([.])\s+([\*]{2}|\(part.\))/ui', "$1\t$2", $txt);
521
		$txt = preg_replace('/(n)oe(ud[s]?)/ui', "$1œ$2", $txt);
522
		return $txt;
523
	}
524
 
525
	private function insererDansWikini() {
526
		// Mise à jour éventuelle des pages existantes
527
		/*$requete = 'DELETE FROM coste_pages '.
528
					'WHERE tag LIKE '.$tag;
529
		//			'	OR tag LIKE "Cle%" '.
530
		//			'	OR tag LIKE "OrdreFamilles" ';
531
		$this->bdd->requeter($requete);*/
532
 
533
 
534
		//--------------insertion des pages-----------------------
535
 
536
		$this->supprimerPagesExistantes();
537
		$this->reinitialiserAutoIncrement('coste_pages');
538
		$this->reinitialiserAutoIncrement('coste_triples');
539
 
540
		foreach ($this->pages as $tag => $txt) {
541
 
542
			$tag = $this->bdd->proteger($tag);
543
			$time = 'NOW()';
544
			$txt = $this->bdd->proteger($txt);
545
			$latest = $this->bdd->proteger('Y');
546
			$perimee = $this->bdd->proteger('N');
547
 
548
			// Mise à jour éventuelle des pages existantes
549
			/*$requete = 'UPDATE coste_pages '.
550
						"SET latest = $perimee ".
551
						"WHERE tag = $tag ";
552
			$this->bdd->requeter($requete);*/
553
 
554
			// Insertion du nouveau contenu
555
			$requete = 'INSERT INTO coste_pages '.
556
						'(tag, time, body, latest) '.
557
						"VALUES ($tag, $time, $txt, $latest)";
558
			$res = $this->bdd->requeter($requete);
559
			if ($res) {
560
				//$this->afficherAvancement('Insertion des pages du fichier '.$this->fichier);
561
			} else {
562
				$this->afficherAvancement('Erreur d\'insertion des pages du fichier '.$this->fichier);
563
			}
564
		}
565
		//-----------insertions des triples-----------------------
566
		foreach ($this->table_triples as $triple) {
567
			$resource = $this->bdd->proteger($triple['resource']);
568
			$property = $this->bdd->proteger($triple['property']);
569
			$value = $this->bdd->proteger($triple['value']);
570
 
571
			$requete_triple = "INSERT INTO coste_triples (resource, property, value) VALUES ($resource,$property ,$value)";
572
			$res_triple = $this->bdd->requeter($requete_triple);
573
			if ($res_triple) {
574
				//$this->afficherAvancement('Insertion des triples du fichier '.$this->fichier);
575
			} else {
576
				$this->afficherAvancement('Erreur d\'insertion des triples du fichier '.$this->fichier);
577
			}
578
		}
579
 
580
	}
581
 
582
 
583
	public function supprimerPagesExistantes() {
584
		foreach ($this->pages as $tag => $txt) {
585
 
586
			$tag = $this->bdd->proteger($tag);
587
			//suppression des tuples déjà existants
588
			$requete = 'DELETE FROM coste_pages '.
589
					'WHERE tag = '.$tag;
590
				//	'	OR tag LIKE "Cle%" '.
591
				//	'	OR tag LIKE "OrdreFamilles" ';
592
			$this->bdd->requeter($requete);
593
 
594
			$requete = 'DELETE FROM coste_triples '.
595
					'WHERE resource LIKE '.$tag;
596
				//	'	OR tag LIKE "Cle%" '.
597
				//	'	OR tag LIKE "OrdreFamilles" ';
598
			$this->bdd->requeter($requete);
599
 
600
		}
601
	}
602
 
603
 
604
	private function reinitialiserAutoIncrement($table) {
605
 
606
		$requete_max_id = 'SELECT max(id) from '.$table;
607
		$id_max = $this->bdd->recuperer($requete_max_id);
608
		$id_max = $id_max['max(id)'];
609
		$id_max = $id_max+1;
610
 
611
		$requete_pages = 'ALTER TABLE '.$table.' AUTO_INCREMENT = '.$id_max;
612
		$this->bdd->requeter($requete_pages);
613
 
614
	}
615
 
616
 
617
	private function afficherStats() {
618
		print_r($this->stats);
619
	}
620
 
621
 
622
	private function creerFichier($fichier, $tab, $chemin = null) {
623
 
624
		if (!$chemin) {
625
			$chemin = Config::get('chemin_test');
626
		}
627
		$intitule = '';
628
		$nom_fichier = fopen($chemin.$fichier, 'w+');
629
		foreach ($tab as $key => $val) {
630
			if (is_array($val)) {
631
				foreach ($val as $k => $v) {
632
					$intitule .= $k."\t";
633
				}
634
				fwrite($nom_fichier, trim($intitule)."\n");
635
				break;
636
			}
637
		}
638
 
639
		foreach ($tab as $key => $val) {
640
			if (is_array($val)) {
641
				fwrite($nom_fichier, implode("\t", $val)."\n");
642
			} else {
643
				fwrite($nom_fichier, "\t$val\n");
644
			}
645
		}
646
		fclose($nom_fichier);
647
	}
648
 
649
 
650
}
651
?>