diff --git a/CHANGES.rst b/CHANGES.rst
index e0b2077f..94faf86a 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -8,7 +8,10 @@ Changelog
[eikichi18]
- Add getObjSize info in File field serializer.
[cekk]
-
+- Add new flag in settings needed to choose to show or not auto-generated footer columns.
+ [cekk]
+- Customize @navigation endpoint to expose also the new flag for frontend.
+ [cekk]
6.1.10 (2024-01-16)
-------------------
diff --git a/src/design/plone/contenttypes/restapi/services/configure.zcml b/src/design/plone/contenttypes/restapi/services/configure.zcml
index 06d609df..e93dcc9d 100644
--- a/src/design/plone/contenttypes/restapi/services/configure.zcml
+++ b/src/design/plone/contenttypes/restapi/services/configure.zcml
@@ -6,9 +6,11 @@
+
-
+
+
+
+
+
+
+
+
diff --git a/src/design/plone/contenttypes/restapi/services/navigation/get.py b/src/design/plone/contenttypes/restapi/services/navigation/get.py
new file mode 100644
index 00000000..70e42e12
--- /dev/null
+++ b/src/design/plone/contenttypes/restapi/services/navigation/get.py
@@ -0,0 +1,29 @@
+from design.plone.contenttypes.controlpanels.settings import IDesignPloneSettings
+from design.plone.contenttypes.interfaces import IDesignPloneContenttypesLayer
+from plone import api
+from plone.restapi.interfaces import IExpandableElement
+from plone.restapi.services import Service
+from plone.restapi.services.navigation.get import Navigation as BaseNavigation
+from zope.component import adapter
+from zope.interface import implementer
+from zope.interface import Interface
+
+
+@implementer(IExpandableElement)
+@adapter(Interface, IDesignPloneContenttypesLayer)
+class Navigation(BaseNavigation):
+ def __call__(self, expand=False):
+ result = super().__call__(expand=expand)
+ show_dynamic_folders_in_footer = api.portal.get_registry_record(
+ "show_dynamic_folders_in_footer",
+ interface=IDesignPloneSettings,
+ default=False,
+ )
+ result["navigation"]["show_in_footer"] = show_dynamic_folders_in_footer
+ return result
+
+
+class NavigationGet(Service):
+ def reply(self):
+ navigation = Navigation(self.context, self.request)
+ return navigation(expand=True)["navigation"]
diff --git a/src/design/plone/contenttypes/tests/test_custom_service_navigation.py b/src/design/plone/contenttypes/tests/test_custom_service_navigation.py
new file mode 100644
index 00000000..014ad580
--- /dev/null
+++ b/src/design/plone/contenttypes/tests/test_custom_service_navigation.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+from design.plone.contenttypes.controlpanels.settings import IDesignPloneSettings
+from design.plone.contenttypes.testing import (
+ DESIGN_PLONE_CONTENTTYPES_API_FUNCTIONAL_TESTING,
+)
+from plone import api
+from plone.app.testing import setRoles
+from plone.app.testing import SITE_OWNER_NAME
+from plone.app.testing import SITE_OWNER_PASSWORD
+from plone.app.testing import TEST_USER_ID
+from plone.dexterity.utils import createContentInContainer
+from plone.restapi.testing import RelativeSession
+from transaction import commit
+
+import unittest
+
+
+class CustomNavigationTest(unittest.TestCase):
+ layer = DESIGN_PLONE_CONTENTTYPES_API_FUNCTIONAL_TESTING
+
+ def setUp(self):
+ self.app = self.layer["app"]
+ self.portal = self.layer["portal"]
+ self.portal_url = self.portal.absolute_url()
+ self.api_session = RelativeSession(self.portal_url)
+ self.api_session.headers.update({"Accept": "application/json"})
+ self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)
+ setRoles(self.portal, TEST_USER_ID, ["Manager"])
+
+ self.folder = createContentInContainer(
+ self.portal, "Folder", id="folder", title="Some Folder"
+ )
+ self.folder2 = createContentInContainer(
+ self.portal, "Folder", id="folder2", title="Some Folder 2"
+ )
+ self.subfolder1 = createContentInContainer(
+ self.folder, "Folder", id="subfolder1", title="SubFolder 1"
+ )
+ self.subfolder2 = createContentInContainer(
+ self.folder, "Folder", id="subfolder2", title="SubFolder 2"
+ )
+ self.thirdlevelfolder = createContentInContainer(
+ self.subfolder1,
+ "Folder",
+ id="thirdlevelfolder",
+ title="Third Level Folder",
+ )
+ self.fourthlevelfolder = createContentInContainer(
+ self.thirdlevelfolder,
+ "Folder",
+ id="fourthlevelfolder",
+ title="Fourth Level Folder",
+ )
+ createContentInContainer(self.folder, "Document", id="doc1", title="A document")
+ commit()
+
+ def tearDown(self):
+ self.api_session.close()
+
+ def test_return_show_in_footer_info_based_on_registry(self):
+ # by default is True
+ response = self.api_session.get(
+ "/@navigation", params={"expand.navigation.depth": 2}
+ ).json()
+
+ self.assertIn("show_in_footer", response)
+ self.assertTrue(response["show_in_footer"])
+
+ # change it
+ api.portal.set_registry_record(
+ "show_dynamic_folders_in_footer",
+ False,
+ interface=IDesignPloneSettings,
+ )
+ commit()
+
+ response = self.api_session.get(
+ "/@navigation", params={"expand.navigation.depth": 2}
+ ).json()
+
+ self.assertIn("show_in_footer", response)
+ self.assertFalse(response["show_in_footer"])
diff --git a/src/design/plone/contenttypes/upgrades/configure.zcml b/src/design/plone/contenttypes/upgrades/configure.zcml
index 8e88bee8..c1896bd3 100644
--- a/src/design/plone/contenttypes/upgrades/configure.zcml
+++ b/src/design/plone/contenttypes/upgrades/configure.zcml
@@ -804,5 +804,14 @@
handler=".upgrades.update_pdc_with_pdc_desc"
/>
-
+
+
+