Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 692 | 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;
1241 delphine 33
				case 'ajouterNumTax' :
34
					$this->ajouterNumTaxon();
35
					break;
645 delphine 36
				case 'supprimerTous' :
37
					$this->supprimerTous();
38
					break;
39
				default :
40
					throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
41
			}
42
		} catch (Exception $e) {
43
			$this->traiterErreur($e->getMessage());
44
		}
692 jpm 45
	}
645 delphine 46
 
692 jpm 47
	/**
48
	* Charge le fichier en créant un id pour chaque nom vernaculaire.
49
	*/
645 delphine 50
	private function chargerNvps() {
51
		//Debug::printr(Config::get('fichiers'));
52
		$fichierOuvert = $this->ouvrirFichier(Config::get('chemins.nvps'));
53
		$donnees = $this->analyserFichier($fichierOuvert);
54
		fclose($fichierOuvert);
55
		foreach ($donnees as $donnee) {
692 jpm 56
			$table = Config::get('tables.nvps');
57
			$fields = implode(', ', array_keys($donnee));
58
			$values = implode(', ', $donnee);
59
 
60
			$requete = "INSERT INTO $table ($fields) VALUES ($values) ";
645 delphine 61
			$this->getBdd()->requeter($requete);
62
 
63
			$this->afficherAvancement("Insertion des noms vernaculaires dans la base de données");
64
			if ($this->stopperLaBoucle($this->getParametre('t'))) {
65
				break;
66
			}
67
		}
1241 delphine 68
		$requete = "ALTER TABLE `nvps_v2017` ADD `num_taxon` INT(10) NOT NULL AFTER `notes`;";
69
 
645 delphine 70
		echo "\n";
71
	}
1241 delphine 72
 
73
	/**
74
	 * Ajoute le num_taxon
75
	 */
76
	private function ajouterNumTaxon() {
77
 
78
		$table = Config::get('tables.nvps');
79
		$referentiel = Config::get('tables.bdtfx');
80
 
81
		$requete_struct = "ALTER TABLE ".$table." ADD `num_taxon` INT(10) NOT NULL AFTER `notes`;";
82
		$this->getBdd()->requeter($requete_struct);
83
		$requete ="UPDATE ".$table." n left join ".$referentiel." on ".$referentiel.".num_nom = n.num_nom  SET `num_taxon`= num_taxonomique";
84
		$this->getBdd()->requeter($requete);
85
	}
645 delphine 86
 
692 jpm 87
	private function ouvrirFichier($chemin) {
88
		$fichierOuvert = false;
89
		if ($chemin) {
90
			if (file_exists($chemin) === true) {
91
				$fichierOuvert = fopen($chemin, 'r');
92
				if ($fichierOuvert == false) {
93
					throw new Exception("Le fichier $chemin n'a pas pu être ouvert.");
94
				}
95
			} else {
96
				throw new Exception("Le fichier $chemin est introuvable.");
97
			}
98
		} else {
99
			throw new Exception("Aucun chemin de fichier n'a été fourni.");
100
		}
101
		return $fichierOuvert;
102
	}
103
 
645 delphine 104
	private function analyserFichier($fichierOuvert) {
692 jpm 105
		$entetesCsv = explode("\t", trim(fgets($fichierOuvert)));
106
 
1241 delphine 107
		$donnees = array();
108
		$i = 0;
645 delphine 109
		while ($ligneCsv = fgets($fichierOuvert)) {
110
			$champs = explode("\t", trim($ligneCsv));
111
			if (count($champs) > 0) {
692 jpm 112
				$infos = array();
113
				foreach ($entetesCsv as $ordre => $champNom) {
114
					$valeur = isset($champs[$ordre]) ? $champs[$ordre] : '';
1241 delphine 115
					$infos[$champNom] = $this->getBdd()->proteger($valeur);
645 delphine 116
				}
692 jpm 117
				$infos['id'] = $this->getIndexNomVernaculaire($infos['nom_vernaculaire']);
645 delphine 118
			}
119
			$this->afficherAvancement("Analyse du fichier des noms vernaculaires");
1241 delphine 120
			$donnees[$i] = $infos; $i++;
645 delphine 121
			if ($this->stopperLaBoucle()) {
122
				break;
123
			}
124
		}
125
		echo "\n";
126
		return $donnees;
127
	}
1241 delphine 128
 
645 delphine 129
 
130
	private function getIndexNomVernaculaire($nomVernaculaire) {
131
		$indexCourrant = null;
132
		if (array_key_exists($nomVernaculaire, $this->nomsIndex) == false) {
133
			$this->nomsIndex[$nomVernaculaire] = $this->numeroIndex++;
134
		}
135
		$indexCourrant = $this->nomsIndex[$nomVernaculaire];
136
		return $indexCourrant;
137
	}
138
 
139
	private function supprimerTous() {
691 jpm 140
		$requete = "DROP TABLE IF EXISTS nvps_meta, nvps_v2007, nvps_v2012";
645 delphine 141
		$this->getBdd()->requeter($requete);
142
	}
143
}
144
?>