35 IWorkflowPublicationInfo |
35 IWorkflowPublicationInfo |
36 from pyams_zmi.interfaces.menu import ISiteManagementMenu |
36 from pyams_zmi.interfaces.menu import ISiteManagementMenu |
37 from zope.dublincore.interfaces import IZopeDublinCore |
37 from zope.dublincore.interfaces import IZopeDublinCore |
38 |
38 |
39 # import packages |
39 # import packages |
40 from pyams_form.form import AJAXAddForm |
40 from pyams_form.form import AJAXAddForm, ajax_config |
41 from pyams_form.schema import CloseButton |
41 from pyams_form.schema import CloseButton |
42 from pyams_i18n.widget import I18nSEOTextLineFieldWidget |
42 from pyams_i18n.widget import I18nSEOTextLineFieldWidget |
43 from pyams_pagelet.pagelet import pagelet_config |
43 from pyams_pagelet.pagelet import pagelet_config |
44 from pyams_skin.page import DefaultPageHeaderAdapter |
44 from pyams_skin.page import DefaultPageHeaderAdapter |
45 from pyams_skin.table import DefaultElementEditorAdapter |
45 from pyams_skin.table import DefaultElementEditorAdapter |
53 from pyams_utils.url import absolute_url, generate_url |
53 from pyams_utils.url import absolute_url, generate_url |
54 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
54 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
55 from pyams_workflow.versions import WorkflowHistoryItem |
55 from pyams_workflow.versions import WorkflowHistoryItem |
56 from pyams_zmi.form import AdminDialogAddForm |
56 from pyams_zmi.form import AdminDialogAddForm |
57 from pyramid.location import lineage |
57 from pyramid.location import lineage |
58 from pyramid.view import view_config |
|
59 from z3c.form import field, button |
58 from z3c.form import field, button |
60 from zope.copy import copy |
59 from zope.copy import copy |
61 from zope.interface import Interface |
60 from zope.interface import Interface |
62 from zope.lifecycleevent import ObjectCreatedEvent |
61 from zope.lifecycleevent import ObjectCreatedEvent |
63 from zope.location import locate |
62 from zope.location import locate |
277 duplicate = button.Button(name='duplicate', title=_("Duplicate this content")) |
276 duplicate = button.Button(name='duplicate', title=_("Duplicate this content")) |
278 |
277 |
279 |
278 |
280 @pagelet_config(name='duplicate.html', context=IWfSharedContent, layer=IPyAMSLayer, |
279 @pagelet_config(name='duplicate.html', context=IWfSharedContent, layer=IPyAMSLayer, |
281 permission=CREATE_CONTENT_PERMISSION) |
280 permission=CREATE_CONTENT_PERMISSION) |
|
281 @ajax_config(name='duplicate.json', context=IWfSharedContent, layer=IPyAMSLayer, base=AJAXAddForm) |
282 class WfSharedContentDuplicateForm(AdminDialogAddForm): |
282 class WfSharedContentDuplicateForm(AdminDialogAddForm): |
283 """Shared content duplicate form""" |
283 """Shared content duplicate form""" |
284 |
284 |
285 legend = _("Duplicate content") |
285 legend = _("Duplicate content") |
286 icon_css_class = 'fa fa-fw fa-files-o' |
286 icon_css_class = 'fa fa-fw fa-files-o' |
287 |
287 |
288 fields = field.Fields(IWorkflowCommentInfo) |
288 fields = field.Fields(IWorkflowCommentInfo) |
289 buttons = button.Buttons(ISharedContentDuplicateButtons) |
289 buttons = button.Buttons(ISharedContentDuplicateButtons) |
290 |
290 |
291 ajax_handler = 'duplicate.json' |
|
292 edit_permission = CREATE_CONTENT_PERMISSION |
291 edit_permission = CREATE_CONTENT_PERMISSION |
293 |
292 |
294 def updateWidgets(self, prefix=None): |
293 def updateWidgets(self, prefix=None): |
295 super(WfSharedContentDuplicateForm, self).updateWidgets(prefix) |
294 super(WfSharedContentDuplicateForm, self).updateWidgets(prefix) |
296 if 'comment' in self.widgets: |
295 if 'comment' in self.widgets: |
347 principal=self.request.principal.id, |
346 principal=self.request.principal.id, |
348 comment=data.get('comment')) |
347 comment=data.get('comment')) |
349 state.history.append(history) |
348 state.history.append(history) |
350 return new_version |
349 return new_version |
351 |
350 |
352 |
|
353 @view_config(name='duplicate.json', context=IWfSharedContent, request_type=IPyAMSLayer, |
|
354 permission=CREATE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
355 class WfSharedContentDuplicateAJAXForm(AJAXAddForm, WfSharedContentDuplicateForm): |
|
356 """Shared content duplicate form, JSON renderer""" |
|
357 |
|
358 def get_ajax_output(self, changes): |
351 def get_ajax_output(self, changes): |
359 return { |
352 return { |
360 'status': 'redirect', |
353 'status': 'redirect', |
361 'location': absolute_url(changes, self.request, 'admin') |
354 'location': absolute_url(changes, self.request, 'admin') |
362 } |
355 } |