Changeset 114310 in spip-zone


Ignore:
Timestamp:
Mar 3, 2019, 11:03:49 AM (6 months ago)
Author:
eric@…
Message:

Mise au point de l'importation de données et utilisation de l'API objet quand cela est possible.

Location:
_plugins_/taxonomie/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/formulaires/creer_espece.php

    r114150 r114310  
    366366                include_spip('base/objets');
    367367                $description_table = lister_tables_objets_sql('spip_taxons');
    368                 $champs['spip_taxons'] = $description_table['field'];
     368                $champs = $description_table['field'];
    369369
    370370                // On range la liste des taxons de plus haut rang (genre) à celui de plus petit rang et on ajoute le
     
    384384                                // Les parents non créés sont donc soit des taxons comme les sous-genres etc, soit un taxon de rang
    385385                                // espèce ou inférieur.
    386                                 // -- On récupère le bloc des informations ITIS du taxon à créer et sa table de destination.
    387                                 $table = 'spip_taxons';
     386                                // -- On récupère le bloc des informations ITIS du taxon à créer.
    388387                                if (isset($_taxon['deja_cree'])) {
    389388                                        // C'est un ascendant de l'espèce
     389                                        include_spip('services/itis/itis_api');
    390390                                        $taxon = itis_get_record($_taxon['tsn']);
    391391                                } else {
     
    394394                                }
    395395                                // -- On ne retient que les index correspondant à des champs de la table concernée.
    396                                 $taxon = array_intersect_key($taxon, $champs[$table]);
     396                                $taxon = array_intersect_key($taxon, $champs);
    397397
    398398                                // On formate le nom commun en multi.
     
    423423
    424424                                // Insertion du taxon dans la table idoine.
    425                                 $id_taxon = sql_insertq($table, $taxon);
     425                                include_spip('action/editer_objet');
     426                                $id_taxon = objet_inserer('taxon', null, $taxon);
    426427                                if ($id_taxon) {
    427428                                        if (!isset($_taxon['deja_cree'])) {
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r114209 r114310  
    6666        'import_configuration_label' => 'La configuration du plugin',
    6767        'import_configuration_labelcase' => 'Remplacer la configuration actuelle du plugin Taxonomie par celle du fichier d’import',
    68 
    69         'import_taxons_edites_ajouter' => 'Importer uniquement les données des taxons du fichier d’import qui ne correspondent à aucun taxon modifié de la base',
     68        'import_taxons_edites_ajouter' => 'Importer les taxons du fichier d’import en préservant les modifications déjà effectuées sur les taxons de la base',
    7069        'import_taxons_edites_explication' => 'Il existe, dans la base du site, des taxons du règne au genre dont certains champs ont déjà été modifiés manuellement.',
    7170        'import_taxons_edites_avertissement' => 'La base du site ne contient aucun taxon du règne au genre modifié manuellement.',
    72         'import_taxons_edites_fusionner' => 'Importer toutes les données des taxons du fichier d\'import',
     71        'import_taxons_edites_fusionner' => 'Importer les taxons du fichier d\'import sans préserver les modifications des taxons de la base',
    7372        'import_taxons_edites_label' => 'Les taxons du règne au genre modifiés manuellement',
    7473        'import_especes_ajouter' => 'Importer uniquement les espèces du fichier d’import qui n\'existent pas encore dans la base',
    7574        'import_especes_explication' => 'Il existe déjà des espèces dans la base du site.',
    7675        'import_especes_avertissement' => 'La base du site ne contient aucune espèce.',
    77         'import_especes_fusionner' => 'Importer toutes les espèces du fichier d’import',
     76        'import_especes_fusionner' => 'Importer toutes les espèces du fichier d’import sans préserver les données des espèces déjà créées dans la base',
    7877        'import_especes_label' => 'Les espèces et descendants',
    7978        'import_regne_avertissement' => 'Aucun règne n\'est encore chargé dans le site. Il n\'est donc pas possible d\'importer des données. Veuillez charger au moins un règne avant de faire une importation de taxons.',
  • _plugins_/taxonomie/trunk/taxonomie_ieconfig.php

    r114173 r114310  
    194194                // On récupère les demandes d'importation.
    195195                $importation['configuration'] = _request('taxonomie_import_config');
    196                 $importation['pages_explicites'] = _request('noizetier_import_pages');
    197                 $importation['compositions_virtuelles'] = _request('noizetier_import_compositions');
    198                 $importation['noisettes'] = _request('noizetier_import_noisettes');
     196
     197                include_spip('taxonomie_fonctions');
     198                $importation['donnees'] = array();
     199                $regnes = regne_repertorier();
     200                foreach ($regnes as $_regne) {
     201                        if ($valeur = _request("${_regne}_import_edites")) {
     202                                $importation['donnees']['edites'][$_regne] = $valeur;
     203                        }
     204                        if ($valeur = _request("${_regne}_import_especes")) {
     205                                $importation['donnees']['especes'][$_regne] = $valeur;
     206                        }
     207                }
    199208
    200209                // Si au moins l'une est requise on appelle la fonction d'import.
    201210                if ($importation['configuration']
    202                 or $importation['pages_explicites']
    203                 or $importation['compositions_virtuelles']
    204                 or $importation['noisettes']) {
     211                or $importation['donnees']) {
    205212                        if (!taxonomie_ieconfig_importer($importation, $flux['args']['config']['taxonomie'])) {
    206213                                $flux['data'] .= _T('taxonomie:ieconfig_probleme_import_config').'<br />';
     
    271278                        // Extraction des taxons du règne au genre édités manuellement par les utilisateurs ou créés lors d'un
    272279                        // ajout d'espèce.
     280
    273281                        // On sauvegarde les champs éditables uniquement des édités et tous les champs pour les autres.
    274282                        $export[$_regne]['taxons'] = taxon_preserver($_regne);
     
    318326        }
    319327
     328        // Les taxons du règne au genre édités.
     329        include_spip('action/editer_objet');
     330        $from ='spip_taxons';
     331        if (!empty($importation['donnees']['edites'])) {
     332                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                        }
     353                }
     354        }
     355
     356        // Les espèces et les éventuels ascendants entre genre et espèce.
     357        if (!empty($importation['donnees']['especes'])) {
     358                foreach ($importation['donnees']['especes'] as $_regne => $_action) {
     359                        // 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                                }
     383                        }
     384
     385                        // 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                        }
     411                }
     412        }
     413
    320414        // On invalide le cache
    321415        include_spip('inc/invalideur');
  • _plugins_/taxonomie/trunk/taxonomie_pipelines.php

    r113820 r114310  
    7474                        if ($action == 'instituer') {
    7575                                // On vérifie qu'on institue l'espèce de 'prop' à 'publie'. Si c'est le cas, alors on vérifie
    76                                 // qu'il est aussi nécessaire d'instituer à 'publie' les enfants de type espèce encore à prop.
     76                                // qu'il est aussi nécessaire d'instituer à 'publie' les ascendants de type espèce encore à prop.
    7777                                $statut_nouveau = $flux['data']['statut'];
    7878                                $statut_ancien = $flux['args']['statut_ancien'];
Note: See TracChangeset for help on using the changeset viewer.