src/pyams_content/shared/common/zmi/summary.py
changeset 1060 29b1aaf9e080
parent 956 a8723fffbaf6
child 1384 cdf63a1c7dc9
--- a/src/pyams_content/shared/common/zmi/summary.py	Tue Nov 06 14:40:22 2018 +0100
+++ b/src/pyams_content/shared/common/zmi/summary.py	Wed Nov 07 17:29:16 2018 +0100
@@ -12,20 +12,14 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
-
 from z3c.form import field
 from z3c.form.interfaces import DISPLAY_MODE, IDataConverter
-from zope.interface import implementer, Interface
+from zope.interface import Interface, implementer
 
-from pyams_content import _
-# import interfaces
-from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, IBaseSharedTool
+from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContent, IWfSharedContentRoles
 from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
-# import packages
 from pyams_content.shared.common.zmi.header import SharedContentHeaderContentProvider
-from pyams_form.interfaces.form import IWidgetForm, IInnerTabForm, IInnerSubForm
+from pyams_form.interfaces.form import IInnerSubForm, IInnerTabForm, IWidgetForm
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_security.utility import get_principal
 from pyams_sequence.interfaces import ISequentialIdInfo
@@ -38,9 +32,11 @@
 from pyams_utils.traversing import get_parent
 from pyams_utils.url import absolute_url
 from pyams_viewlet.viewlet import contentprovider_config
-from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowPublicationInfo, IWorkflowStateHistoryItem, \
+from pyams_workflow.interfaces import IWorkflow, IWorkflowPublicationInfo, IWorkflowState, IWorkflowStateHistoryItem, \
     IWorkflowVersions
-from pyams_zmi.form import AdminDisplayForm, InnerAdminDisplayForm, InnerAdminAddForm
+from pyams_zmi.form import AdminDisplayForm, InnerAdminAddForm, InnerAdminDisplayForm
+
+from pyams_content import _
 
 
 @pagelet_config(name='summary.html', context=IWfSharedContent, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
@@ -97,13 +93,13 @@
 
     def __new__(cls, context, request, form):
         workflow = IWorkflow(context)
-        state = IWorkflowState(context)
-        if state.state not in workflow.waiting_states:
+        state = IWorkflowState(context, None)
+        if (state is None) or (state.state not in workflow.waiting_states):
             return None
         return InnerAdminDisplayForm.__new__(cls)
 
     fields = field.Fields(IWorkflowState).select('state', 'state_urgency') + \
-        field.Fields(IWorkflowStateHistoryItem).select('comment')
+             field.Fields(IWorkflowStateHistoryItem).select('comment')
 
     def updateWidgets(self, prefix=None):
         super(SharedContentWorkflowWaitingState, self).updateWidgets(prefix)
@@ -135,8 +131,8 @@
     weight = 20
 
     def __new__(cls, context, request, form):
-        info = IWorkflowPublicationInfo(context)
-        if not info.publication_effective_date:
+        info = IWorkflowPublicationInfo(context, None)
+        if (info is None) or not info.publication_effective_date:
             return None
         return InnerAdminDisplayForm.__new__(cls)
 
@@ -153,11 +149,17 @@
     legend = _("Current version")
     weight = 30
 
+    def __new__(cls, context, request, form):
+        state = IWorkflowState(context, None)
+        if state is None:
+            return None
+        return InnerAdminDisplayForm.__new__(cls)
+
     fields = field.Fields(IWorkflowState).select('version_id', 'state') + \
-        field.Fields(IWfSharedContent).select('creation_label') + \
-        field.Fields(IWfSharedContentRoles).select('owner') + \
-        field.Fields(IWfSharedContent).select('last_update_label') + \
-        field.Fields(IWfSharedContent).select('modifiers')
+             field.Fields(IWfSharedContent).select('creation_label') + \
+             field.Fields(IWfSharedContentRoles).select('owner') + \
+             field.Fields(IWfSharedContent).select('last_update_label') + \
+             field.Fields(IWfSharedContent).select('modifiers')
 
     def updateWidgets(self, prefix=None):
         super(SharedContentWorkflowVersionSummary, self).updateWidgets(prefix)
@@ -182,20 +184,31 @@
 
     legend = _("Content history")
 
+    def __new__(cls, context, request, form):
+        info = IWorkflowPublicationInfo(context, None)
+        if info is None:
+            return None
+        return InnerAdminDisplayForm.__new__(cls)
+
     fields = field.Fields(IWorkflowPublicationInfo).select('first_publication_date') + \
-        field.Fields(IWfSharedContent).select('first_owner')
+             field.Fields(IWfSharedContent).select('first_owner')
 
     weight = 40
 
     def updateWidgets(self, prefix=None):
         super(SharedContentWorkflowHistorySummary, self).updateWidgets(prefix)
-        workflow = IWorkflow(self.context)
-        versions = IWorkflowVersions(self.context)
-        value = ''
-        for version in versions.get_versions():
-            state = IWorkflowState(version)
-            pub_date = tztime(state.get_first_state_date(workflow.published_states))
-            if pub_date is not None:
-                value = format_datetime(pub_date)
-                break
-        self.widgets['first_publication_date'].value = value
+        if 'first_publication_date' in self.widgets:
+            versions = IWorkflowVersions(self.context, None)
+            if versions is not None:
+                workflow = IWorkflow(self.context)
+                value = ''
+                for version in versions.get_versions():
+                    state = IWorkflowState(version)
+                    pub_date = tztime(state.get_first_state_date(workflow.published_states))
+                    if pub_date is not None:
+                        value = format_datetime(pub_date)
+                        break
+            else:
+                info = IWorkflowPublicationInfo(self.context, None)
+                value = format_datetime(info.first_publication_date)
+            self.widgets['first_publication_date'].value = value