Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 1124 → Rev 1125

/branches/v5.9-aulnaie/scripts/modules/chorodep/Chorodep.php
55,6 → 55,25
case 'supprimerTous' :
$this->supprimerTous();
break;
// noms vernaculaires et statuts de protection
case 'NVSP' :
$this->nettoyageNVSP();
$this->chargerStructureNVSP();
$this->rabouterNomsVernaculaires();
$this->rabouterStatutsProtection();
break;
case 'nettoyageNVSP' :
$this->nettoyageNVSP();
break;
case 'chargerStructureNVSP' :
$this->chargerStructureNVSP();
break;
case 'nomsVernaculaires' :
$this->rabouterNomsVernaculaires();
break;
case 'statutsProtection' :
$this->rabouterStatutsProtection();
break;
default :
throw new Exception("Erreur : la commande '$cmd' n'existe pas!");
}
142,7 → 161,7
private function initialiserTraitement() {
//------------------------------------------------------------------------------------------------------------//
// Récupération des informations à vérifier
$table = $this->getNomTableDernierVersion();
$table = $this->getNomTableDerniereVersion();
$requete = 'SELECT * '.
"FROM $table ";
$taxons = $this->getBdd()->recupererTous($requete);
486,7 → 505,7
return $tablesChorodep;
}
 
private function getNomTableDernierVersion() {
private function getNomTableDerniereVersion() {
$version = $this->getDerniereVersion();
$table = sprintf(Config::get('tables.chorodepTpl'), $version);
return $table;
496,6 → 515,123
$version = array_pop(explode(',', Config::get('versions')));
return $version;
}
 
// ----------
// intégration des noms vernaculaires et statuts de protection (NVSP) dans
// une table dédiée, pour permettre le service intégratif de l'applciation "chorologie"
// (basé sur les scripts de "gentiana-services")
// ----------
 
/**
* Dézingue tout le bousin
* @TODO chaque méthode devrait s'autonettoyer au début afin d'être répétable
* sans avoir à tout reprendre depuis le début (principe du dump)
*/
protected function nettoyageNVSP() {
echo "---- suppression des tables\n";
$tableStatutsProtection = Config::get('tables.statuts_protection');
$tableNomsVernaculaires = Config::get('tables.noms_vernaculaires');
$req = "DROP TABLE IF EXISTS `" . $tableStatutsProtection . "`";
$this->getBdd()->requeter($req);
$req = "DROP TABLE IF EXISTS `" . $tableNomsVernaculaires . "`;";
$this->getBdd()->requeter($req);
}
 
/**
* Crée les tables vides
*/
protected function chargerStructureNVSP() {
echo "---- création des tables\n";
$contenuSql = $this->recupererContenu(Config::get('chemins.structureNVSP'));
$this->executerScripSql($contenuSql);
}
 
/**
* Va chercher les noms vernaculaires pour chaque espèce, et les rajoute
* dans la table dédiée
*/
protected function rabouterNomsVernaculaires() {
$tableNomsVernaculaires = Config::get('tables.noms_vernaculaires');
restore_error_handler();
restore_exception_handler();
ini_set("display_errors", true);
error_reporting(E_ALL);
$squeletteUrlNvjfl = Config::get("url_nvjfl");
echo "---- récupération des noms vernaculaires depuis eFlore\n";
$depart = 0;
$nbInsertions = 0;
$yenaencore = true;
$tailleTranche = 1000;
while ($yenaencore) {
$url = sprintf($squeletteUrlNvjfl, $depart, $tailleTranche);
$noms = $this->chargerDonnees($url);
// Si quelqu'un parvient à dédoublonner les $valeurs, on enlève le IGNORE
$req = "INSERT IGNORE INTO " . $tableNomsVernaculaires . " VALUES ";
$valeurs = array();
// insertion des données
foreach ($noms['resultat'] as $res) {
$numTaxons = explode(',', $res['num_taxon']);
$nvP = $this->getBdd()->proteger($res['nom']);
foreach ($numTaxons as $numTaxon) {
$valeurs[] = "(" . $numTaxon . ", " . $nvP . ")";
}
}
$req .= implode(",", $valeurs);
$this->getBdd()->executer($req);
// prochain tour
$nbInsertions += count($valeurs); // Faux car INSERT IGNORE - dédoublonner ou compter les insertions réelles
$depart += $tailleTranche;
$total = $noms['entete']['total'];
$yenaencore = $depart <= $total;
echo "insérés: " . min($depart, $total) . " noms, " . $nbInsertions . " attributions\n";
}
}
 
/**
* Va chercher les statuts de protection pour chaque espèce et les rajoute
* à la table; importe un fichier dump SQL des lois
*/
protected function rabouterStatutsProtection() {
$tableChorologie = $this->getNomTableDerniereVersion();
$tableStatutsProtection = Config::get('tables.statuts_protection');
echo "---- récupération des statuts de protection depuis eFlore\n";
$req = "SELECT distinct num_nom FROM " . $tableChorologie;
$resultat = $this->getBdd()->recupererTous($req);
// pour chaque taxon mentionné (inefficace mais évite d'implémenter un
// mode liste sur le service eflore/sptb
$squeletteUrlSptb = Config::get("url_sptb");
foreach ($resultat as $res) {
$nn = $res['num_nom'];
//echo "NN: $nn\n";
if ($nn != 0) {
$url = sprintf($squeletteUrlSptb, $nn);
//echo "URL: $url\n";
$statuts = $this->chargerDonnees($url);
//echo "STATUTS: " . print_r($statuts, true) . "\n";
if (count($statuts) > 0) {
$json = array();
foreach ($statuts as $statut) {
$nouveauStatut = array();
$nouveauStatut['zone'] = $statut['code_zone_application'];
$nouveauStatut['lien'] = $statut['hyperlien_legifrance'];
$json[] = $nouveauStatut;
}
// Si au moins un statut
if (count($json) > 0) {
$json = json_encode($json);
//echo "JSON: " . print_r($json, true) . "\n";
// Insertion d'un bout de JSON
$jsonP = $this->getBdd()->proteger($json);
$nnP = $this->getBdd()->proteger($nn);
$reqIns = "INSERT INTO " . $tableStatutsProtection
. " values($nnP, $jsonP)";
//echo "ReqIns: $reqIns\n";
$this->getBdd()->executer($reqIns);
}
}
}
}
}
}
 
class ZgFrDepartements {
626,4 → 762,4
return (int)self::$departements[$n][3];
}
}
?>
?>