Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 930 → Rev 931

/trunk/scripts/modules/liste_rouge/ListeRouge.php
New file
0,0 → 1,114
<?php
/** Exemple lancement:
* /opt/lampp/bin/php -d memory_limit=3500M cli.php sptb -a chargerTous
*/
class ListeRouge extends EfloreScript {
 
public function executer() {
// Lancement de l'action demandée
try {
$this->initialiserProjet('liste_rouge');
 
$cmd = $this->getParametre('a');
switch ($cmd) {
case 'chargerTous' :
$this->chargerStructureSql();
$this->chargerDonnees();
$this->genererChampNumNomRetenu();
break;
case 'chargerStructureSql' :
$this->chargerStructureSql();
break;
case 'chargerDonnees' :
$this->chargerDonnees();
$this->genererChampNumNomRetenu();
break;
case 'genererChampNumNomRetenu' :
$this->genererChampNumNomRetenu();
break;
case 'ajouterChampNumNomRetenu' :
$this->ajouterChampNumNomRetenu();
break;
case 'supprimerTous' :
$this->supprimerTous();
break;
default :
throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
}
} catch (Exception $e) {
$this->traiterErreur($e->getMessage());
}
}
 
private function chargerDonnees() {
$chemin = Config::get('chemins.listeRouge');
$table = Config::get('tables.listeRouge');
$requete = "LOAD DATA INFILE '$chemin' ".
"REPLACE INTO TABLE $table ".
'CHARACTER SET utf8 '.
'FIELDS '.
" TERMINATED BY '\t' ".
" ENCLOSED BY '' ".
" ESCAPED BY '\\\' ".
'IGNORE 1 LINES';
$this->getBdd()->requeter($requete);
}
private function genererChampNumNomRetenu() {
$this->preparerTablePrChpNumNomRetenu();
$this->genererNumNomRetenu();
$this->recupererNumNomNonTrouve();
}
private function preparerTablePrChpNumNomRetenu() {
$table = Config::get('tables.listeRouge');
$requete = "SHOW COLUMNS FROM $table LIKE 'num_nom_retenu' ";
$resultat = $this->getBdd()->recuperer($requete);
if ($resultat === false) {
$requete = "ALTER TABLE $table ".
' ADD `num_nom_retenu` VARCHAR( 10 ) NOT NULL ,'.
' ADD `nom_sci` VARCHAR( 500 ) NOT NULL ,'.
' ADD INDEX ( `num_nom_retenu` ) ';
$this->getBdd()->requeter($requete);
}
}
private function genererNumNomRetenu() {
$table = Config::get('tables.listeRouge');
$table_referentiel = Config::get('tables.referentielTaxo');
$requete = 'UPDATE '.$table.' s, '.$table_referentiel.' r '.
'SET s.num_nom_retenu = r.num_nom_retenu, s.nom_sci = r.nom_complet '.
'WHERE s.nom_sci_orig = r.nom_complet ';
$this->getBdd()->requeter($requete);
}
private function recupererNumNomNonTrouve() {
$table = Config::get('tables.listeRouge');
$requete = 'SELECT `id`, `nom_sci_orig`'.
' FROM '.$table.
' WHERE `num_nom_retenu` = ""';
$noms = $this->getBdd()->recupererTous($requete);
$debug = "Noms sans correspondance avec bdtfx :\n";
foreach ($noms as $nom) {
$debug .= $nom['id']." ".$nom['nom_sci_orig']."\n";
}
Debug::printr($debug);
}
 
private function ajouterChampNumNomRetenu() {
$chemin = Config::get('chemins.listeRougeCorresp');
$table = Config::get('tables.listeRouge');
$requetes = $this->recupererContenu($chemin);
$this->executerScripSql($requetes);
}
private function supprimerTous() {
$requete = "DROP TABLE IF EXISTS liste_rouge_meta, liste_rouge_v2012";
$this->getBdd()->requeter($requete);
Debug::printr('suppression');
}
}
?>
/trunk/scripts/modules/liste_rouge/liste_rouge.ini
New file
0,0 → 1,17
version="2012"
dossierTsv = "{ref:dossierDonneesEflore}liste_rouge/{ref:version}/"
dossierSql = "{ref:dossierTsv}"
 
[tables]
listeRouge = "liste_rouge_v{ref:version}"
referentielTaxo = "bdtfx_v2_00"
 
[fichiers]
structureSql = "liste_rouge_v{ref:version}.sql"
listeRouge = "liste_rouge_v{ref:version}.tsv"
listeRougeCorresp = "liste_rouge_correspondance_v{ref:version}.sql"
 
[chemins]
structureSql = "{ref:dossierSql}{ref:fichiers.structureSql}"
listeRouge = "{ref:dossierTsv}{ref:fichiers.listeRouge}"
listeRougeCorresp = "{ref:dossierTsv}{ref:fichiers.listeRougeCorresp}"