From e5b201eb5ed48a0b3bda9e83e49fa97e80100a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Antoine=20Dupr=C3=A9?= Date: Mon, 3 Feb 2025 14:21:07 +0100 Subject: [PATCH 1/2] Ajout feat. liens importants pour fiche taxon --- atlas/atlasRoutes.py | 13 +++++++++++++ atlas/configuration/config.py.example | 20 +++++++++++++++++++ atlas/modeles/repositories/vmMedias.py | 11 +++++++++++ atlas/static/css/ficheEspece.css | 26 +++++++++++++++++++++++++ atlas/templates/speciesSheet/_main.html | 14 +++++++++++++ 5 files changed, 84 insertions(+) diff --git a/atlas/atlasRoutes.py b/atlas/atlasRoutes.py index 21b95163d..23f86898b 100644 --- a/atlas/atlasRoutes.py +++ b/atlas/atlasRoutes.py @@ -251,6 +251,18 @@ def ficheEspece(cd_nom): articles = vmMedias.getLinks_and_articles( connection, cd_ref, current_app.config["ATTR_LIEN"], current_app.config["ATTR_PDF"] ) + + liens_importants = [] + if current_app.config.get("TYPES_MEDIAS_LIENS_IMPORTANTS"): + liens_config = current_app.config["TYPES_MEDIAS_LIENS_IMPORTANTS"] + media_type_ids = list({t["type_media_id"] for t in liens_config}) + liens_importants = vmMedias.get_liens_importants(connection, cd_ref, media_type_ids) + icones_by_media_type = { + i["type_media_id"]: i["icon"] for i in liens_config if i.get("icon") + } + for lien in liens_importants: + lien["icon"] = icones_by_media_type.get(lien["id_type"], "") + taxonDescription = vmCorTaxonAttribut.getAttributesTaxon( connection, cd_ref, @@ -281,6 +293,7 @@ def ficheEspece(cd_nom): photoCarousel=photoCarousel, videoAudio=videoAudio, articles=articles, + liensImportants=liens_importants, taxonDescription=taxonDescription, observers=observers, organisms=organisms, diff --git a/atlas/configuration/config.py.example b/atlas/configuration/config.py.example index bd7da925e..780e5f483 100644 --- a/atlas/configuration/config.py.example +++ b/atlas/configuration/config.py.example @@ -236,6 +236,26 @@ ATTR_VIMEO = 9 # Coupe le nom_vernaculaire à la 1ere virgule sur les fiches espèces SPLIT_NOM_VERN = True +# Permet de définir des types de médias TaxHub comme « Liens importants » de la fiche taxon. +# Les liens importants sont mis en avant dans l'affichage de la fiche. +# - `type_media_id` : l'ID d'un type de média définit dans l'instance TaxHub. +# - `icon` (optionnel) : l'URL d'une image à ajouter sur le bouton du lien. +# +# Exemple de configuration : +# (les types médias et les icones sont des exemples et n'existent pas de base +# sur une instance Atlas/TaxHub) +TYPES_MEDIAS_LIENS_IMPORTANTS = [ + { + 'type_media_id': 10, # Lien participation campagne d'observation + 'icon': '/static/custom/images/jumelles.svg' + }, + { + 'type_media_id': 11, # Lien vers fiche focus territoire + 'icon': '/static/custom/images/logo_fiche_focus.png' + } +] + + ############################################ #### FICHE COMMUNE ET RANG TAXONOMIQUE ##### ############################################ diff --git a/atlas/modeles/repositories/vmMedias.py b/atlas/modeles/repositories/vmMedias.py index 0d58b6cab..3052b7843 100644 --- a/atlas/modeles/repositories/vmMedias.py +++ b/atlas/modeles/repositories/vmMedias.py @@ -160,6 +160,17 @@ def getLinks_and_articles(connection, cd_ref, id3, id4): return [_format_media(r) for r in req] +def get_liens_importants(connection, cd_ref, media_ids): + sql = """ + SELECT * + FROM atlas.vm_medias + WHERE id_type = ANY(:media_ids) AND cd_ref = :thiscdref + ORDER BY date_media DESC + """ + req = connection.execute(text(sql), thiscdref=cd_ref, media_ids=media_ids) + return [_format_media(r) for r in req] + + def getPhotosGallery(connection, id1, id2): sql = """ SELECT m.*, t.nom_vern, t.lb_nom, t.nb_obs diff --git a/atlas/static/css/ficheEspece.css b/atlas/static/css/ficheEspece.css index 40dac6a8e..5a81de9b2 100644 --- a/atlas/static/css/ficheEspece.css +++ b/atlas/static/css/ficheEspece.css @@ -138,6 +138,32 @@ p.imgDescription.main { padding: 0px; } +/* Liens importants */ + +.liens-importants-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.7rem 0; +} + +.lien-important { + display: flex; + background-color: var(--main-color); + color: white; + text-decoration: none; + border-radius: 10px; + padding: 0.5rem 1rem; + gap: 0.5rem; + align-items: center; +} + +.lien-important:hover { + background-color: var(--second-color); + color: white; + text-decoration: none; +} + /*Medias*/ i.btn-more { diff --git a/atlas/templates/speciesSheet/_main.html b/atlas/templates/speciesSheet/_main.html index 08715e684..232ef366d 100644 --- a/atlas/templates/speciesSheet/_main.html +++ b/atlas/templates/speciesSheet/_main.html @@ -71,6 +71,20 @@
{% include 'templates/speciesSheet/identityCard.html' %} + {% if liensImportants %} +
+ {% for lien in liensImportants %} + + {% if lien.icon %} + + {% endif %} + {{ lien.title }} + + {% endfor %} +
+ {% endif %} {% include 'templates/speciesSheet/map.html' %} {% include 'templates/speciesSheet/otherInformations.html' %}
From 547fc1d8bb43dced99a1dc40eea16088e8b403b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Antoine=20Dupr=C3=A9?= Date: Wed, 5 Feb 2025 16:56:43 +0100 Subject: [PATCH 2/2] fixup! Ajout feat. liens importants pour fiche taxon - ajout info pour personnaliser styles des liens dans doc config --- atlas/configuration/config.py.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/atlas/configuration/config.py.example b/atlas/configuration/config.py.example index 780e5f483..405571165 100644 --- a/atlas/configuration/config.py.example +++ b/atlas/configuration/config.py.example @@ -241,6 +241,9 @@ SPLIT_NOM_VERN = True # - `type_media_id` : l'ID d'un type de média définit dans l'instance TaxHub. # - `icon` (optionnel) : l'URL d'une image à ajouter sur le bouton du lien. # +# Une classe CSS `lien-important-type-XX` est ajoutée sur l'élément HTML du lien avec XX l'ID du type +# de média. Cela permet de personnaliser l'apparence des liens, par type, dans `custom.css`. +# # Exemple de configuration : # (les types médias et les icones sont des exemples et n'existent pas de base # sur une instance Atlas/TaxHub)