src/pyams_content/shared/common/zmi/__init__.py
changeset 591 b694d5667d17
parent 534 09b34ca38bf1
child 842 7f0d72e427b1
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    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         }