From a81068fb86a58d1787f20c41f2c2bb0221f03f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 20 Jun 2016 20:05:25 +0200 Subject: [PATCH] backoffice: always display backoffice fields marked as required (#11441) --- tests/test_admin_pages.py | 1 + tests/test_backoffice_pages.py | 18 +++++++++++++++++- wcs/forms/common.py | 41 ++++++++++++++++++++++++----------------- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 63dee36..93cdcb5 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -1649,6 +1649,7 @@ def test_workflows_backoffice_fields(pub): resp = resp.forms[0].submit() assert resp.location == 'http://example.net/backoffice/workflows/1/backoffice-fields/fields/' resp = resp.follow() + assert Workflow.get(workflow.id).get_backoffice_fields()[0].required is True # check it's been saved correctly assert 'foobar' in resp.body diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index a2626b0..fe41be7 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -2496,7 +2496,7 @@ def test_backoffice_fields(pub): wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf) wf.backoffice_fields_formdef.fields = [ fields.StringField(id='bo1', label='1st backoffice field', - type='string', varname='backoffice_blah'), + type='string', varname='backoffice_blah', required=False), ] st1 = wf.add_status('Status1') wf.store() @@ -2521,3 +2521,19 @@ def test_backoffice_fields(pub): assert 'Backoffice Data' in resp.body assert '1st backoffice field' in resp.body assert 'HELLO WORLD' in resp.body + + wf.backoffice_fields_formdef.fields = [ + fields.StringField(id='bo1', label='1st backoffice field', + type='string', varname='backoffice_blah', required=True), + ] + wf.store() + + formdata = formdef.data_class()() + formdata.data = {} + formdata.just_created() + formdata.store() + + app = login(get_app(pub)) + resp = app.get(formdata.get_url(backoffice=True)) + assert 'Backoffice Data' in resp.body + assert 'Not set' in resp.body diff --git a/wcs/forms/common.py b/wcs/forms/common.py index 6460441..2cad26d 100644 --- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -434,7 +434,7 @@ class FormStatusPage(Directory): return r.getvalue() - def display_fields(self, fields, form_url=''): + def display_fields(self, fields, form_url='', include_unset_required_fields=False): r = TemplateIO(html=True) on_page = False on_disabled_page = False @@ -468,18 +468,21 @@ class FormStatusPage(Directory): on_page = True continue - if not self.filled.data.has_key(f.id): + if not hasattr(f, str('get_view_value')): continue - if f.store_display_value and ('%s_display' % f.id) in self.filled.data: - value = self.filled.data['%s_display' % f.id] + if not self.filled.data.has_key(f.id): + value = None else: - value = self.filled.data[f.id] + if f.store_display_value and ('%s_display' % f.id) in self.filled.data: + value = self.filled.data['%s_display' % f.id] + else: + value = self.filled.data[f.id] - if value is None or value == '': - continue + if value is None or value == '': + value = None - if not hasattr(f, str('get_view_value')): + if value is None and not (f.required and include_unset_required_fields): continue css_classes = ['field'] @@ -487,14 +490,17 @@ class FormStatusPage(Directory): css_classes.append(f.extra_css_class) r += htmltext('
' % ' '.join(css_classes)) r += htmltext('%s ') % f.label - if isinstance(f, FileField): - r += htmltext(self.display_file_field(form_url, f, value)) - else: # normal display - r += htmltext('
') - s = f.get_view_value(value) - s = s.replace(str('[download]'), str('%sdownload' % form_url)) - r += s - r += htmltext('
') + if value is None: + r += htmltext('
%s
') % _('Not set') + else: + if isinstance(f, FileField): + r += htmltext(self.display_file_field(form_url, f, value)) + else: # normal display + r += htmltext('
') + s = f.get_view_value(value) + s = s.replace(str('[download]'), str('%sdownload' % form_url)) + r += s + r += htmltext('
') r += htmltext('
') if on_page: @@ -506,7 +512,8 @@ class FormStatusPage(Directory): backoffice_fields = self.formdef.workflow.get_backoffice_fields() if not backoffice_fields: return - content = self.display_fields(backoffice_fields) + content = self.display_fields(backoffice_fields, + include_unset_required_fields=True) if not len(content): return r = TemplateIO(html=True) -- 2.8.1