backoffice: redirect to all fields view when page field is removed (#64336)
This commit is contained in:
parent
84554d0572
commit
c36375b568
|
@ -2655,6 +2655,7 @@ def test_form_limit_display_to_page(pub):
|
|||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
fields.StringField(id='3', label='string 2', type='string', varname='baz'),
|
||||
fields.PageField(id='4', label='3rd page', type='page'),
|
||||
fields.StringField(id='5', label='string 3', type='string', varname='baz2'),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
|
@ -2679,6 +2680,19 @@ def test_form_limit_display_to_page(pub):
|
|||
assert not resp.pyquery('.form-pages-navigation a:first-child').hasClass('disabled')
|
||||
assert resp.pyquery('.form-pages-navigation a:last-child').hasClass('disabled')
|
||||
|
||||
# remove field on current page
|
||||
resp = resp.click(href='5/delete')
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/backoffice/forms/%s/fields/pages/4/#itemId_4' % formdef.id
|
||||
resp = resp.follow()
|
||||
# remove current page itself
|
||||
resp = resp.click(href='4/delete')
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://example.net/backoffice/forms/%s/fields/#itemId_3' % formdef.id
|
||||
|
||||
# visit a page that doesn't exist
|
||||
app.get('/backoffice/forms/1/fields/pages/123/', status=404)
|
||||
|
||||
|
||||
def test_form_page_field_condition_types(pub):
|
||||
create_superuser(pub)
|
||||
|
|
|
@ -131,9 +131,12 @@ class FieldDefPage(Directory):
|
|||
def redirect_field_anchor(self, field):
|
||||
anchor = '#itemId_%s' % field.id if field else ''
|
||||
if self.page_id:
|
||||
return redirect('../%s' % anchor)
|
||||
else:
|
||||
return redirect('../../fields/%s' % anchor)
|
||||
# check page_id is (still) a valid page number
|
||||
if self.page_id in (x.id for x in self.objectdef.fields):
|
||||
return redirect('../%s' % anchor)
|
||||
else:
|
||||
return redirect('../../../%s' % anchor)
|
||||
return redirect('../../fields/%s' % anchor)
|
||||
|
||||
def delete(self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
|
@ -327,6 +330,9 @@ class FieldsDirectory(Directory):
|
|||
r += self.index_top()
|
||||
ignore_hard_limits = get_publisher().has_site_option('ignore-hard-limits', default=True)
|
||||
|
||||
if self.page_id and self.page_id not in (x.id for x in self.objectdef.fields or []):
|
||||
raise errors.TraversalError()
|
||||
|
||||
if self.objectdef.fields:
|
||||
if len(self.objectdef.fields) >= self.fields_count_total_hard_limit:
|
||||
r += htmltext('<div class="errornotice">')
|
||||
|
|
Loading…
Reference in New Issue