workflows: reevaluate form according to possible new content (#34564)

This commit is contained in:
Frédéric Péters 2019-07-06 16:46:53 +02:00
parent d157723e20
commit 3343f32bf0
2 changed files with 47 additions and 0 deletions

View File

@ -6581,3 +6581,47 @@ def test_frontoffice_workflow_form_with_conditions(pub):
resp = resp.form.submit('submit').follow()
assert formdef.data_class().get(formdata.id).workflow_data == {'blah_var_str': 'xxx2', 'blah_var_str2': None}
def test_frontoffice_workflow_form_with_dynamic_comment(pub):
user = create_user(pub)
wf = Workflow.get_default_workflow()
wf.id = '2'
wf.store()
wf = Workflow.get(wf.id)
status = wf.get_status('new')
status.items = []
display_form = FormWorkflowStatusItem()
display_form.id = '_display_form'
display_form.by = ['_submitter']
display_form.varname = 'blah'
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
display_form.formdef.fields = [
fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
fields.CommentField(id='2', label='value is {{blah_var_str}}', type='comment'),
]
status.items.append(display_form)
display_form.parent = status
wf.store()
formdef = create_formdef()
formdef.workflow_id = wf.id
formdef.fields = [fields.StringField(id='0', label='string', varname='plop')]
formdef.store()
formdef.data_class().wipe()
formdata = formdef.data_class()()
formdata.user_id = user.id
formdata.status = 'wf-new'
formdata.data = {'0': 'plop'}
formdata.store()
app = login(get_app(pub), username='foo', password='foo')
resp = app.get(formdata.get_url(backoffice=False))
assert 'f1' in resp.form.fields
live_url = resp.html.find('form').attrs['data-live-url']
resp.form['f1'] = 'test'
live_resp = app.post(live_url, params=resp.form.submit_fields())
assert live_resp.json['result']['2']['visible']
assert live_resp.json['result']['2']['content'] == '<p>value is test</p>'

View File

@ -668,7 +668,10 @@ class FormStatusPage(Directory, FormTemplateMixin):
user = get_request().user
form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields)
self.filled.evaluate_live_workflow_form(user, form)
get_publisher().substitutions.unfeed(lambda x: x is self.filled)
get_publisher().substitutions.feed(self.filled)
# reevaluate workflow form according to possible new content
form = self.filled.get_workflow_form(user, displayed_fields=displayed_fields)
return self.live_process_fields(form, self.filled, displayed_fields)
def _q_lookup(self, component):