backoffice: fix form fields reorder (#45380)

This commit is contained in:
Lauréline Guérin 2020-07-23 16:51:38 +02:00 committed by Frédéric Péters
parent 7f155f3a52
commit 05931348df
2 changed files with 38 additions and 1 deletions

View File

@ -1992,6 +1992,36 @@ def test_form_limit_display_to_page(pub):
assert '{{form_var_baz}}' in hidden_fields
def test_form_fields_reorder(pub):
create_superuser(pub)
create_role()
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = [
fields.PageField(id='0', label='1st page', type='page'),
fields.StringField(id='1', label='string', type='string'),
fields.PageField(id='2', label='2nd page', type='page'),
fields.StringField(id='3', label='string 2', type='string')
]
formdef.store()
app = login(get_app(pub))
app.get('/backoffice/forms/%s/fields/update_order?order=0;3;1;2;' % formdef.id)
formdef = FormDef.get(formdef.id)
assert [x.id for x in formdef.fields] == ['0', '3', '1', '2']
# unknown id: ignored
app.get('/backoffice/forms/%s/fields/update_order?order=0;1;2;3;4;' % formdef.id)
formdef = FormDef.get(formdef.id)
assert [x.id for x in formdef.fields] == ['0', '1', '2', '3']
# missing id: do nothing
app.get('/backoffice/forms/%s/fields/update_order?order=0;3;1;' % formdef.id)
formdef = FormDef.get(formdef.id)
assert [x.id for x in formdef.fields] == ['0', '1', '2', '3']
def test_form_legacy_int_id(pub):
create_superuser(pub)
create_role()

View File

@ -374,7 +374,14 @@ class FieldsDirectory(Directory):
def update_order(self):
request = get_request()
new_order = request.form['order'].strip(';').split(';')
new_fields = [ [x for x in self.objectdef.fields if x.id == y][0] for y in new_order]
new_fields = []
for y in new_order:
for x in self.objectdef.fields:
if x.id == y:
new_fields.append(x)
break
if set(self.objectdef.fields) != set(new_fields):
return 'ko'
self.objectdef.fields = new_fields
self.objectdef.store()
return 'ok'