backoffice: add sidebar content options for cards (#87727)
This commit is contained in:
parent
e0857ce653
commit
6321637a14
|
@ -1118,3 +1118,49 @@ def test_cards_last_test_result(pub):
|
|||
|
||||
resp = resp.click('Last tests run')
|
||||
assert 'Result #%s' % test_result.id in resp.text
|
||||
|
||||
|
||||
def test_cards_management_options(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
CardDef.wipe()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'foo'
|
||||
carddef.fields = [
|
||||
fields.StringField(id='1', label='Test', varname='test'),
|
||||
]
|
||||
carddef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/cards/1/')
|
||||
|
||||
# Misc management
|
||||
assert_option_display(resp, 'Management', 'Default')
|
||||
resp = resp.click('Management', href='options/management')
|
||||
assert resp.forms[0]['management_sidebar_items$elementgeneral'].checked is True
|
||||
assert resp.forms[0]['management_sidebar_items$elementdownload-files'].checked is False
|
||||
resp.forms[0]['management_sidebar_items$elementdownload-files'].checked = True
|
||||
resp = resp.forms[0].submit().follow()
|
||||
assert_option_display(resp, 'Management', 'Custom')
|
||||
assert 'general' in CardDef.get(1).management_sidebar_items
|
||||
assert 'download-files' in CardDef.get(1).management_sidebar_items
|
||||
|
||||
resp = resp.click('Management', href='options/management')
|
||||
resp.forms[0]['management_sidebar_items$elementgeneral'].checked = False
|
||||
resp = resp.forms[0].submit().follow()
|
||||
assert 'general' not in CardDef.get(1).management_sidebar_items
|
||||
|
||||
resp = resp.click('Management', href='options/management')
|
||||
resp.forms[0]['management_sidebar_items$elementgeneral'].checked = True
|
||||
resp.forms[0]['management_sidebar_items$elementdownload-files'].checked = False
|
||||
assert 'management_sidebar_items$elementuser' not in resp.forms[0].fields
|
||||
resp = resp.forms[0].submit().follow()
|
||||
assert CardDef.get(1).management_sidebar_items == {'__default__'}
|
||||
|
||||
carddef.user_support = 'optional'
|
||||
carddef.store()
|
||||
|
||||
resp = resp.click('Management', href='options/management')
|
||||
assert resp.forms[0]['management_sidebar_items$elementuser'].checked is True
|
||||
resp = resp.forms[0].submit().follow()
|
||||
assert CardDef.get(1).management_sidebar_items == {'__default__'}
|
||||
|
|
|
@ -527,7 +527,7 @@ class OptionsDirectory(Directory):
|
|||
new_value = widget.parse()
|
||||
if attr == 'management_sidebar_items':
|
||||
new_value = set(new_value)
|
||||
if new_value == self.formdef.__class__.management_sidebar_items:
|
||||
if new_value == self.formdef.get_default_management_sidebar_items():
|
||||
new_value = {'__default__'}
|
||||
if attr == 'digest_template':
|
||||
if self.formdef.default_digest_template != new_value:
|
||||
|
@ -805,7 +805,8 @@ class FormDefPage(Directory, TempfileDirectoryMixin):
|
|||
_('Custom')
|
||||
if (
|
||||
self.formdef.skip_from_360_view
|
||||
or self.formdef.management_sidebar_items != {'__default__'}
|
||||
or self.formdef.management_sidebar_items
|
||||
not in ({'__default__'}, self.formdef.get_default_management_sidebar_items())
|
||||
)
|
||||
else _('Default'),
|
||||
),
|
||||
|
|
|
@ -31,7 +31,7 @@ from wcs.categories import CardDefCategory
|
|||
from wcs.sql_criterias import Null, StrictNotEqual
|
||||
|
||||
from ..qommon import _, pgettext_lazy
|
||||
from ..qommon.form import ComputedExpressionWidget, StringWidget
|
||||
from ..qommon.form import CheckboxesWidget, ComputedExpressionWidget, Form, StringWidget
|
||||
|
||||
|
||||
class CardDefUI(FormDefUI):
|
||||
|
@ -71,6 +71,18 @@ class CardDefOptionsDirectory(OptionsDirectory):
|
|||
)
|
||||
return form
|
||||
|
||||
def management(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
form.add(
|
||||
CheckboxesWidget,
|
||||
'management_sidebar_items',
|
||||
title=_('Sidebar elements'),
|
||||
options=[(x[0], x[1], x[0]) for x in self.formdef.get_management_sidebar_available_items()],
|
||||
value=self.formdef.get_management_sidebar_items(),
|
||||
inline=False,
|
||||
)
|
||||
return self.handle(form, pgettext_lazy('cards', 'Management'))
|
||||
|
||||
|
||||
class CardFieldDefPage(FormFieldDefPage):
|
||||
section = 'cards'
|
||||
|
@ -140,6 +152,14 @@ class CardDefPage(FormDefPage):
|
|||
options['user_support'] = self.add_option_line(
|
||||
'options/user_support', _('User support'), user_support_status
|
||||
)
|
||||
options['management'] = self.add_option_line(
|
||||
'options/management',
|
||||
pgettext_lazy('cards', 'Management'),
|
||||
_('Custom')
|
||||
if self.formdef.management_sidebar_items
|
||||
not in ({'__default__'}, self.formdef.get_default_management_sidebar_items())
|
||||
else _('Default'),
|
||||
)
|
||||
return options
|
||||
|
||||
def get_sorted_usage_in_formdefs(self):
|
||||
|
|
|
@ -311,6 +311,24 @@ class CardDef(FormDef):
|
|||
return True
|
||||
return False
|
||||
|
||||
def get_default_management_sidebar_items(self):
|
||||
management_sidebar_items = {
|
||||
'general',
|
||||
'submission-context',
|
||||
'user',
|
||||
'geolocation',
|
||||
'custom-template',
|
||||
}
|
||||
if not self.user_support:
|
||||
management_sidebar_items.remove('user')
|
||||
return management_sidebar_items
|
||||
|
||||
def get_management_sidebar_available_items(self):
|
||||
excluded_parts = ['pending-forms']
|
||||
if not self.user_support:
|
||||
excluded_parts.append('user')
|
||||
return [x for x in super().get_management_sidebar_available_items() if x[0] not in excluded_parts]
|
||||
|
||||
|
||||
def get_cards_graph(category=None, show_orphans=False):
|
||||
out = io.StringIO()
|
||||
|
|
|
@ -176,14 +176,7 @@ class FormDef(StorableObject):
|
|||
expiration_date = None
|
||||
has_captcha = False
|
||||
skip_from_360_view = False
|
||||
management_sidebar_items = {
|
||||
'general',
|
||||
'submission-context',
|
||||
'user',
|
||||
'geolocation',
|
||||
'custom-template',
|
||||
'pending-forms',
|
||||
}
|
||||
management_sidebar_items = {'__default__'}
|
||||
include_download_all_button = False
|
||||
appearance_keywords = None
|
||||
digest_templates = None
|
||||
|
@ -242,7 +235,6 @@ class FormDef(StorableObject):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields = []
|
||||
self.management_sidebar_items = {'__default__'}
|
||||
|
||||
def __eq__(self, other):
|
||||
return bool(
|
||||
|
@ -280,7 +272,7 @@ class FormDef(StorableObject):
|
|||
break
|
||||
|
||||
if self.include_download_all_button: # 2023-12-30
|
||||
self.management_sidebar_items = self.__class__.management_sidebar_items.copy()
|
||||
self.management_sidebar_items = self.get_default_management_sidebar_items()
|
||||
self.management_sidebar_items.add('download-files')
|
||||
self.include_download_all_button = False
|
||||
changed = True
|
||||
|
@ -305,6 +297,16 @@ class FormDef(StorableObject):
|
|||
sql.clean_global_views(conn, cur)
|
||||
cur.close()
|
||||
|
||||
def get_default_management_sidebar_items(self):
|
||||
return {
|
||||
'general',
|
||||
'submission-context',
|
||||
'user',
|
||||
'geolocation',
|
||||
'custom-template',
|
||||
'pending-forms',
|
||||
}
|
||||
|
||||
def get_management_sidebar_available_items(self):
|
||||
return [
|
||||
('general', _('General Information')),
|
||||
|
@ -325,7 +327,7 @@ class FormDef(StorableObject):
|
|||
|
||||
def get_management_sidebar_items(self):
|
||||
if self.management_sidebar_items == {'__default__'}:
|
||||
return self.__class__.management_sidebar_items
|
||||
return self.get_default_management_sidebar_items()
|
||||
return self.management_sidebar_items or []
|
||||
|
||||
@property
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
<ul class="biglist optionslist">
|
||||
{{ options.templates|safe }}
|
||||
{{ options.user_support|safe }}
|
||||
{{ options.management|safe }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue