From a8bae6ffef186539843f21c2411626930f42bc64 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 11 Feb 2020 19:55:58 +0100 Subject: [PATCH 2/2] create_formdata: keep user on parameter's view when changing formdef_slug (#39732) --- wcs/wf/create_formdata.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/wcs/wf/create_formdata.py b/wcs/wf/create_formdata.py index 2ef10e26..069fe755 100644 --- a/wcs/wf/create_formdata.py +++ b/wcs/wf/create_formdata.py @@ -226,8 +226,8 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem): list_forms = [(None, '---', '')] list_forms += [(x.url_name, x.name, x.url_name) for x in self.formdef_class.select(order_by='name') if not x.disabled or x.url_name == self.formdef_slug] - form.add(SingleSelectWidget, 'formdef_slug', - title=_(self.formdef_label), + form.add(SingleSelectWidget, '%sformdef_slug' % prefix, + title=_('Form'), value=self.formdef_slug, options=list_forms) if 'draft' in parameters: @@ -250,12 +250,17 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem): value=self.keep_submission_context, advanced=( self.keep_submission_context == CreateFormdataWorkflowStatusItem.keep_submission_context)) - formdef = self._resolve_formdef_slug(form.get('formdef_slug')) + formdef_slug = form.get('%sformdef_slug' % prefix) + formdef = self._resolve_formdef_slug(formdef_slug) if 'mappings' in parameters and formdef: form.add(MappingsWidget, '%smappings' % prefix, title=_(self.mappings_label), to_formdef=formdef, value=self.mappings) + if form.is_submitted(): + # do not validate form if formdef is changed and there is no mappings + if formdef_slug != self.formdef_slug and '%smappings$added_elements' % prefix not in get_request().form: + form.get_widget('%smappings' % prefix).set_error(_('Please define new mappings')) if 'varname' in parameters: form.add(VarnameWidget, '%svarname' % prefix, title=_('Identifier'), value=self.varname, @@ -287,10 +292,6 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem): for field in formdef.get_widget_fields() if field.varname) return sorted(varnames & set(field.varname for field in self.formdef.get_widget_fields() if field.varname)) - def submit_admin_form(self, form): - self.mappings = [] - super(CreateFormdataWorkflowStatusItem, self).submit_admin_form(form) - def get_parameters(self): return ('draft', 'formdef_slug', 'map_fields_by_varname', 'mappings', 'backoffice_submission', 'keep_user', 'keep_submission_context', 'varname', 'attach_to_history', 'condition') -- 2.24.0