backoffice: allow {{form_user}} usage in live prefills during edition (#68379)
This commit is contained in:
parent
6ecfd58a02
commit
ca061dfac4
|
@ -1999,6 +1999,52 @@ def test_backoffice_wfedit_and_live_condition(pub):
|
|||
assert live_resp.json['result']['2']['visible']
|
||||
|
||||
|
||||
def test_backoffice_wfedit_and_prefill_with_user_variable(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
formdef.fields[0].varname = 'foo'
|
||||
formdef.fields[1].condition = {'type': 'django', 'value': 'form_var_foo == "test"'}
|
||||
formdef.fields.append(
|
||||
fields.StringField(
|
||||
id='100',
|
||||
label='user name',
|
||||
type='string',
|
||||
prefill={'type': 'string', 'value': 'a{{form_user_name}}b'},
|
||||
)
|
||||
)
|
||||
formdef.store()
|
||||
|
||||
form_class = formdef.data_class()
|
||||
|
||||
second_user = pub.user_class(name='foobar')
|
||||
second_user.store()
|
||||
number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0]
|
||||
number31.user_id = second_user.id
|
||||
number31.store()
|
||||
|
||||
# attach a custom workflow
|
||||
workflow = Workflow(name='wfedit')
|
||||
st1 = workflow.add_status('Status1', number31.status.split('-')[1])
|
||||
|
||||
wfedit = st1.add_action('editable', id='_wfedit')
|
||||
wfedit.by = [user.roles[0]]
|
||||
workflow.store()
|
||||
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
|
||||
resp = resp.form.submit('button_wfedit').follow()
|
||||
assert resp.form['f100'].value == 'afoobarb'
|
||||
|
||||
live_url = resp.html.find('form').attrs['data-live-url']
|
||||
live_resp = app.post(live_url + '?prefilled_100=on', params=resp.form.submit_fields())
|
||||
assert live_resp.json['result']['100']['content'] == 'afoobarb'
|
||||
|
||||
|
||||
def test_global_listing(pub):
|
||||
create_user(pub)
|
||||
create_environment(pub)
|
||||
|
|
|
@ -2919,6 +2919,10 @@ class FormPage(Directory):
|
|||
|
||||
|
||||
class FormBackofficeEditPage(FormFillPage):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.edit_mode = True
|
||||
|
||||
def create_form(self, *args, **kwargs):
|
||||
form = super().create_form(*args, **kwargs)
|
||||
form.attrs['data-live-url'] = self.formdef.get_url(backoffice=True) + 'live'
|
||||
|
|
|
@ -834,6 +834,11 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
computed_values = get_session().get_by_magictoken('%s-computed' % magictoken) or {}
|
||||
formdata.data.update(computed_values)
|
||||
|
||||
if formdata.data.get('edited_formdata_id'):
|
||||
# during editing (edited_formdata_id is set when starting edition,
|
||||
# when there's no magictoken yet)
|
||||
self.edited_data = self.formdef.data_class().get(formdata.data.get('edited_formdata_id'))
|
||||
|
||||
if self.edit_mode:
|
||||
if magictoken is None:
|
||||
# restore edited data early on as it may be required to
|
||||
|
@ -1002,6 +1007,7 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
self.edited_data.feed_session()
|
||||
token = randbytes(8)
|
||||
get_request().form['magictoken'] = token
|
||||
self.edited_data.data['edited_formdata_id'] = self.edited_data.id
|
||||
session.add_magictoken(token, self.edited_data.data)
|
||||
|
||||
# and restore computed data
|
||||
|
|
Loading…
Reference in New Issue