diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index 4b885abd0..71346bb6c 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -6735,6 +6735,22 @@ def test_backoffice_custom_view_visibility(pub): [('custom-test-view', 'owner'), ('shared-view', 'any'), ('shared-view-2', 'any')]) +def test_backoffice_missing_custom_view(pub): + create_superuser(pub) + create_environment(pub, set_receiver=False) + app = login(get_app(pub)) + resp = app.get('/backoffice/management/form-title/user-plop/') + assert resp.location == 'http://example.net/backoffice/management/form-title/' + resp = resp.follow() + assert 'A missing or invalid custom view was referenced' in resp + + resp = app.get('/backoffice/management/form-title/user-plop/1/') + assert resp.location == 'http://example.net/backoffice/management/form-title/1/' + + resp = app.get('/backoffice/management/form-title/user-plop/1/?plop') + assert resp.location == 'http://example.net/backoffice/management/form-title/1/?plop' + + def test_carddata_custom_view(pub, studio): CardDef.wipe() user = create_user(pub) diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index 641e1394b..242c55ff3 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -2487,6 +2487,15 @@ class FormPage(Directory): for view in self.get_custom_views(): if view.get_url_slug() == component: return self.__class__(formdef=self.formdef, view=view) + if component.startswith('user-'): + get_session().message = ('warning', + _('A missing or invalid custom view was referenced; ' + 'you have been automatically redirected.')) + # remove custom view reference from path + # (ignore the fact that some form/card could itself be named + # user-whatever) + url = get_request().get_path_query().replace('/%s/' % component, '/') + return misc.QLookupRedirect(url) try: filled = self.formdef.data_class().get(component) @@ -2906,6 +2915,8 @@ class FormBackOfficeStatusPage(FormStatusPage): r += htmltext('') r += htmltext('') + r += get_session().display_message() + r += htmltext('