Changeset 114311 in spip-zone


Ignore:
Timestamp:
Mar 3, 2019, 12:07:02 PM (6 months ago)
Author:
eric@…
Message:

Factoriser les traitement d'importation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/taxonomie_ieconfig.php

    r114310 r114311  
    331331        if (!empty($importation['donnees']['edites'])) {
    332332                foreach ($importation['donnees']['edites'] as $_regne => $_action) {
    333                         // Récupération des taxons édités du fichier d'import.
    334                         $taxons_import = $contenu_import[$_regne]['taxons']['edites'];
    335 
    336                         // On boucle sur les taxons édités du règne et on les traite en fonction de l'action choisie.
    337                         foreach ($taxons_import as $_taxon_import) {
    338                                 // Pour chaque taxon on vérifié si il existe en base et si il est déjà édité. On récupère en outre
    339                                 // l'id pour utiliser l'API objet.
    340                                 $select = array('id_taxon', 'edite');
    341                                 $tsn = $_taxon_import['tsn'];
    342                                 $where = array('tsn=' . intval($tsn));
    343                                 if ($taxon_base = sql_fetsel($select, $from, $where)) {
    344                                         if (($_action == 'fusionner')
    345                                         or (($_action == 'ajouter') and ($taxon_base['edite'] != 'oui'))) {
    346                                                 // On modifie le taxon avec l'API qui appellera elle-même les pipelines pre_edition
    347                                                 // pour la mise à jour de l'indicateur edite à oui et post_edition pour la modification
    348                                                 // du statut qui dans ce cas ne produira rien.
    349                                                 objet_modifier('taxon', $taxon_base['id_taxon'], $_taxon_import);
    350                                         }
    351                                 }
    352                         }
     333                        // Importation des taxons édités du fichier d'import selon l'action requise.
     334                        taxonomie_importer_taxons($contenu_import[$_regne]['taxons']['edites'], $_action, true);
    353335                }
    354336        }
     
    358340                foreach ($importation['donnees']['especes'] as $_regne => $_action) {
    359341                        // On commence par les taxons entre genre et espèce pour être sur que l'institution fonctionne.
    360                         // Récupération des taxons entre genre et espèce du fichier d'import.
    361                         $taxons_import = $contenu_import[$_regne]['taxons']['crees'];
    362 
    363                         // On boucle sur les taxons et on les traite en fonction de l'action choisie de la même façon
    364                         // que l'on fera avec les espèces.
    365                         foreach ($taxons_import as $_taxon_import) {
    366                                 // Pour chaque taxon on vérifié si il existe en base et si il est déjà édité. On récupère en outre
    367                                 // l'id pour utiliser l'API objet.
    368                                 $select = array('id_taxon', 'edite');
    369                                 $tsn = $_taxon_import['tsn'];
    370                                 $where = array('tsn=' . intval($tsn));
    371                                 if ($taxon_base = sql_fetsel($select, $from, $where)) {
    372                                         if (($_taxon_import['edite'] == 'oui')
    373                                         and (($_action == 'fusionner')
    374                                                 or (($_action == 'ajouter') and ($taxon_base['edite'] != 'oui')))) {
    375                                                 // On modifie l'espèce avec l'API qui appellera elle-même les pipelines pre_edition
    376                                                 // pour la mise à jour de l'indicateur edite à oui et post_edition pour la modification
    377                                                 // du statut qui dans ce cas ne produira rien.
    378                                                 objet_modifier('taxon', $taxon_base['id_taxon'], $_taxon_import);
    379                                         }
    380                                 } else {
    381                                         objet_inserer('taxon', null, $_taxon_import);
    382                                 }
     342                        if (!empty($contenu_import[$_regne]['taxons']['crees'])) {
     343                                taxonomie_importer_taxons($contenu_import[$_regne]['taxons']['crees'], $_action);
    383344                        }
    384345
    385346                        // Maintenant que les taxons entre genre et espèce ont été rajoutés on boucle sur les espèces et descendants.
    386                         // Récupération des espèces et descendants du fichier d'import.
    387                         $especes_import = $contenu_import[$_regne]['especes'];
    388 
    389                         // On boucle sur les taxons édités du règne et on les traite en fonction de l'action choisie.
    390                         foreach ($especes_import as $_espece_import) {
    391                                 // On force l'espèce au statut prop après modification.
    392                                 $_espece_import['statut'] = 'prop';
    393 
    394                                 // Pour chaque taxon on vérifié si il existe en base et si il est déjà édité. On récupère en outre
    395                                 // l'id pour utiliser l'API objet.
    396                                 $select = array('id_taxon', 'edite');
    397                                 $tsn = $_espece_import['tsn'];
    398                                 $where = array('tsn=' . intval($tsn));
    399                                 if ($taxon_base = sql_fetsel($select, $from, $where)) {
    400                                         if (($_action == 'fusionner')
    401                                         or (($_action == 'ajouter') and ($taxon_base['edite'] != 'oui'))) {
    402                                                 // On modifie l'espèce avec l'API qui appellera elle-même les pipelines pre_edition
    403                                                 // pour la mise à jour de l'indicateur edite à oui et post_edition pour la modification
    404                                                 // du statut qui dans ce cas ne produira rien.
    405                                                 objet_modifier('taxon', $taxon_base['id_taxon'], $_espece_import);
    406                                         }
    407                                 } else {
    408                                         objet_inserer('taxon', null, $_espece_import);
    409                                 }
    410                         }
     347                        taxonomie_importer_taxons($contenu_import[$_regne]['especes'], $_action);
    411348                }
    412349        }
     
    418355        return $retour;
    419356}
     357
     358
     359function taxonomie_importer_taxons($taxons, $action, $taxons_edites = false) {
     360
     361        // On boucle sur les taxons édités du règne et on les traite en fonction de l'action choisie.
     362        foreach ($taxons as $_taxon) {
     363                // On force le statut à prop pour une espèce.
     364                if ($_taxon['espece'] == 'oui') {
     365                        $_taxon['statut'] = 'prop';
     366                }
     367
     368                // Pour chaque taxon on vérifié si il existe en base et si il est déjà édité.
     369                // On récupère en outre l'id pour utiliser l'API objet.
     370                $select = array('id_taxon', 'edite');
     371                $where = array('tsn=' . intval($_taxon['tsn']));
     372                if ($taxon_base = sql_fetsel($select, 'spip_taxons', $where)) {
     373                        if (($action == 'fusionner')
     374                        or (($action == 'ajouter') and ($taxon_base['edite'] != 'oui'))) {
     375                                // On modifie l'espèce avec l'API qui appellera elle-même les pipelines pre_edition
     376                                // pour la mise à jour de l'indicateur edite à oui et post_edition pour la modification
     377                                // du statut qui dans ce cas ne produira rien.
     378                                objet_modifier('taxon', $taxon_base['id_taxon'], $_taxon);
     379                        }
     380                } elseif (!$taxons_edites) {
     381                        objet_inserer('taxon', null, $_taxon);
     382                }
     383        }
     384}
Note: See TracChangeset for help on using the changeset viewer.