forms: add description and keywords to formdefs (#6194)
This commit is contained in:
parent
f4ed497c38
commit
78c0dad11f
|
@ -414,6 +414,28 @@ def test_form_qrcode():
|
|||
resp = resp.click(href='qrcode')
|
||||
assert '<div id="qrcode">' in resp.body
|
||||
|
||||
def test_form_description():
|
||||
create_superuser()
|
||||
create_role()
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = []
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/admin/forms/1/')
|
||||
assert 'No description or keywords' in resp.body
|
||||
|
||||
resp = resp.click(href='information')
|
||||
resp.forms[0]['description'].value = '<p>Hello World</p>'
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/admin/forms/1/'
|
||||
resp = resp.follow()
|
||||
assert 'No description or keywords' not in resp.body
|
||||
assert 'Hello World' in resp.body
|
||||
|
||||
def test_form_new_field():
|
||||
create_superuser()
|
||||
create_role()
|
||||
|
|
|
@ -173,7 +173,7 @@ class FormDefPage(Directory):
|
|||
'category', 'role', ('workflow-options', 'workflow_options'),
|
||||
('workflow-status-remapping', 'workflow_status_remapping'),
|
||||
'roles', 'title', 'options', ('acl-read', 'acl_read'),
|
||||
'overwrite', 'qrcode']
|
||||
'overwrite', 'qrcode', 'information']
|
||||
|
||||
def __init__(self, component):
|
||||
try:
|
||||
|
@ -194,7 +194,8 @@ class FormDefPage(Directory):
|
|||
self.html_top(title = self.formdef.name)
|
||||
r = TemplateIO(html=True)
|
||||
get_response().filter['sidebar'] = self.get_sidebar()
|
||||
get_response().add_javascript(['jquery.js', 'widget_list.js'])
|
||||
get_response().add_javascript(['jquery.js', 'widget_list.js',
|
||||
'ckeditor/ckeditor.js', 'qommon.wysiwyg.js', 'ckeditor/adapters/jquery.js'])
|
||||
DateWidget.prepare_javascript()
|
||||
|
||||
r += htmltext('<h2>%s - ') % _('Form')
|
||||
|
@ -222,6 +223,18 @@ class FormDefPage(Directory):
|
|||
|
||||
r += get_session().display_message()
|
||||
|
||||
r += htmltext('<div class="bo-block">')
|
||||
r += htmltext('<h3>%s') % _('Information')
|
||||
if not (self.formdef.description or self.formdef.keywords):
|
||||
r += htmltext(' <span class="change">(%s)</span>') % _('No description or keywords')
|
||||
r += htmltext(' <span class="change">(<a rel="popup" href="information">%s</a>)</span></h3>') % _('change')
|
||||
if self.formdef.description:
|
||||
r += htmltext(self.formdef.description)
|
||||
if self.formdef.keywords:
|
||||
r += htmltext('<p>%s %s</p>') % (
|
||||
_('Keywords:'), self.formdef.keywords)
|
||||
r += htmltext('</div>')
|
||||
|
||||
r += htmltext('<div class="splitcontent-left">')
|
||||
r += htmltext('<div class="bo-block">')
|
||||
r += htmltext('<h3>%s</h3>') % _('Access')
|
||||
|
@ -488,6 +501,33 @@ class FormDefPage(Directory):
|
|||
r += form.render()
|
||||
return r.getvalue()
|
||||
|
||||
def information(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
form.add(WysiwygTextWidget, 'description', title=_('Description'),
|
||||
value=self.formdef.description)
|
||||
form.add(StringWidget, 'keywords', title=_('Keywords'),
|
||||
value=self.formdef.keywords, size=50)
|
||||
|
||||
form.add_submit('submit', _('Submit'))
|
||||
form.add_submit('cancel', _('Cancel'))
|
||||
if form.get_widget('cancel').parse():
|
||||
return redirect('.')
|
||||
|
||||
if form.is_submitted() and not form.has_errors():
|
||||
for field_name in ('description', 'keywords'):
|
||||
widget = form.get_widget(field_name)
|
||||
if widget:
|
||||
setattr(self.formdef, field_name, widget.parse())
|
||||
self.formdef.store()
|
||||
return redirect('.')
|
||||
|
||||
get_response().breadcrumb.append( ('information', _('Information')) )
|
||||
self.html_top(title=self.formdef.name)
|
||||
r = TemplateIO(html=True)
|
||||
r += htmltext('<h2>%s</h2>') % _('Information')
|
||||
r += form.render()
|
||||
return r.getvalue()
|
||||
|
||||
def options(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
form.add(CheckboxWidget, 'confirmation', title=_('Include confirmation page'),
|
||||
|
|
|
@ -58,6 +58,8 @@ class FormDef(StorableObject):
|
|||
_indexes = ['url_name']
|
||||
|
||||
name = None
|
||||
description = None
|
||||
keywords = None
|
||||
url_name = None
|
||||
table_name = None # for SQL only
|
||||
fields = None
|
||||
|
@ -86,7 +88,7 @@ class FormDef(StorableObject):
|
|||
max_field_id = None
|
||||
|
||||
# declarations for serialization
|
||||
TEXT_ATTRIBUTES = ['name', 'url_name',
|
||||
TEXT_ATTRIBUTES = ['name', 'url_name', 'description', 'keywords',
|
||||
'publication_date', 'expiration_date',
|
||||
'disabled_redirection',]
|
||||
BOOLEAN_ATTRIBUTES = ['discussion', 'detailed_emails', 'disabled',
|
||||
|
|
|
@ -958,11 +958,16 @@ class RootDirectory(AccessControlled, Directory):
|
|||
if formdef.acl_read == 'all':
|
||||
r += htmltext(' <a class="listing" href="%s%s/listing">%s</a>') % (
|
||||
url_prefix, formdef.url_name, _('(listing)'))
|
||||
if formdef.description:
|
||||
r += htmltext('<div class="description">%s</div>' % formdef.description)
|
||||
r += htmltext('</li>')
|
||||
for formdef in advertised_forms:
|
||||
r += htmltext('<li class="required-authentication">')
|
||||
r += htmltext('<a href="%s%s/">%s</a>') % (url_prefix, formdef.url_name, formdef.name)
|
||||
r += htmltext('<span> (%s)</span></li>') % _('authentication required')
|
||||
r += htmltext('<span> (%s)</span>') % _('authentication required')
|
||||
if formdef.description:
|
||||
r += htmltext('<div class="description">%s</div>' % formdef.description)
|
||||
r += htmltext('</li>')
|
||||
r += htmltext('</ul>')
|
||||
r += htmltext('</div>')
|
||||
return r.getvalue()
|
||||
|
|
Loading…
Reference in New Issue