admin: warn if a form contains more than 500 fields (#20963)

This commit is contained in:
Thomas NOËL 2018-01-03 11:57:26 +01:00
parent 200a391e6d
commit 5dbb87ef43
2 changed files with 40 additions and 0 deletions

View File

@ -1249,6 +1249,40 @@ def test_form_edit_map_field(pub):
resp = resp.form.submit('submit')
assert 'widget-with-error' in resp.body
def test_form_edit_field_warnings(pub):
create_superuser(pub)
create_role()
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [fields.StringField(id='%d' % i, label='field %d' % i, type='string')
for i in range(1,10)]
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/')
resp = resp.click(href='fields/')
assert 'more than 500 fields' not in resp.body
assert 'first field should be of type "page"' not in resp.body
formdef.fields.append(fields.PageField(id='1000', label='page', type='page'))
formdef.store()
resp = app.get('/backoffice/forms/1/')
resp = resp.click(href='fields/')
assert 'more than 500 fields' not in resp.body
assert 'first field should be of type "page"' in resp.body
formdef.fields.extend([fields.StringField(id='%d' % i, label='field %d' % i, type='string')
for i in range(10,510)])
formdef.store()
resp = app.get('/backoffice/forms/1/')
resp = resp.click(href='fields/')
assert 'more than 500 fields' in resp.body
assert 'first field should be of type "page"' in resp.body
FormDef.wipe()
def test_form_limit_display_to_page(pub):
create_superuser(pub)
create_role()

View File

@ -202,6 +202,12 @@ class FieldsDirectory(Directory):
r += self.index_top()
if self.objectdef.fields:
if len(self.objectdef.fields) > 500:
r += htmltext('<div class="errornotice">')
r += htmltext(_('This form contains more than 500 fields. '
'It is close to the database limits and no new fields should be added.'))
r += htmltext('</div>')
if [x for x in self.objectdef.fields if x.type == 'page']:
if self.objectdef.fields[0].type != 'page':
r += htmltext('<div class="errornotice">')