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,8 → 515,125 |
$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 { |
static private $departements = |
array( |