From b3d74c870a9037115ed6b7f3d98573a7a7754f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 7 Nov 2015 18:22:18 +0100 Subject: [PATCH] backoffice: add a new "Include in default filters" option for lists (#8908) --- tests/test_backoffice_pages.py | 26 ++++++++++++++++++++++++++ wcs/backoffice/management.py | 5 +++++ wcs/fields.py | 8 ++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index b6700b7..b16f39a 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -270,6 +270,19 @@ def test_backoffice_filter(pub): resp = resp.forms[0].submit() assert resp.body.count('baz') == 8 +def test_backoffice_default_filter(pub): + create_superuser(pub) + create_environment(pub) + app = login(get_app(pub)) + resp = app.get('/backoffice/management/form-title/') + assert not 'filter-2-value' in resp.form.fields + + formdef = FormDef.get_by_urlname('form-title') + formdef.fields[1].in_filters = True + formdef.store() + resp = app.get('/backoffice/management/form-title/') + assert 'filter-2-value' in resp.form.fields + def test_backoffice_csv(pub): create_superuser(pub) create_environment(pub) @@ -349,6 +362,7 @@ def test_backoffice_statistics_status_select(pub): app = login(get_app(pub)) resp = app.get('/backoffice/management/form-title/') resp = resp.click('Statistics') + assert not 'filter-2-value' in resp.form.fields resp.forms[0]['filter-2'].checked = True resp = resp.forms[0].submit() @@ -364,6 +378,11 @@ def test_backoffice_statistics_status_select(pub): resp = resp.forms[0].submit() assert 'Total number of records: 13' in resp.body + # check it's also possible to get back to the complete list + resp.forms[0]['filter-2-value'].value = '' + resp = resp.forms[0].submit() + assert 'Total number of records: 50' in resp.body + # check it also works with item fields with a data source resp = app.get('/backoffice/management/form-title/') resp = resp.click('Statistics') @@ -373,6 +392,13 @@ def test_backoffice_statistics_status_select(pub): resp = resp.forms[0].submit() assert 'Total number of records: 13' in resp.body + # set field to be displayed by default in filters + formdef = FormDef.get_by_urlname('form-title') + formdef.fields[1].in_filters = True + formdef.store() + resp = app.get('/backoffice/management/form-title/') + resp = resp.click('Statistics') + assert 'filter-2-value' in resp.form.fields def test_backoffice_handling(pub): create_user(pub) diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index c513707..ff67d3e 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -465,6 +465,8 @@ class FormPage(Directory): elif mode == 'stats': # enable period filters by default field.enabled = (field.id in ('start', 'end')) + if field.type == 'item': + field.enabled = field.in_filters r += htmltext('

%s (%s)

' % ( _('Filters'), _('change'))) @@ -513,6 +515,9 @@ class FormPage(Directory): if type(options[0]) in (tuple, list): if len(options[0]) == 2: options = [(x[0], x[1], x[0]) for x in options] + options.insert(0, (None, '', None)) + else: + options.insert(0, '') r += SingleSelectWidget(filter_field_key, title=filter_field.label, options=options, value=filter_field_value, render_br=False).render() diff --git a/wcs/fields.py b/wcs/fields.py index f4b8271..9c9b388 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -147,7 +147,7 @@ class Field(object): else: extra_fields = [] for attribute in self.get_admin_attributes() + extra_fields: - if attribute in ('in_listing', ): + if attribute in ('in_listing', 'in_filters'): continue if hasattr(self, attribute) and getattr(self, attribute) is not None: val = getattr(self, attribute) @@ -851,6 +851,7 @@ class ItemField(WidgetField): anonymise = False widget_class = SingleSelectHintWidget data_source = {} + in_filters = False def __init__(self, **kwargs): self.items = [] @@ -961,6 +962,8 @@ class ItemField(WidgetField): def fill_admin_form(self, form): WidgetField.fill_admin_form(self, form) + form.add(CheckboxWidget, 'in_filters', title=_('Include in default filters'), + value=self.in_filters, advanced=True) form.add(CheckboxWidget, 'show_as_radio', title = _('Show as radio buttons'), value = self.show_as_radio) form.add(WidgetList, 'items', title = _('Items'), element_type = StringWidget, @@ -975,7 +978,8 @@ class ItemField(WidgetField): advanced=is_datasource_advanced(self.data_source)) def get_admin_attributes(self): - return WidgetField.get_admin_attributes(self) + ['items', 'show_as_radio', 'data_source'] + return WidgetField.get_admin_attributes(self) + ['items', + 'show_as_radio', 'data_source', 'in_filters'] def check_admin_form(self, form): items = form.get_widget('items').parse() -- 2.6.2