Changeset 109384 in spip-zone


Ignore:
Timestamp:
Mar 8, 2018, 7:53:41 PM (21 months ago)
Author:
eric@…
Message:

Préservation des taxons créés lors de l'ajout d'une espèce (taxons non importés).

Location:
_plugins_/taxonomie/trunk
Files:
3 edited

Legend:

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

    r109300 r109384  
    170170
    171171/**
    172  * Extrait, de la table `spip_taxons`, la liste des taxons d'un règne donné ayant fait l'objet
    173  * d'une modification manuelle.
     172 * Extrait, de la table `spip_taxons`, la liste des taxons d'un règne donné - importés via un fichier ITIS -
     173 * ayant fait l'objet d'une modification manuelle et la liste des taxons créés lors de l'ajout d'une espèce et donc
     174 * non importés avec le fichier ITIS.
    174175 *
    175176 * @package SPIP\TAXONOMIE\TAXON
     
    181182 *
    182183 * @return array
    183  *        Liste des taxons modifiées manuellement. Chaque élément de la liste est un tableau
    184  *        composé des index `tsn`, `nom_commun`, `descriptif`.
    185  */
    186 function taxon_preserver_editions($regne) {
    187 
     184 *        Liste des taxons modifiées manuellement et créés suite à l'ajout d'une espèce.
     185 *        Chaque élément de la liste est un tableau composé, pour les taxons modifiés manuellement des index
     186 *        `tsn`, `nom_commun`, `descriptif` et pour les taxons créés via une espèce de tous les champs du objet
     187 *        taxon, à l'exception de l'id (`id_taxon`) et de la date de mise à jour (`maj`).
     188 */
     189function taxon_preserver($regne) {
     190
     191        // Récupération de la liste des taxons importés via le fichier ITIS du règne concerné et édités manuellement.
     192        // Ces champs éditables (nom_commun, descriptif) seront réinjectés après le chargement du règne via un update.
     193        $from = array('spip_taxons');
    188194        $select = array('tsn', 'nom_commun', 'descriptif');
    189         $where = array('regne=' . sql_quote($regne), 'edite=' . sql_quote('oui'));
    190         $taxons = sql_allfetsel($select, 'spip_taxons', $where);
     195        $where = array('regne=' . sql_quote($regne), 'edite=' . sql_quote('oui'), 'importe=' . sql_quote('oui'));
     196        $taxons['edites'] = sql_allfetsel($select, $from, $where);
     197
     198        // Récupération de la liste des taxons non importés via le fichier ITIS du règne concerné mais créés lors de l'ajout
     199        // d'une espèce.
     200        // Ces taxons seront réinjectés après le chargement du règne via un create.
     201        // -- on récupère tous les champs du taxons sauf ceux qui seront mis à jour automatique lors de l'insertion de
     202        //    l'objet en BD (id_taxon, maj).
     203        include_spip('base/objets');
     204        $description_table = lister_tables_objets_sql('spip_taxons');
     205        $select = array_diff(array_keys($description_table['field']), array('id_taxon', 'maj'));
     206        $where = array('regne=' . sql_quote($regne), 'importe=' . sql_quote('non'));
     207        $taxons['crees'] = sql_allfetsel($select, $from, $where);
    191208
    192209        return $taxons;
  • _plugins_/taxonomie/trunk/taxonomie_fonctions.php

    r109345 r109384  
    2121 *
    2222 * @uses regne_existe()
    23  * @uses taxon_preserver_editions()
     23 * @uses taxon_preserver()
    2424 * @uses regne_vider()
    2525 * @uses itis_read_hierarchy()
     
    3838
    3939        $retour = false;
    40         $taxons_edites = array();
     40        $taxons_preserves = array();
    4141
    4242        // Vérifie si le règne existe bien dans la table spip_taxons
     
    4545        if ($regne_existe) {
    4646                // Sauvegarde des taxons ayant été modifiés manuellement suite à leur création automatique.
    47                 $taxons_edites = taxon_preserver_editions($regne);
     47                $taxons_preserves = taxon_preserver($regne);
    4848
    4949                // Vider le règne avant de le recharger
     
    9393                }
    9494
    95                 // Ré-injection des taxons modifiés manuellement
     95                // Ré-injection des modifications manuelles effectuées sur les taxons importés via le fichier ITIS du règne.
    9696                // -- descriptif: remplacement
    9797                // -- nom commun: merge en considérant que la mise à jour manuelle est prioritaire
    9898                // -- edite: oui, on conserve bien sur l'indicateur d'édition
    99                 if ($taxons_edites) {
    100                         foreach ($taxons_edites as $_taxon_edite) {
     99                if ($taxons_preserves['edites']) {
     100                        foreach ($taxons_preserves['edites'] as $_taxon_edite) {
    101101                                if (($tsn = $_taxon_edite['tsn']) and (array_key_exists($tsn, $taxons))) {
    102102                                        $taxons[$tsn]['descriptif'] = $_taxon_edite['descriptif'];
     
    109109                }
    110110
     111                // On formate le taxon pour l'insertion en BD.
     112                $taxons = array_values($taxons);
     113
     114                // Ré-injection des taxons créés lors de l'ajout d'une espèce et donc jamais importés via le fichier ITIS
     115                // du règne.
     116                if ($taxons_preserves['crees']) {
     117                        $taxons = array_merge($taxons, $taxons_preserves['crees']);
     118                }
     119
    111120                // Insertion dans la base de données
    112                 $retour = sql_insertq_multi('spip_taxons', array_values($taxons));
     121                $retour = sql_insertq_multi('spip_taxons', $taxons);
    113122                if ($retour) {
    114123                        // Insérer les informations de chargement dans une meta propre au règne.
  • _plugins_/taxonomie/trunk/taxonomie_pipelines.php

    r108386 r109384  
    3434                if ($action == 'modifier') {
    3535                        // -- On positionne l'indicateur d'édition à oui, ce qui permettra d'éviter lors
    36                         //    d'un rechargement du règne de perdre les modifications manuelles
     36                        //    d'un rechargement du règne de perdre les modifications manuelles pour les taxons importés
     37                        //    via le fichier ITIS.
     38                        //    On met aussi à jour les taxons créés lors d'un ajout d'une espèce et donc non importés,
     39                        //    même si cet indicateur n'a que peu d'intérêt dans ce cas.
    3740                        $flux['data']['edite'] = 'oui';
    3841                }
Note: See TracChangeset for help on using the changeset viewer.