PnX-SI / GeoNature-atlas

Application WEB permettant de générer des fiches espèces publiques à partir d'observations faune/flore
GNU General Public License v3.0
44 stars 46 forks source link

Personnaliser les attributs du bloc "Informations espèce" #412

Open jpm-cbna opened 2 years ago

jpm-cbna commented 2 years ago

Il serait intéressant de pouvoir sélectionner les attributs TaxHub que l'on veut voir s'afficher dans le bloc "Informations espèce" de la fiche espèce.

Pour ce faire, je propose de remplacer les paramètres de config ATTR_DESC, ATTR_COMMENTAIRE, ATTR_MILIEU et ATTR_CHOROLOGIE par un nouveau paramètre DISPLAYED_ATTR. Ce nouveau paramètre contiendra une liste de codes d'attribut TaxHub (des valeurs du champ bib_attributs.nom_attribut).

L'ordre des codes déterminera l'ordre des onglets dans le bloc.

La valeur du champ bib_attributs.label_attribut sera utilisée par défaut pour le nom des onglets.

Par défaut la liste du paramètre DISPLAYED_ATTR correspondra aux attributs actuellement utilisés soit : ["atlas_description", "atlas_commentaire", "atlas_milieu", "atlas_chorologie"].

Pour réaliser les changements ci-dessus, il est nécessaire de modifier la vue matérialisée vm_cor_taxon_attribut. Nous pourrons en profité pour corriger son nom en vm_taxon_attribute. Son code SQL:

CREATE MATERIALIZED VIEW atlas.vm_taxon_attribute AS
    SELECT cta.cd_ref,
        ba.nom_attribut AS code,
        ba.label_attribut AS title,
        CASE
            WHEN ba.type_attribut = 'text' AND ba.type_widget = 'select'
                THEN REPLACE(cta.valeur_attribut, '&', '|')
            ELSE cta.valeur_attribut
        END AS "value"
    FROM taxonomie.cor_taxon_attribut AS cta
        JOIN taxonomie.bib_attributs AS ba
            ON cta.id_attribut = ba.id_attribut
    WHERE ba.nom_attribut IN ('atlas_description', 'atlas_commentaire', 'atlas_milieu', 'atlas_chorologie')
        AND cta.valeur_attribut IS NOT NULL
        AND cta.valeur_attribut != '' ;

CREATE UNIQUE INDEX ON atlas.vm_taxon_attribute (cd_ref, code);

Elle nécessite l'ajout de la foreign data table taxonomie.bib_attributs.

Le script d'installation se chargera comme actuellement de remplacer la ligne WHERE ba.nom_attribut IN ('atlas_description', 'atlas_commentaire', 'atlas_milieu', 'atlas_chorologie') par les codes définis dans le paramètre du fichier settings.ininommé displayed_attr. Ex.: displayed_attr="'atlas_description', 'atlas_commentaire', 'atlas_milieu', 'atlas_chorologie'"

Un script SQL de mise à jour des VM sera proposé.

gildeluermoz commented 2 years ago

Et un champ booléen directement dans la table bib_attributs, genre is_displayed_in_atlas ? Est ce que ce ne serait pas plus simple ? Ce n'est peut être pas générique mais cette table est déjà très largement dessinée pour l'Atlas.

camillemonchicourt commented 2 years ago

J'aime mieux la solution où on liste les attributs à afficher au niveau de la configuration de l'atlas. C'est plus simple et souple, et ça évite à TaxHub de se soucier de l'usage.

Par contre, à terme, il faudra penser penser au fonctionnement multilingue. Car dans la 1.5.0 on a traduit les noms des attributs côté Atlas, mais pas les contenus. En rendant les attributs plus génériques, on ne pourra plus les traduire leurs intitulés au niveau de l'atlas, à moins de gérer les intitulés dans la configuration.

jpm-cbna commented 2 years ago

Par contre, à terme, il faudra penser penser au fonctionnement multilingue.

Dans ma proposition, c'est le champ "label_name" qui sert au titre de l'onglet. La valeur du champ est passé dans la fonction _(). Du coup, si l'on ajoute les valeurs du champ "label_name" au fichier ".po" la traduction devrait fonctionner. Mais je n'ai pas tester...

Car dans la 1.5.0 on a traduit les noms des attributs côté Atlas, mais pas les contenu

Oui, la traduction des contenus, c'est un peu plus compliqué. A mon avis, là, cela nécessite de les stocker dans la base de données. Nous ne pourrons pas utiliser les fichiers ".po". Il faudra donc revoir la table cor_taxon_attribut en rajoutant une nouvelle colonne lang par exemple.