Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 721 → Rev 722

/trunk/scripts/modules/nva/nva.ini
3,12 → 3,13
dossierSql = "{ref:dossierTsv}"
 
[tables]
nva = "nva_v2013_06"
nva = "nva_v{ref:version}"
bdtxa = "bdtxa_v1_00"
 
[fichiers]
structureSql = "nva.sql"
nva = "nva_2013_06.csv"
structureSql = "nva_v{ref:version}.sql"
nva = "nva_v{ref:version}.tsv"
 
[chemins]
structureSql = "{ref:dossierSql}{ref:fichiers.structureSql}"
nva = "{ref:dossierTsv}{ref:fichiers.especes}"
nva = "{ref:dossierTsv}{ref:fichiers.nva}"
/trunk/scripts/modules/nva/Nva.php
1,9 → 1,9
<?php
/** Exemple lancement:
* /opt/lampp/bin/php -d memory_limit=3500M cli.php sptba -a chargerTous
* /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php nva -a chargerTous
*/
class Nva extends EfloreScript {
 
public function executer() {
// Lancement de l'action demandée
try {
14,13 → 14,21
case 'chargerTous' :
$this->chargerStructureSql();
$this->chargerDonnees();
$this->genererChampCodeLangue();
$this->genererChampNumTax();
break;
case 'chargerStructureSql' :
$this->chargerStructureSql();
break;
case 'chargerDonnees' :
$this->chargerDonnees();
$this->chargerDonnees();
break;
case 'genererChampNumTax' :
$this->genererChampNumTax();
break;
case 'genererChampCodeLangue' :
$this->genererChampCodeLangue();
break;
case 'supprimerTous' :
$this->supprimerTous();
break;
33,7 → 41,7
}
 
private function chargerDonnees() {
$chemin = Config::get('chemins.nva').Config::get('fichiers.nva');
$chemin = Config::get('chemins.nva');
$table = Config::get('tables.nva');
$requete = "LOAD DATA INFILE '$chemin' ".
"REPLACE INTO TABLE $table ".
46,11 → 54,95
$this->getBdd()->requeter($requete);
}
private function genererChampNumTax() {
$this->preparerTablePrChpNumTax();
$nns_taxons = $this->recupererTuplesPrNumTax();
$this->remplirChpNumTax($nns_taxons);
}
private function preparerTablePrChpNumTax() {
$table = Config::get('tables.nva');
$requete = "SHOW COLUMNS FROM $table LIKE 'num_taxon' ";
$resultat = $this->getBdd()->recuperer($requete);
if ($resultat === false) {
$requete = "ALTER TABLE $table ".
'ADD num_taxon INT(10) ';
$this->getBdd()->requeter($requete);
}
}
private function recupererTuplesPrNumTax() {
$table_ref = Config::get('tables.bdtxa');
$requete = 'SELECT num_tax, num_nom '.
"FROM ".$table_ref." ";
$resultat = $this->getBdd()->recupererTous($requete);
return $resultat;
}
private function remplirChpNumTax($nns_taxons) {
$table = Config::get('tables.nva');
foreach ($nns_taxons as $nn) {
if (!empty($nn['num_tax']) && is_numeric($nn['num_tax'])) {
$requete = "UPDATE $table SET num_taxon = ".$nn['num_tax']." WHERE num_nom = ".$nn['num_nom']." ";
$resultat = $this->getBdd()->requeter($requete);
}
if ($resultat === false) {
throw new Exception("Erreur d'insertion pour le tuple $id");
}
$this->afficherAvancement("Insertion des nums taxonomiques dans la base en cours");
}
echo "\n";
}
private function genererChampCodeLangue() {
$this->preparerTablePrChpCodeLangue();
$codes_langues = $this->recupererTuplesPrCodeLangue();
$this->remplirChpCodeLangue($codes_langues);
}
private function preparerTablePrChpCodeLangue() {
$table = Config::get('tables.nva');
$requete = "SHOW COLUMNS FROM $table LIKE 'code_langue' ";
$resultat = $this->getBdd()->recuperer($requete);
if ($resultat === false) {
$requete = "ALTER TABLE $table ".
'ADD code_langue VARCHAR(3) ';
$this->getBdd()->requeter($requete);
}
}
private function recupererTuplesPrCodeLangue() {
$codes_langues = array();
if (($handle = fopen(Config::get("dossierTsv")."codes_langues.csv", "r")) !== false) {
while (($data = fgetcsv($handle, 1000, ",")) !== false) {
$codes_langues[] = array('code_iso_639_3' => $data[0],
'nom' => $data[1]);
}
fclose($handle);
}
return $codes_langues;
}
private function remplirChpCodeLangue($codes_langues) {
$table = Config::get('tables.nva');
foreach ($codes_langues as $code) {
if (!empty($code['nom'])) {
$requete = "UPDATE $table SET code_langue = ".$this->getBdd()->proteger($code['code_iso_639_3'])." ".
"WHERE TRIM(langue) = ".$this->getBdd()->proteger(trim($code['nom']))." ";
$resultat = $this->getBdd()->requeter($requete);
}
if ($resultat === false) {
throw new Exception("Erreur d'insertion pour le tuple $id");
}
$this->afficherAvancement("Insertion des codes de langues dans la base en cours");
}
echo "\n";
}
 
private function supprimerTous() {
$requete = "DROP TABLE IF EXISTS nva_meta, nva_v2013_06";
$requete = "DROP TABLE IF EXISTS ".Config::get('tables.nva').", nva_meta ";
$this->getBdd()->requeter($requete);
Debug::printr('suppression');
}
}
?>