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 |