src/pyams_content/shared/common/zmi/workflow.py
changeset 591 b694d5667d17
parent 565 070528d7f960
child 600 33811e279b1d
--- a/src/pyams_content/shared/common/zmi/workflow.py	Wed Jun 06 13:32:14 2018 +0200
+++ b/src/pyams_content/shared/common/zmi/workflow.py	Fri Jun 08 10:33:23 2018 +0200
@@ -36,7 +36,7 @@
 
 # import packages
 from pyams_content.workflow import DRAFT, DELETED
-from pyams_form.form import AJAXAddForm
+from pyams_form.form import AJAXAddForm, ajax_config
 from pyams_form.schema import CloseButton
 from pyams_pagelet.pagelet import pagelet_config
 from pyams_template.template import template_config
@@ -128,6 +128,8 @@
 
 @pagelet_config(name='wf-propose.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-propose.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRequestForm(WorkflowContentTransitionForm):
     """Shared content publication request form"""
 
@@ -146,7 +148,6 @@
                field.Fields(IWorkflowCommentInfo)
 
     buttons = button.Buttons(IPublicationRequestButtons)
-    ajax_handler = 'wf-propose.json'
 
     def updateWidgets(self, prefix=None):
         super(PublicationRequestForm, self).updateWidgets(prefix)
@@ -174,12 +175,6 @@
         return super(PublicationRequestForm, self).createAndAdd(data)
 
 
-@view_config(name='wf-propose.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRequestAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRequestForm):
-    """Shared content publication request form, JSON renderer"""
-
-
 @subscriber(IDataExtractedEvent, form_selector=PublicationRequestForm)
 def handle_publication_request_form_data_extraction(event):
     """Handle publication request form data extraction"""
@@ -220,17 +215,12 @@
 
 @pagelet_config(name='wf-cancel-propose.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-cancel-propose.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRequestCancelForm(WorkflowContentTransitionForm):
     """Shared content publication request cancel form"""
 
     buttons = button.Buttons(IPublicationRequestCancelButtons)
-    ajax_handler = 'wf-cancel-propose.json'
-
-
-@view_config(name='wf-cancel-propose.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRequestCancelAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRequestCancelForm):
-    """Shared content publication request cancel form, JSON renderer"""
 
 
 @viewlet_config(name='wf-cancel-propose-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -265,11 +255,12 @@
 
 @pagelet_config(name='wf-refuse.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=PUBLISH_CONTENT_PERMISSION)
+@ajax_config(name='wf-refuse.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRequestRefuseForm(WorkflowContentTransitionForm):
     """Shared content publication request refuse form"""
 
     buttons = button.Buttons(IPublicationRequestRefuseButtons)
-    ajax_handler = 'wf-refuse.json'
 
     def updateWidgets(self, prefix=None):
         super(PublicationRequestRefuseForm, self).updateWidgets(prefix)
@@ -277,12 +268,6 @@
             self.widgets['comment'].required = True
 
 
-@view_config(name='wf-refuse.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=PUBLISH_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRequestRefuseAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRequestRefuseForm):
-    """Shared content publication request refuse form, JSON renderer"""
-
-
 @subscriber(IDataExtractedEvent, form_selector=PublicationRequestRefuseForm)
 def handle_publication_request_refuse_form_data_extraction(event):
     """Handle publication request refuse form data extraction"""
@@ -324,6 +309,8 @@
 
 @pagelet_config(name='wf-publish.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=PUBLISH_CONTENT_PERMISSION)
+@ajax_config(name='wf-publish.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationForm(WorkflowContentTransitionForm):
     """Shared content publication form"""
 
@@ -341,7 +328,6 @@
                field.Fields(IWorkflowCommentInfo)
 
     buttons = button.Buttons(IPublicationButtons)
-    ajax_handler = 'wf-publish.json'
 
     def updateWidgets(self, prefix=None):
         super(PublicationForm, self).updateWidgets(prefix)
@@ -371,12 +357,6 @@
         return super(PublicationForm, self).createAndAdd(data)
 
 
-@view_config(name='wf-publish.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=PUBLISH_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationAJAXForm(WorkflowContentTransitionAJAXForm, PublicationForm):
-    """Shared content publication form, JSON renderer"""
-
-
 @subscriber(IDataExtractedEvent, form_selector=PublicationForm)
 def handle_publication_form_data_extraction(event):
     """Handle publication form data extraction"""
@@ -418,6 +398,8 @@
 
 @pagelet_config(name='wf-retiring.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-retiring.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRetireRequestForm(WorkflowContentTransitionForm):
     """Shared content publication request refuse form"""
 
@@ -425,7 +407,6 @@
              field.Fields(IWorkflowRequestUrgencyInfo) + \
              field.Fields(IWorkflowCommentInfo)
     buttons = button.Buttons(IPublicationRetireRequestButtons)
-    ajax_handler = 'wf-retiring.json'
 
     def updateWidgets(self, prefix=None):
         super(PublicationRetireRequestForm, self).updateWidgets(prefix)
@@ -433,12 +414,6 @@
             self.widgets['comment'].required = True
 
 
-@view_config(name='wf-retiring.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRetireRequestAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRetireRequestForm):
-    """Shared content publication retire request form, JSON renderer"""
-
-
 @subscriber(IDataExtractedEvent, form_selector=PublicationRetireRequestForm)
 def handle_publication_retire_request_form_data_extraction(event):
     """Handle publication retire request form data extraction"""
@@ -479,17 +454,12 @@
 
 @pagelet_config(name='wf-cancel-retiring.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-cancel-retiring.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRetireCancelForm(WorkflowContentTransitionForm):
     """Shared content publication retire request cancel form"""
 
     buttons = button.Buttons(IPublicationRetireCancelButtons)
-    ajax_handler = 'wf-cancel-retiring.json'
-
-
-@view_config(name='wf-cancel-retiring.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRetireCancelAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRetireCancelForm):
-    """Shared content publication retire request cancel form, JSON renderer"""
 
 
 @viewlet_config(name='wf-cancel-retiring-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -524,17 +494,12 @@
 
 @pagelet_config(name='wf-retire.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=PUBLISH_CONTENT_PERMISSION)
+@ajax_config(name='wf-retire.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationRetireForm(WorkflowContentTransitionForm):
     """Shared content publication retire form"""
 
     buttons = button.Buttons(IPublicationRetireButtons)
-    ajax_handler = 'wf-retire.json'
-
-
-@view_config(name='wf-retire.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=PUBLISH_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationRetireAJAXForm(WorkflowContentTransitionAJAXForm, PublicationRetireForm):
-    """Shared content publication retire form, JSON renderer"""
 
 
 @viewlet_config(name='wf-retire-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -570,6 +535,8 @@
 
 @pagelet_config(name='wf-archiving.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-archiving.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationArchiveRequestForm(WorkflowContentTransitionForm):
     """Shared content publication request archive form"""
 
@@ -577,13 +544,6 @@
              field.Fields(IWorkflowRequestUrgencyInfo) + \
              field.Fields(IWorkflowCommentInfo)
     buttons = button.Buttons(IPublicationArchiveRequestButtons)
-    ajax_handler = 'wf-archiving.json'
-
-
-@view_config(name='wf-archiving.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationArchiveRequestAJAXForm(WorkflowContentTransitionAJAXForm, PublicationArchiveRequestForm):
-    """Shared content publication archive request form, JSON renderer"""
 
 
 @viewlet_config(name='wf-archiving-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -618,17 +578,12 @@
 
 @pagelet_config(name='wf-cancel-archiving.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-cancel-archiving.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationArchiveCancelForm(WorkflowContentTransitionForm):
     """Shared content publication archive request cancel form"""
 
     buttons = button.Buttons(IPublicationArchiveCancelButtons)
-    ajax_handler = 'wf-cancel-archiving.json'
-
-
-@view_config(name='wf-cancel-archiving.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationArchiveCancelAJAXForm(WorkflowContentTransitionAJAXForm, PublicationArchiveCancelForm):
-    """Shared content publication archive request cancel form, JSON renderer"""
 
 
 @viewlet_config(name='wf-cancel-archiving-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -663,17 +618,12 @@
 
 @pagelet_config(name='wf-archive.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=PUBLISH_CONTENT_PERMISSION)
+@ajax_config(name='wf-archive.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=PUBLISH_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class PublicationArchiveForm(WorkflowContentTransitionForm):
     """Shared content publication archive form"""
 
     buttons = button.Buttons(IPublicationArchiveButtons)
-    ajax_handler = 'wf-archive.json'
-
-
-@view_config(name='wf-archive.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=PUBLISH_CONTENT_PERMISSION, renderer='json', xhr=True)
-class PublicationArchiveAJAXForm(WorkflowContentTransitionAJAXForm, PublicationArchiveForm):
-    """Shared content publication archive form, JSON renderer"""
 
 
 @viewlet_config(name='wf-archive-message', context=IWfSharedContent, layer=IPyAMSLayer,
@@ -709,23 +659,18 @@
 
 @pagelet_config(name='wf-clone.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=CREATE_CONTENT_PERMISSION)
+@ajax_config(name='wf-clone.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=CREATE_CONTENT_PERMISSION, base=AJAXAddForm)
 class SharedContentCloneForm(WorkflowContentTransitionForm):
     """Shared content clone form"""
 
     buttons = button.Buttons(ISharedContentCloneButtons)
-    ajax_handler = 'wf-clone.json'
 
     def createAndAdd(self, data):
         data = data.get(self, data)
         info = IWorkflowInfo(self.context)
         return info.fire_transition_toward(DRAFT, comment=data.get('comment'))
 
-
-@view_config(name='wf-clone.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=CREATE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class SharedContentCloneAJAXForm(AJAXAddForm, SharedContentCloneForm):
-    """Shared content clone form, JSON rendener"""
-
     def get_ajax_output(self, changes):
         return {
             'status': 'redirect',
@@ -765,11 +710,12 @@
 
 @pagelet_config(name='wf-delete.html', context=IWfSharedContent, layer=IPyAMSLayer,
                 permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='wf-delete.json', context=IWfSharedContent, layer=IPyAMSLayer,
+             permission=MANAGE_CONTENT_PERMISSION, base=WorkflowContentTransitionAJAXForm)
 class SharedContentDeleteForm(WorkflowContentTransitionForm):
     """Shared content delete form"""
 
     buttons = button.Buttons(ISharedContentDeleteButtons)
-    ajax_handler = 'wf-delete.json'
 
     @property
     def fields(self):
@@ -806,16 +752,10 @@
             versions.remove_version(state.version_id, state=DELETED, comment=data.get('comment'))
             self.__target = versions.get_last_versions(count=1)[0]
 
-
-@view_config(name='wf-delete.json', context=IWfSharedContent, request_type=IPyAMSLayer,
-             permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
-class SharedContentDeleteAJAXForm(AJAXAddForm, SharedContentDeleteForm):
-    """Shared content delete form, JSON rendener"""
-
     def get_ajax_output(self, changes):
         return {
             'status': 'redirect',
-            'location': absolute_url(self._SharedContentDeleteForm__target, self.request, 'admin')
+            'location': absolute_url(self.__target, self.request, 'admin')
         }