diff --git a/mayan/apps/document_states/classes.py b/mayan/apps/document_states/classes.py index 9a9a74ffb8..7e6df5d4aa 100644 --- a/mayan/apps/document_states/classes.py +++ b/mayan/apps/document_states/classes.py @@ -44,6 +44,10 @@ class WorkflowActionBase(object): class WorkflowAction(six.with_metaclass(WorkflowActionMetaclass, WorkflowActionBase)): + @classmethod + def clean(cls, request, form_data=None): + return form_data + @classmethod def get(cls, name): return cls._registry[name] diff --git a/mayan/apps/document_states/forms.py b/mayan/apps/document_states/forms.py index 35b693233f..d2d16436de 100644 --- a/mayan/apps/document_states/forms.py +++ b/mayan/apps/document_states/forms.py @@ -43,6 +43,7 @@ class WorkflowStateActionDynamicForm(DynamicModelForm): widgets = {'action_data': forms.widgets.HiddenInput} def __init__(self, *args, **kwargs): + self.request = kwargs.pop('request') result = super( WorkflowStateActionDynamicForm, self ).__init__(*args, **kwargs) @@ -72,7 +73,12 @@ class WorkflowStateActionDynamicForm(DynamicModelForm): # Store only the ID of a model instance action_data[field['name']] = action_data[field['name']].pk + data['action_data'] = action_data + data = self.instance.get_class().clean( + form_data=data, request=self.request + ) data['action_data'] = json.dumps(action_data) + return data diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index 8a7883fd07..972e57a1a6 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -250,6 +250,11 @@ class SetupWorkflowStateActionCreateView(SingleObjectDynamicFormCreateView): 'workflow': self.get_object().workflow } + def get_form_extra_kwargs(self): + return { + 'request': self.request + } + def get_form_schema(self): return self.get_class()().get_form_schema(request=self.request) @@ -307,6 +312,11 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView): 'workflow_state': self.get_object().state, } + def get_form_extra_kwargs(self): + return { + 'request': self.request + } + def get_form_schema(self): return self.get_object().get_class_instance().get_form_schema( request=self.request @@ -350,7 +360,7 @@ class SetupWorkflowStateActionListView(SingleObjectListView): class SetupWorkflowStateActionSelectionView(FormView): form_class = WorkflowActionSelectionForm - #TODO: access check via workflow edit perm + view_permission = permission_workflow_edit def form_valid(self, form): klass = form.cleaned_data['klass']