From 9d0713c69587c7646d7a7ae44a910c8410d6b6dd Mon Sep 17 00:00:00 2001 From: Sylvain Boissel Date: Wed, 5 Mar 2025 10:58:17 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20d=E2=80=99une=20page=20"Plan=20du=20sit?= =?UTF-8?q?e"=20(#279)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First version * Fix tests * Update translations * Fix XML sitemap URL * Don't lazy load translations in URLS --- config/urls.py | 5 +- .../locale/fr/LC_MESSAGES/django.mo | Bin 23964 -> 24091 bytes .../locale/fr/LC_MESSAGES/django.po | 26 ++++++-- .../content_manager/blocks/sitemap_entry.html | 20 ++++++ .../content_manager/sitemap_page.html | 33 ++++++++++ content_manager/tests/test_views.py | 60 +++++++++++++++--- content_manager/urls.py | 5 +- content_manager/views.py | 24 +++++++ dashboard/locale/fr/LC_MESSAGES/django.mo | Bin 2732 -> 2732 bytes dashboard/locale/fr/LC_MESSAGES/django.po | 32 +++++----- locale/fr/LC_MESSAGES/django.mo | Bin 1940 -> 1977 bytes locale/fr/LC_MESSAGES/django.po | 16 +++-- poetry.lock | 14 +++- proconnect/locale/fr/LC_MESSAGES/django.mo | Bin 1530 -> 1530 bytes proconnect/locale/fr/LC_MESSAGES/django.po | 18 +++--- pyproject.toml | 1 + templates/blocks/footer.html | 3 + 17 files changed, 204 insertions(+), 53 deletions(-) create mode 100644 content_manager/templates/content_manager/blocks/sitemap_entry.html create mode 100644 content_manager/templates/content_manager/sitemap_page.html diff --git a/config/urls.py b/config/urls.py index 37071adb..81866572 100644 --- a/config/urls.py +++ b/config/urls.py @@ -11,10 +11,7 @@ from proconnect import urls as oidc_urls urlpatterns = [ - path( - "sitemap.xml", - sitemap, - ), + path("sitemap.xml", sitemap, name="xml_sitemap"), path(settings.WAGTAILADMIN_PATH, include(wagtailadmin_urls)), path("documents/", include(wagtaildocs_urls)), path("api/v2/", api_router.urls), diff --git a/content_manager/locale/fr/LC_MESSAGES/django.mo b/content_manager/locale/fr/LC_MESSAGES/django.mo index 7359ef4fb27789e277494d76cfd58d9abae9744c..6dcec0929004566ca1d15a9b86a0a60764030895 100644 GIT binary patch delta 6099 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 Leo4N@C@}v6`uMN_ delta 5983 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 diff --git a/content_manager/locale/fr/LC_MESSAGES/django.po b/content_manager/locale/fr/LC_MESSAGES/django.po index fb0a51cd..745446ab 100644 --- a/content_manager/locale/fr/LC_MESSAGES/django.po +++ b/content_manager/locale/fr/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 17:45+0100\n" -"PO-Revision-Date: 2025-02-11 18:22+0100\n" +"POT-Creation-Date: 2025-03-05 10:43+0100\n" +"PO-Revision-Date: 2025-03-05 10:47+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -595,7 +595,7 @@ msgstr "Informations de contact" #: content_manager/models.py:136 content_manager/models.py:150 #: content_manager/models.py:156 #: content_manager/templates/content_manager/tags_list_page.html:49 -#: content_manager/views.py:46 content_manager/views.py:77 +#: content_manager/views.py:47 content_manager/views.py:78 msgid "Tags" msgstr "Étiquettes" @@ -1311,6 +1311,7 @@ msgstr "Aucun article trouvé." msgid "See all posts" msgstr "Voir tous les articles" +#: content_manager/templates/content_manager/blocks/button.html:6 #: content_manager/templates/content_manager/blocks/card_horizontal.html:11 #: content_manager/templates/content_manager/blocks/card_vertical.html:11 #: content_manager/templates/content_manager/blocks/contact_card_vertical.html:14 @@ -1359,6 +1360,10 @@ msgstr "Visibilité de la page restreinte par mot de passe" msgid "Page with restricted visibility" msgstr "Visibilité de la page restreinte" +#: content_manager/templates/content_manager/blocks/sitemap_entry.html:2 +msgid "Restricted access" +msgstr "Accès restreint" + #: content_manager/templates/content_manager/blocks/stepper.html:8 #, python-format msgid "Step %(current_step)s of %(total_steps)s" @@ -1402,6 +1407,11 @@ msgstr "Afficher" msgid "Continue" msgstr "Continuer" +#: content_manager/templates/content_manager/sitemap_page.html:18 +#: content_manager/views.py:101 +msgid "Sitemap" +msgstr "Plan du site" + #: content_manager/templates/content_manager/widgets/dsfr-icon-picker-widget.html:9 msgid "Select icon" msgstr "Sélectionner une icône" @@ -1410,16 +1420,20 @@ msgstr "Sélectionner une icône" msgid "search/" msgstr "recherche/" -#: content_manager/views.py:52 +#: content_manager/urls.py:9 +msgid "sitemap/" +msgstr "plan-du-site/" + +#: content_manager/views.py:53 msgid "List of all the tags." msgstr "Liste de toutes les étiquettes." -#: content_manager/views.py:73 +#: content_manager/views.py:74 #, python-brace-format msgid "Pages tagged with {tag}" msgstr "Pages avec l’étiquette {tag}" -#: content_manager/views.py:82 +#: content_manager/views.py:83 #, python-brace-format msgid "List of pages tagged with {tag}" msgstr "Liste de pages avec l’étiquette {tag}" diff --git a/content_manager/templates/content_manager/blocks/sitemap_entry.html b/content_manager/templates/content_manager/blocks/sitemap_entry.html new file mode 100644 index 00000000..ed10e149 --- /dev/null +++ b/content_manager/templates/content_manager/blocks/sitemap_entry.html @@ -0,0 +1,20 @@ +{% load wagtailcore_tags i18n %} +{% translate "Restricted access" as restricted_access_label %} +{% for subpage in pagelist.get_children.live %} + {% if not subpage.get_view_restrictions or user.is_authenticated %} +
  • + {% if subpage.get_view_restrictions %} + + {% endif %} + {{ subpage.title }} + {% if subpage.get_view_restrictions %}({{ restricted_access_label }}){% endif %} + {% if subpage.get_children.count > 0 %} +
      + {% include "content_manager/blocks/sitemap_entry.html" with pagelist=subpage %} +
    + {% endif %} +
  • + {% endif %} +{% endfor %} diff --git a/content_manager/templates/content_manager/sitemap_page.html b/content_manager/templates/content_manager/sitemap_page.html new file mode 100644 index 00000000..5bf2ad2a --- /dev/null +++ b/content_manager/templates/content_manager/sitemap_page.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} + +{% load static dsfr_tags wagtailcore_tags wagtailimages_tags i18n %} + +{% block title %} + {{ title }} — {{ settings.content_manager.CmsDsfrConfig.site_title }} +{% endblock title %} + +{% block description %} + +{% endblock description %} + +{% block content %} + {% include "content_manager/blocks/messages.html" %} + +
    + {% dsfr_breadcrumb breadcrumb %} +

    {% translate "Sitemap" %}

    +
    + +
    +
    +
      +
    • + {{ home_page.title }} +
        + {% include "content_manager/blocks/sitemap_entry.html" with pagelist=home_page %} +
      +
    • +
    +
    +
    +{% endblock content %} diff --git a/content_manager/tests/test_views.py b/content_manager/tests/test_views.py index 6d6905e8..817c2e62 100644 --- a/content_manager/tests/test_views.py +++ b/content_manager/tests/test_views.py @@ -1,5 +1,6 @@ from django.contrib.auth import get_user_model from django.core.management import call_command +from django.urls import reverse from wagtail.models import Page from wagtail.rich_text import RichText from wagtail.test.utils import WagtailPageTestCase @@ -7,6 +8,7 @@ from wagtailmenus.models.menus import FlatMenu, MainMenu from content_manager.models import CatalogIndexPage, CmsDsfrConfig, ContentPage, MegaMenu, MegaMenuCategory +from content_manager.services.accessors import get_or_create_content_page from content_manager.utils import get_default_site User = get_user_model() @@ -14,29 +16,69 @@ class ContentPageTestCase(WagtailPageTestCase): def setUp(self): - home = Page.objects.get(slug="home") + home_page = Page.objects.get(slug="home") self.admin = User.objects.create_superuser("test", "test@test.test", "pass") self.admin.save() - self.content_page = home.add_child( + self.public_content_page = home_page.add_child( instance=ContentPage( - title="Page de contenu", - slug="content-page", + title="Page de contenu publique", + slug="public-content-page", owner=self.admin, ) ) - self.content_page.save() + self.public_content_page.save() + self.private_content_page = get_or_create_content_page( + "private-content-page", + title="Page de contenu privée", + body=[("subpageslist", None)], + parent_page=home_page, + restriction_type="login", + ) + self.private_content_page.save() def test_content_page_is_renderable(self): - self.assertPageIsRenderable(self.content_page) + self.assertPageIsRenderable(self.public_content_page) def test_content_page_has_minimal_content(self): - url = self.content_page.url - response = self.client.get(url) + response = self.client.get(self.public_content_page.url) self.assertEqual(response.status_code, 200) self.assertContains( response, - "Page de contenu — Titre du site", + "Page de contenu publique — Titre du site", + ) + + def test_public_content_page_is_in_the_site_map(self): + url = reverse("readable_sitemap") + response = self.client.get(url) + + self.assertContains( + response, + """Page de contenu publique""", + ) + + def test_private_content_page_is_not_rendered_when_logged_out(self): + response = self.client.get(self.private_content_page.url) + + self.assertEqual(response.status_code, 302) + + def test_private_content_page_is_not_in_the_site_map_when_logged_out(self): + url = reverse("readable_sitemap") + response = self.client.get(url) + + self.assertNotContains( + response, + """Page de contenu privée""", + ) + + def test_private_content_page_is_in_the_site_map_when_logged_in(self): + self.client.login(username="test", password="pass") + url = reverse("readable_sitemap") + response = self.client.get(url) + + self.assertContains( + response, + """Page de contenu privée""", ) diff --git a/content_manager/urls.py b/content_manager/urls.py index 99589a31..aafd9db8 100644 --- a/content_manager/urls.py +++ b/content_manager/urls.py @@ -1,11 +1,12 @@ from django.urls import include, path -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext as _ from wagtail import urls as wagtail_urls -from content_manager.views import SearchResultsView, TagsListView, TagView +from content_manager.views import SearchResultsView, SiteMapView, TagsListView, TagView urlpatterns = [ path(_("search/"), SearchResultsView.as_view(), name="cms_search"), + path(_("sitemap/"), SiteMapView.as_view(), name="readable_sitemap"), path("tags//", TagView.as_view(), name="global_tag"), path("tags/", TagsListView.as_view(), name="global_tags_list"), path("", include(wagtail_urls)), diff --git a/content_manager/views.py b/content_manager/views.py index c2cff10a..190b2215 100644 --- a/content_manager/views.py +++ b/content_manager/views.py @@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView, TemplateView from unidecode import unidecode +from wagtail.models import Site from content_manager.models import ContentPage, Tag @@ -82,3 +83,26 @@ def get_context_data(self, **kwargs): context["search_description"] = _("List of pages tagged with {tag}").format(tag=tag.name) return context + + +class SiteMapView(TemplateView): + """ + Readable sitemap for accessibility + (different than the SEO-oriented sitemap.xml) + """ + + template_name = "content_manager/sitemap_page.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + site = Site.find_for_request(self.request) + context["home_page"] = site.root_page + + title = _("Sitemap") + context["title"] = title + + context["breadcrumb"] = { + "links": [], + "current": title, + } + return context diff --git a/dashboard/locale/fr/LC_MESSAGES/django.mo b/dashboard/locale/fr/LC_MESSAGES/django.mo index a99c53f60b1c762fa0ec4a4d08e05361722cd7b5..c9af887101cc3a5b1e580dc5dcaafa92b0c8bef0 100644 GIT binary patch delta 23 fcmZ1@x<+)v239U(T?11ELjx-li_N=OKd}G+SHTBH delta 23 fcmZ1@x<+)v239U3T?11ELsKhblg+zWKd}G+SHK5F diff --git a/dashboard/locale/fr/LC_MESSAGES/django.po b/dashboard/locale/fr/LC_MESSAGES/django.po index d87bf00f..b2000eca 100644 --- a/dashboard/locale/fr/LC_MESSAGES/django.po +++ b/dashboard/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-05 15:33+0100\n" -"PO-Revision-Date: 2025-02-05 15:34+0100\n" +"POT-Creation-Date: 2025-03-05 10:43+0100\n" +"PO-Revision-Date: 2025-03-05 10:48+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -72,33 +72,33 @@ msgstr "Réinitialisez votre mot de passe" msgid "Connection" msgstr "Connexion" -#: dashboard/templates/wagtailadmin/login.html:13 +#: dashboard/templates/wagtailadmin/login.html:15 msgid "Login with" msgstr "S’identifier avec" -#: dashboard/templates/wagtailadmin/login.html:16 +#: dashboard/templates/wagtailadmin/login.html:18 msgid "What is ProConnect?" msgstr "Qu’est-ce que ProConnect ?" -#: dashboard/templates/wagtailadmin/login.html:17 +#: dashboard/templates/wagtailadmin/login.html:19 msgid "Opens a new window" msgstr "Ouvre une nouvelle fenêtre" -#: dashboard/templates/wagtailadmin/login.html:31 +#: dashboard/templates/wagtailadmin/login.html:33 msgid "Log in with your account" msgstr "Se connecter avec son compte" -#: dashboard/templates/wagtailadmin/login.html:34 +#: dashboard/templates/wagtailadmin/login.html:36 msgid "Unless otherwise stated, all fields are mandatory." msgstr "Sauf mention contraire, tous les champs sont obligatoires." -#: dashboard/templates/wagtailadmin/login.html:40 +#: dashboard/templates/wagtailadmin/login.html:42 msgid "Error: Your username and password do not match, please try again." msgstr "" "Erreur : Votre identifiant et mot de passe ne correspondent pas, merci de " "réessayer." -#: dashboard/templates/wagtailadmin/login.html:47 +#: dashboard/templates/wagtailadmin/login.html:49 msgid "" "Error: Your account does not have access to this page. To continue, please " "log in with an authorized account." @@ -106,31 +106,31 @@ msgstr "" "Erreur : Votre compte n’a pas accès à cette page. Pour continuer, merci de " "vous connecter avec un compte autorisé." -#: dashboard/templates/wagtailadmin/login.html:60 +#: dashboard/templates/wagtailadmin/login.html:62 msgid "Username:" msgstr "Identifiant :" -#: dashboard/templates/wagtailadmin/login.html:66 +#: dashboard/templates/wagtailadmin/login.html:68 msgid "Password:" msgstr "Mot de passe :" -#: dashboard/templates/wagtailadmin/login.html:69 +#: dashboard/templates/wagtailadmin/login.html:71 msgid "Show password" msgstr "Afficher le mot de passe" -#: dashboard/templates/wagtailadmin/login.html:74 +#: dashboard/templates/wagtailadmin/login.html:76 msgid "Show" msgstr "Afficher" -#: dashboard/templates/wagtailadmin/login.html:80 +#: dashboard/templates/wagtailadmin/login.html:82 msgid "Forgotten password?" msgstr "Mot de passe oublié ?" -#: dashboard/templates/wagtailadmin/login.html:88 +#: dashboard/templates/wagtailadmin/login.html:90 msgid "Remember me" msgstr "Se souvenir de moi" -#: dashboard/templates/wagtailadmin/login.html:95 +#: dashboard/templates/wagtailadmin/login.html:97 msgid "Connect" msgstr "Se connecter" diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo index 96767d2df24d63eaf0a5835b7d48c8bf7d6b32d3..2e43ff40ae6d37558814704af23d91f41c9a907a 100644 GIT binary patch delta 536 zcmXZXJ4*vW5Ww-h^Gr+(#+(WXM!g_GB?|FzAfjDtMX<0DB={mkCBau=ae~^!@)SRS zU?DadEbK+G*CHZT;#Y`*h5wN~*!%75&CSf7M(?BEhi#oHo}^yCm}b2jym(5cQZX!J zKOSNuUhDH)j1oWS_yt>uztF)tN`AaSsR(vs2s0Q^%2O_zAP1BBLk=zC8MJW@yKoix zK^@@$o}dhNr+va6;u^|8KiUw*q<#XWaS9Wd!Ia@CHO(f@!5U*q;RBRLSJ;j>*oKcN zgS?>>_(sXMN&de8%D_1t&!aS4M7enZTW}X?sgAL8flYAUj?0*#xy(>BWK3>RcNQ~f%7TStLCMC_j};}GF*{}c0}Gd=tdyz^AVPmB;hL`bwe9*pgTSwHUJ zBpzZXUb*+z7?9t&{2BYm->`sRsP)|)X1$of6y~wZtYIOOBrhWOVFrEjdCcM>j^YNg z!Rk1LN2tbbocB0J{(@@g+u24HOmXNi=5U;Uz*Ygk!ja>68yj~HPK2eIu8I5i{>Q4Ou2 r3T|N!)==w@<9Bc0v*uFb)r*V%Zn{z`PZ!G7x!Gzn_J0%cMY8x0Qmrof diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index a583789d..37833814 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-13 17:55+0100\n" -"PO-Revision-Date: 2025-02-13 17:57+0100\n" +"POT-Creation-Date: 2025-03-05 10:43+0100\n" +"PO-Revision-Date: 2025-03-05 10:48+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -41,20 +41,24 @@ msgstr "Suivez-nous
    sur les réseaux sociaux" msgid "Back to home page" msgstr "Retourner à l’accueil" -#: templates/blocks/footer.html:50 +#: templates/blocks/footer.html:45 +msgid "Sitemap" +msgstr "Plan du site" + +#: templates/blocks/footer.html:53 msgid "Cookie settings" msgstr "Gestion des cookies" -#: templates/blocks/footer.html:59 +#: templates/blocks/footer.html:62 msgid "Display settings" msgstr "Paramètres d’affichage" -#: templates/blocks/footer.html:65 templates/blocks/notice.html:4 +#: templates/blocks/footer.html:68 templates/blocks/notice.html:4 #: templates/blocks/share.html:2 msgid "Opens a new window" msgstr "Ouvre une nouvelle fenêtre" -#: templates/blocks/footer.html:67 +#: templates/blocks/footer.html:70 msgid "This website is made with" msgstr "Ce site est fait avec" diff --git a/poetry.lock b/poetry.lock index 78e584a6..2bba3d8f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2300,6 +2300,18 @@ files = [ genshimagic = ["Genshi"] kidmagic = ["kid"] +[[package]] +name = "tblib" +version = "3.0.0" +description = "Traceback serialization library." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tblib-3.0.0-py3-none-any.whl", hash = "sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129"}, + {file = "tblib-3.0.0.tar.gz", hash = "sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6"}, +] + [[package]] name = "telepath" version = "0.3.1" @@ -2646,4 +2658,4 @@ wand = ["Wand (>=0.6,<1.0)"] [metadata] lock-version = "2.1" python-versions = "<4.0,>=3.10" -content-hash = "199f6f16edfc4caec89fff26bd5af1122256a95379b2e2638e96421807080160" +content-hash = "c138dc8b1875788bc5f0df5e4bdda7cfcd15bc9780c58d8d146ca02917f5d4b9" diff --git a/proconnect/locale/fr/LC_MESSAGES/django.mo b/proconnect/locale/fr/LC_MESSAGES/django.mo index 17988e52be888d244d8bd63315e7009f84e50e72..e06f02668413ccab8d3372e71b895917679a04ef 100644 GIT binary patch delta 23 ecmeyx{fm2p5Hpvtu7Rn7p@Ef&#bz1idrSaTp9XjU delta 23 ecmeyx{fm2p5HpvNuA#Ytp_!Gj`DPjBdrSaT-UfaE diff --git a/proconnect/locale/fr/LC_MESSAGES/django.po b/proconnect/locale/fr/LC_MESSAGES/django.po index ab8ec312..ecf3bbfc 100644 --- a/proconnect/locale/fr/LC_MESSAGES/django.po +++ b/proconnect/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-17 16:36+0100\n" -"PO-Revision-Date: 2025-02-17 16:37+0100\n" +"POT-Creation-Date: 2025-03-05 10:43+0100\n" +"PO-Revision-Date: 2025-03-05 10:48+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -27,11 +27,11 @@ msgstr "Format de réponse invalide ou vérification du jeton échouée" msgid "User account is disabled" msgstr "Le compte utilisateur est désactivé" -#: proconnect/models.py:19 +#: proconnect/models.py:18 msgid "sub" msgstr "sub" -#: proconnect/models.py:20 +#: proconnect/models.py:19 msgid "" "Required. 255 characters or fewer. Letters, numbers, and @/./+/-/_/: " "characters only." @@ -39,24 +39,24 @@ msgstr "" "Obligatoire. 255 caractères ou moins, parmi lettres, nombres et @/./+/-/_/: " "uniquement." -#: proconnect/models.py:29 +#: proconnect/models.py:28 msgid "SIRET" msgstr "SIRET" -#: proconnect/models.py:45 +#: proconnect/models.py:43 msgid "domain name" msgstr "nom de domaine" -#: proconnect/models.py:46 +#: proconnect/models.py:44 msgid "Required. 255 characters or fewer. Needs to be a valid domain name." msgstr "" "Obligatoire. 255 caractères ou moins. Doit être un nom de domaine valide." -#: proconnect/models.py:66 +#: proconnect/models.py:64 msgid "whitelisted email domain" msgstr "domaine email en liste blanche" -#: proconnect/models.py:67 +#: proconnect/models.py:65 msgid "whitelisted email domains" msgstr "domaines email en liste blanche" diff --git a/pyproject.toml b/pyproject.toml index 08fdc5f1..068f1fe4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,6 +52,7 @@ ipython = "^8.18.1" django-compressor = "^4.4" django-debug-toolbar = "^4.4.2" ruff = "^0.4.10" +tblib = "^3.0.0" [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] diff --git a/templates/blocks/footer.html b/templates/blocks/footer.html index ed123f5e..8b6d587f 100644 --- a/templates/blocks/footer.html +++ b/templates/blocks/footer.html @@ -41,6 +41,9 @@ {% block footer_links %} {% flat_menu handle="footer" template="menus/custom_flat_menu_footer.html" %} + {% if settings.content_manager.CustomScriptsSettings.use_tarteaucitron %}