From 36dc9c6dc2bf87426bb3125bdc0306fc0244a367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 6 Aug 2015 14:11:46 +0200 Subject: [PATCH 1/4] admin: use new option style for options classifying forms (#8049) This is about description, keywords, and categories. --- tests/test_admin_pages.py | 12 +++--- wcs/admin/forms.py | 106 ++++++++++++++++++++-------------------------- 2 files changed, 52 insertions(+), 66 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 11e2409..554331e 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -295,7 +295,7 @@ def test_form_category(): app = login(get_app(pub)) resp = app.get('/backoffice/forms/1/') - assert 'Category:' not in resp.body + assert_option_display(resp, 'Category', 'None') Category.wipe() cat = Category(name='Foo') @@ -303,7 +303,8 @@ def test_form_category(): cat = Category(name='Bar') cat.store() resp = app.get('/backoffice/forms/1/') - assert 'Category:' in resp.body + assert 'Category' in resp.body + assert_option_display(resp, 'Category', 'None') def test_form_category_select(): create_superuser() @@ -697,15 +698,14 @@ def test_form_description(): app = login(get_app(pub)) resp = app.get('/backoffice/forms/1/') - assert 'No description or keywords' in resp.body + assert_option_display(resp, 'Description', 'None') - resp = resp.click(href='information') + resp = resp.click('Description') resp.forms[0]['description'].value = '

Hello World

' resp = resp.forms[0].submit() assert resp.location == 'http://example.net/backoffice/forms/1/' resp = resp.follow() - assert 'No description or keywords' not in resp.body - assert 'Hello World' in resp.body + assert_option_display(resp, 'Description', 'On') def test_form_new_field(): create_superuser() diff --git a/wcs/admin/forms.py b/wcs/admin/forms.py index d5a072a..9f0c83c 100644 --- a/wcs/admin/forms.py +++ b/wcs/admin/forms.py @@ -132,7 +132,8 @@ class FieldsDirectory(FieldsDirectory): class OptionsDirectory(Directory): _q_exports = ['confirmation', 'private_status', 'only_allow_one', - 'always_advertise', 'tracking_code', 'online_status'] + 'always_advertise', 'tracking_code', 'online_status', + 'description', 'keywords', 'category'] def __init__(self, formdef): self.formdef = formdef @@ -190,6 +191,27 @@ class OptionsDirectory(Directory): value=self.formdef.expiration_date) return self.handle(form, _('Online Status')) + def description(self): + form = Form(enctype='multipart/form-data') + form.add(WysiwygTextWidget, 'description', title=_('Description'), + value=self.formdef.description) + return self.handle(form, _('Description')) + + def keywords(self): + form = Form(enctype='multipart/form-data') + form.add(StringWidget, 'keywords', title=_('Keywords'), + value=self.formdef.keywords, size=50) + return self.handle(form, _('Keywords')) + + def category(self): + categories = get_categories() + form = Form(enctype='multipart/form-data') + form.widgets.append(HtmlWidget('

%s

' % _('Select a category for this form'))) + form.add(SingleSelectWidget, 'category_id', title=_('Category'), + value=self.formdef.category_id, + options=[(None, '---', '')] + categories) + return self.handle(form, _('Category')) + def handle(self, form, title): form.add_submit('submit', _('Submit')) form.add_submit('cancel', _('Cancel')) @@ -200,7 +222,8 @@ class OptionsDirectory(Directory): attrs = ['confirmation', 'only_allow_one', 'disabled', 'enable_tracking_codes', 'private_status_and_history', 'always_advertise', 'disabled_redirection', - 'publication_date', 'expiration_date'] + 'publication_date', 'expiration_date', 'description', + 'keywords', 'category_id'] for f in attrs: widget = form.get_widget(f) if widget: @@ -255,7 +278,7 @@ class WorkflowRoleDirectory(Directory): class FormDefPage(Directory): _q_exports = ['', 'fields', 'delete', 'duplicate', 'export', 'anonymise', 'archive', 'invite', 'enable', 'workflow', - 'category', 'role', ('workflow-options', 'workflow_options'), + 'role', ('workflow-options', 'workflow_options'), ('workflow-variables', 'workflow_variables'), ('workflow-status-remapping', 'workflow_status_remapping'), 'roles', 'title', 'options', ('acl-read', 'acl_read'), @@ -312,16 +335,27 @@ class FormDefPage(Directory): r += get_session().display_message() + def add_option_line(link, label, current_value): + return htmltext( + '
  • ' + '%(label)s ' + '%(current_value)s' + '
  • ' % { + 'link': link, + 'label': label, + 'current_value': current_value}) + r += htmltext('
    ') - r += htmltext('

    %s') % _('Information') - if not (self.formdef.description or self.formdef.keywords): - r += htmltext(' (%s)') % _('No description or keywords') - r += htmltext(' (%s)

    ') % _('change') - if self.formdef.description: - r += htmltext(self.formdef.description) - if self.formdef.keywords: - r += htmltext('

    %s %s

    ') % ( - _('Keywords:'), self.formdef.keywords) + r += htmltext('

    %s

    ') % _('Information') + r += htmltext('') r += htmltext('
    ') r += htmltext('
    ') @@ -329,17 +363,6 @@ class FormDefPage(Directory): r += htmltext('

    %s

    ') % _('Access') r += htmltext('