src/pyams_default_theme/shared/site/folder.py
changeset 209 26e95dcab6aa
parent 203 40bffafce365
child 224 d1189038613e
--- a/src/pyams_default_theme/shared/site/folder.py	Sun Nov 11 20:05:10 2018 +0100
+++ b/src/pyams_default_theme/shared/site/folder.py	Mon Nov 12 11:35:52 2018 +0100
@@ -12,12 +12,18 @@
 
 __docformat__ = 'restructuredtext'
 
-from pyams_content.shared.site.interfaces import ISiteFolder
+from pyramid.httpexceptions import HTTPSeeOther
+
+from pyams_content.shared.site import ISiteElementNavigation
+from pyams_content.shared.site.interfaces import FOLDER_REDIRECT_DISPLAY_MODE, ISiteFolder
 from pyams_default_theme.interfaces import IContentSummaryInfo
-from pyams_content.shared.site import ISiteElementNavigation
 from pyams_i18n.interfaces import II18n
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_portal.views import PortalContextIndexPage, PortalContextPreviewPage
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
+from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
+from pyams_utils.url import relative_url
 from pyams_workflow.interfaces import IWorkflowPublicationInfo
 
 from pyams_content import _
@@ -52,3 +58,27 @@
             return None
 
     button_title = _("Consult folder")
+
+
+@pagelet_config(name='', context=ISiteFolder, layer=IPyAMSUserLayer)
+class SiteFolderIndexPage(PortalContextIndexPage):
+    """Site folder index page"""
+
+    def __call__(self, **kwargs):
+        if self.context.navigation_mode == FOLDER_REDIRECT_DISPLAY_MODE:
+            target = next(self.context.get_visible_items(self.request), None)
+            if target is not None:
+                return HTTPSeeOther(relative_url(target, request=self.request))
+        return super(SiteFolderIndexPage, self).__call__(**kwargs)
+
+
+@pagelet_config(name='preview.html', context=ISiteFolder, layer=IPyAMSUserLayer, permission=VIEW_SYSTEM_PERMISSION)
+class SiteFolderPreviewPage(PortalContextPreviewPage):
+    """Site folder preview page"""
+
+    def __call__(self, **kwargs):
+        if self.context.navigation_mode == FOLDER_REDIRECT_DISPLAY_MODE:
+            target = next(self.context.get_visible_items(self.request), None)
+            if target is not None:
+                return HTTPSeeOther(relative_url(target, request=self.request, view_name='preview.html'))
+        return super(SiteFolderPreviewPage, self).__call__(**kwargs)