src/pyams_content/shared/common/zmi/summary.py
changeset 1060 29b1aaf9e080
parent 956 a8723fffbaf6
child 1384 cdf63a1c7dc9
equal deleted inserted replaced
1059:34e6d07ea2e9 1060:29b1aaf9e080
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
       
    16 # import standard library
       
    17 
       
    18 from z3c.form import field
    15 from z3c.form import field
    19 from z3c.form.interfaces import DISPLAY_MODE, IDataConverter
    16 from z3c.form.interfaces import DISPLAY_MODE, IDataConverter
    20 from zope.interface import implementer, Interface
    17 from zope.interface import Interface, implementer
    21 
    18 
    22 from pyams_content import _
    19 from pyams_content.shared.common.interfaces import IBaseSharedTool, IWfSharedContent, IWfSharedContentRoles
    23 # import interfaces
       
    24 from pyams_content.shared.common.interfaces import IWfSharedContent, IWfSharedContentRoles, IBaseSharedTool
       
    25 from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
    20 from pyams_content.shared.common.interfaces.types import IWfTypedSharedContent
    26 # import packages
       
    27 from pyams_content.shared.common.zmi.header import SharedContentHeaderContentProvider
    21 from pyams_content.shared.common.zmi.header import SharedContentHeaderContentProvider
    28 from pyams_form.interfaces.form import IWidgetForm, IInnerTabForm, IInnerSubForm
    22 from pyams_form.interfaces.form import IInnerSubForm, IInnerTabForm, IWidgetForm
    29 from pyams_pagelet.pagelet import pagelet_config
    23 from pyams_pagelet.pagelet import pagelet_config
    30 from pyams_security.utility import get_principal
    24 from pyams_security.utility import get_principal
    31 from pyams_sequence.interfaces import ISequentialIdInfo
    25 from pyams_sequence.interfaces import ISequentialIdInfo
    32 from pyams_skin.interfaces import IInnerPage
    26 from pyams_skin.interfaces import IInnerPage
    33 from pyams_skin.layer import IPyAMSLayer
    27 from pyams_skin.layer import IPyAMSLayer
    36 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    30 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION
    37 from pyams_utils.timezone import tztime
    31 from pyams_utils.timezone import tztime
    38 from pyams_utils.traversing import get_parent
    32 from pyams_utils.traversing import get_parent
    39 from pyams_utils.url import absolute_url
    33 from pyams_utils.url import absolute_url
    40 from pyams_viewlet.viewlet import contentprovider_config
    34 from pyams_viewlet.viewlet import contentprovider_config
    41 from pyams_workflow.interfaces import IWorkflowState, IWorkflow, IWorkflowPublicationInfo, IWorkflowStateHistoryItem, \
    35 from pyams_workflow.interfaces import IWorkflow, IWorkflowPublicationInfo, IWorkflowState, IWorkflowStateHistoryItem, \
    42     IWorkflowVersions
    36     IWorkflowVersions
    43 from pyams_zmi.form import AdminDisplayForm, InnerAdminDisplayForm, InnerAdminAddForm
    37 from pyams_zmi.form import AdminDisplayForm, InnerAdminAddForm, InnerAdminDisplayForm
       
    38 
       
    39 from pyams_content import _
    44 
    40 
    45 
    41 
    46 @pagelet_config(name='summary.html', context=IWfSharedContent, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
    42 @pagelet_config(name='summary.html', context=IWfSharedContent, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION)
    47 @implementer(IWidgetForm, IInnerPage)
    43 @implementer(IWidgetForm, IInnerPage)
    48 class SharedContentSummaryForm(AdminDisplayForm):
    44 class SharedContentSummaryForm(AdminDisplayForm):
    95 
    91 
    96     mode = DISPLAY_MODE
    92     mode = DISPLAY_MODE
    97 
    93 
    98     def __new__(cls, context, request, form):
    94     def __new__(cls, context, request, form):
    99         workflow = IWorkflow(context)
    95         workflow = IWorkflow(context)
   100         state = IWorkflowState(context)
    96         state = IWorkflowState(context, None)
   101         if state.state not in workflow.waiting_states:
    97         if (state is None) or (state.state not in workflow.waiting_states):
   102             return None
    98             return None
   103         return InnerAdminDisplayForm.__new__(cls)
    99         return InnerAdminDisplayForm.__new__(cls)
   104 
   100 
   105     fields = field.Fields(IWorkflowState).select('state', 'state_urgency') + \
   101     fields = field.Fields(IWorkflowState).select('state', 'state_urgency') + \
   106         field.Fields(IWorkflowStateHistoryItem).select('comment')
   102              field.Fields(IWorkflowStateHistoryItem).select('comment')
   107 
   103 
   108     def updateWidgets(self, prefix=None):
   104     def updateWidgets(self, prefix=None):
   109         super(SharedContentWorkflowWaitingState, self).updateWidgets(prefix)
   105         super(SharedContentWorkflowWaitingState, self).updateWidgets(prefix)
   110         state = IWorkflowState(self.context)
   106         state = IWorkflowState(self.context)
   111         if 'state' in self.widgets:
   107         if 'state' in self.widgets:
   133 
   129 
   134     legend = _("Publication and retire dates")
   130     legend = _("Publication and retire dates")
   135     weight = 20
   131     weight = 20
   136 
   132 
   137     def __new__(cls, context, request, form):
   133     def __new__(cls, context, request, form):
   138         info = IWorkflowPublicationInfo(context)
   134         info = IWorkflowPublicationInfo(context, None)
   139         if not info.publication_effective_date:
   135         if (info is None) or not info.publication_effective_date:
   140             return None
   136             return None
   141         return InnerAdminDisplayForm.__new__(cls)
   137         return InnerAdminDisplayForm.__new__(cls)
   142 
   138 
   143     fields = field.Fields(IWorkflowPublicationInfo).select('publication_effective_date', 'push_end_date',
   139     fields = field.Fields(IWorkflowPublicationInfo).select('publication_effective_date', 'push_end_date',
   144                                                            'publication_expiration_date', 'displayed_publication_date')
   140                                                            'publication_expiration_date', 'displayed_publication_date')
   151     """Shared content workflow version summary"""
   147     """Shared content workflow version summary"""
   152 
   148 
   153     legend = _("Current version")
   149     legend = _("Current version")
   154     weight = 30
   150     weight = 30
   155 
   151 
       
   152     def __new__(cls, context, request, form):
       
   153         state = IWorkflowState(context, None)
       
   154         if state is None:
       
   155             return None
       
   156         return InnerAdminDisplayForm.__new__(cls)
       
   157 
   156     fields = field.Fields(IWorkflowState).select('version_id', 'state') + \
   158     fields = field.Fields(IWorkflowState).select('version_id', 'state') + \
   157         field.Fields(IWfSharedContent).select('creation_label') + \
   159              field.Fields(IWfSharedContent).select('creation_label') + \
   158         field.Fields(IWfSharedContentRoles).select('owner') + \
   160              field.Fields(IWfSharedContentRoles).select('owner') + \
   159         field.Fields(IWfSharedContent).select('last_update_label') + \
   161              field.Fields(IWfSharedContent).select('last_update_label') + \
   160         field.Fields(IWfSharedContent).select('modifiers')
   162              field.Fields(IWfSharedContent).select('modifiers')
   161 
   163 
   162     def updateWidgets(self, prefix=None):
   164     def updateWidgets(self, prefix=None):
   163         super(SharedContentWorkflowVersionSummary, self).updateWidgets(prefix)
   165         super(SharedContentWorkflowVersionSummary, self).updateWidgets(prefix)
   164         if 'version_id' in self.widgets:
   166         if 'version_id' in self.widgets:
   165             self.widgets['version_id'].label = _("Version")
   167             self.widgets['version_id'].label = _("Version")
   180 class SharedContentWorkflowHistorySummary(InnerAdminDisplayForm):
   182 class SharedContentWorkflowHistorySummary(InnerAdminDisplayForm):
   181     """Shared content workflow history summary"""
   183     """Shared content workflow history summary"""
   182 
   184 
   183     legend = _("Content history")
   185     legend = _("Content history")
   184 
   186 
       
   187     def __new__(cls, context, request, form):
       
   188         info = IWorkflowPublicationInfo(context, None)
       
   189         if info is None:
       
   190             return None
       
   191         return InnerAdminDisplayForm.__new__(cls)
       
   192 
   185     fields = field.Fields(IWorkflowPublicationInfo).select('first_publication_date') + \
   193     fields = field.Fields(IWorkflowPublicationInfo).select('first_publication_date') + \
   186         field.Fields(IWfSharedContent).select('first_owner')
   194              field.Fields(IWfSharedContent).select('first_owner')
   187 
   195 
   188     weight = 40
   196     weight = 40
   189 
   197 
   190     def updateWidgets(self, prefix=None):
   198     def updateWidgets(self, prefix=None):
   191         super(SharedContentWorkflowHistorySummary, self).updateWidgets(prefix)
   199         super(SharedContentWorkflowHistorySummary, self).updateWidgets(prefix)
   192         workflow = IWorkflow(self.context)
   200         if 'first_publication_date' in self.widgets:
   193         versions = IWorkflowVersions(self.context)
   201             versions = IWorkflowVersions(self.context, None)
   194         value = ''
   202             if versions is not None:
   195         for version in versions.get_versions():
   203                 workflow = IWorkflow(self.context)
   196             state = IWorkflowState(version)
   204                 value = ''
   197             pub_date = tztime(state.get_first_state_date(workflow.published_states))
   205                 for version in versions.get_versions():
   198             if pub_date is not None:
   206                     state = IWorkflowState(version)
   199                 value = format_datetime(pub_date)
   207                     pub_date = tztime(state.get_first_state_date(workflow.published_states))
   200                 break
   208                     if pub_date is not None:
   201         self.widgets['first_publication_date'].value = value
   209                         value = format_datetime(pub_date)
       
   210                         break
       
   211             else:
       
   212                 info = IWorkflowPublicationInfo(self.context, None)
       
   213                 value = format_datetime(info.first_publication_date)
       
   214             self.widgets['first_publication_date'].value = value