Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 691 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
645 delphine 1
<?php
2
/** Exemple lancement:
3
 * /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php nvps
4
 * 		-a chargerTous
5
 * Options :
6
 * -t : Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).
7
*/
8
class Nvps extends EfloreScript {
9
 
10
	private $nomsIndex = array();
11
	private $numeroIndex = 1;
12
 
13
	protected $parametres_autorises = array(
14
		'-t' => array(false, false, 'Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).'));
15
 
16
	public function executer() {
17
		// Lancement de l'action demandée
18
		try {
19
			$this->initialiserProjet('nvps');
20
 
21
			$cmd = $this->getParametre('a');
692 jpm 22
			switch ($cmd) {
23
				case 'chargerTous' :
24
					$this->chargerStructureSql();
25
					$this->chargerNvps();
26
					break;
27
				case 'chargerStructure' :
28
					$this->chargerStructureSql();
29
					break;
645 delphine 30
				case 'chargerNvps' :
31
					$this->chargerNvps();
32
					break;
33
				case 'supprimerTous' :
34
					$this->supprimerTous();
35
					break;
36
				default :
37
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
38
			}
39
		} catch (Exception $e) {
40
			$this->traiterErreur($e->getMessage());
41
		}
692 jpm 42
	}
645 delphine 43
 
692 jpm 44
	/**
45
	* Charge le fichier en créant un id pour chaque nom vernaculaire.
46
	*/
645 delphine 47
	private function chargerNvps() {
48
		//Debug::printr(Config::get('fichiers'));
49
		$fichierOuvert = $this->ouvrirFichier(Config::get('chemins.nvps'));
50
		$donnees = $this->analyserFichier($fichierOuvert);
51
		fclose($fichierOuvert);
52
		foreach ($donnees as $donnee) {
692 jpm 53
			$table = Config::get('tables.nvps');
54
			$fields = implode(', ', array_keys($donnee));
55
			$values = implode(', ', $donnee);
56
 
57
			$requete = "INSERT INTO $table ($fields) VALUES ($values) ";
645 delphine 58
			$this->getBdd()->requeter($requete);
59
 
60
			$this->afficherAvancement("Insertion des noms vernaculaires dans la base de données");
61
			if ($this->stopperLaBoucle($this->getParametre('t'))) {
62
				break;
63
			}
64
		}
65
		echo "\n";
66
	}
67
 
692 jpm 68
	private function ouvrirFichier($chemin) {
69
		$fichierOuvert = false;
70
		if ($chemin) {
71
			if (file_exists($chemin) === true) {
72
				$fichierOuvert = fopen($chemin, 'r');
73
				if ($fichierOuvert == false) {
74
					throw new Exception("Le fichier $chemin n'a pas pu être ouvert.");
75
				}
76
			} else {
77
				throw new Exception("Le fichier $chemin est introuvable.");
78
			}
79
		} else {
80
			throw new Exception("Aucun chemin de fichier n'a été fourni.");
81
		}
82
		return $fichierOuvert;
83
	}
84
 
645 delphine 85
	private function analyserFichier($fichierOuvert) {
692 jpm 86
		$entetesCsv = explode("\t", trim(fgets($fichierOuvert)));
87
 
645 delphine 88
		$donnees = array();
89
		while ($ligneCsv = fgets($fichierOuvert)) {
90
			$champs = explode("\t", trim($ligneCsv));
91
			if (count($champs) > 0) {
692 jpm 92
				$infos = array();
93
				foreach ($entetesCsv as $ordre => $champNom) {
94
					$valeur = isset($champs[$ordre]) ? $champs[$ordre] : '';
95
					$infos[$champNom] = $valeur;
645 delphine 96
				}
692 jpm 97
				$infos['id'] = $this->getIndexNomVernaculaire($infos['nom_vernaculaire']);
98
				$donnees[] = $this->getBdd()->protegerTableau($infos);
645 delphine 99
			}
100
			$this->afficherAvancement("Analyse du fichier des noms vernaculaires");
101
			if ($this->stopperLaBoucle()) {
102
				break;
103
			}
104
		}
105
		echo "\n";
692 jpm 106
 
645 delphine 107
		return $donnees;
108
	}
109
 
110
	private function getIndexNomVernaculaire($nomVernaculaire) {
111
		$indexCourrant = null;
112
		if (array_key_exists($nomVernaculaire, $this->nomsIndex) == false) {
113
			$this->nomsIndex[$nomVernaculaire] = $this->numeroIndex++;
114
		}
115
		$indexCourrant = $this->nomsIndex[$nomVernaculaire];
116
		return $indexCourrant;
117
	}
118
 
119
	private function supprimerTous() {
691 jpm 120
		$requete = "DROP TABLE IF EXISTS nvps_meta, nvps_v2007, nvps_v2012";
645 delphine 121
		$this->getBdd()->requeter($requete);
122
	}
123
}
124
?>