management: display lateral block from template on formdata page (#49661)

This commit is contained in:
Lauréline Guérin 2021-01-11 14:31:31 +01:00
parent f2f0feeceb
commit 9967b29da6
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 63 additions and 0 deletions

View File

@ -3254,6 +3254,42 @@ def test_backoffice_sidebar_user_context(pub):
assert partial_resp.text.index('>Misc<') < partial_resp.text.index('>cat1<')
def test_backoffice_sidebar_lateral_block(pub):
create_user(pub)
FormDef.wipe()
Workflow.wipe()
wf = Workflow(name='WF')
wf.add_status('Status1')
wf.store()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.StringField(id='0', label='string', varname='string'),
]
formdef.workflow_roles = {'_receiver': 1}
formdef.workflow = wf
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.data = {'0': 'bouh'}
formdata.store()
app = login(get_app(pub))
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
assert '/lateral-block' not in resp.text
formdef.lateral_template = 'XX{{ form_var_string }}XX'
formdef.store()
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
assert '/lateral-block' in resp.text
lateral_block_url = re.findall('data-async-url="(.*/lateral-block)"', resp.text)[0]
partial_resp = app.get(lateral_block_url)
assert partial_resp.text == '<div class="lateral-block">XXbouhXX</div>'
def test_count_open(pub):
if not pub.is_using_postgresql():
pytest.skip('this requires SQL')

View File

@ -2533,6 +2533,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
_q_exports_orig = ['', 'download', 'json', 'action', 'live',
'inspect', ('inspect-tool', 'inspect_tool'),
('download-as-zip', 'download_as_zip'),
('lateral-block', 'lateral_block'),
('user-pending-forms', 'user_pending_forms')]
form_page_class = FormFillPage
@ -2575,6 +2576,12 @@ class FormBackOfficeStatusPage(FormStatusPage):
form.attrs['data-live-url'] = self.filled.get_url(backoffice=True) + 'live'
return form
def lateral_block(self):
self.check_receiver()
get_response().filter = {'raw': True}
response = self.get_lateral_block()
return response
def user_pending_forms(self):
self.check_receiver()
get_response().filter = {'raw': True}
@ -2683,6 +2690,8 @@ class FormBackOfficeStatusPage(FormStatusPage):
r += self.get_extra_submission_context_bar()
r += self.get_extra_submission_user_id_bar()
r += self.get_extra_geolocation_bar()
if formdata.formdef.lateral_template:
r += htmltext('<div data-async-url="%slateral-block"></div>' % formdata.get_url(backoffice=True))
if formdata.user_id and get_publisher().is_using_postgresql():
r += htmltext('<div data-async-url="%suser-pending-forms"></div>' % formdata.get_url(backoffice=True))
@ -2874,6 +2883,15 @@ class FormBackOfficeStatusPage(FormStatusPage):
r += htmltext('</div>')
return r.getvalue()
def get_lateral_block(self):
r = TemplateIO(html=True)
lateral_block = self.filled.get_lateral_block()
if lateral_block:
r += htmltext('<div class="lateral-block">')
r += htmltext(lateral_block)
r += htmltext('</div>')
return r.getvalue()
def test_tools_form(self):
form = Form(use_tokens=False)
form.add(RadiobuttonsWidget, 'test_mode',

View File

@ -436,6 +436,15 @@ class FormData(StorableObject):
changed = True
return changed
def get_lateral_block(self):
context = self.get_substitution_variables()
context['formdef_id'] = self.formdef.id
if self.formdef.lateral_template is None:
new_value = None
else:
new_value = Template(self.formdef.lateral_template, autoescape=False).render(context)
return new_value
# criticality levels are stored as [0, 101, 102, 103...], this makes it
# easier to group "uncritical" formdatas (=0) together when sorting.
def get_current_criticality_level(self):