From 565d4cc157778e2225d60cfb247cb8d12d866dec Mon Sep 17 00:00:00 2001 From: theShinigami Date: Fri, 1 Nov 2024 18:41:45 +0300 Subject: [PATCH 1/4] fix: add redirect notification page when in edit mode --- cms/views.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cms/views.py b/cms/views.py index a9380c0d637..ed47de42069 100644 --- a/cms/views.py +++ b/cms/views.py @@ -326,6 +326,11 @@ def render_object_endpoint(request, content_type_id, object_id, require_editable toolbar = get_toolbar_from_request(request) toolbar.set_object(content_type_obj) + if request.user.is_staff and toolbar.edit_mode_active: + redirect = getattr(content_type_obj, "redirect", None) + if isinstance(redirect, str): + toolbar.redirect_url = redirect + if require_editable and not toolbar.object_is_editable(): # If not editable, switch from edit to preview endpoint return HttpResponseRedirect(get_object_preview_url(content_type_obj)) From d77201ea3aa2f158731e983e0ced9bb614ddf459 Mon Sep 17 00:00:00 2001 From: theShinigami Date: Sat, 2 Nov 2024 18:47:27 +0300 Subject: [PATCH 2/4] refactor(details): remove setting of redirect_url --- cms/views.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cms/views.py b/cms/views.py index ed47de42069..04fa55fee13 100644 --- a/cms/views.py +++ b/cms/views.py @@ -190,9 +190,7 @@ def details(request, slug): redirect_url = _clean_redirect_url(redirect_url, request_language) if redirect_url: - if request.user.is_staff and toolbar.edit_mode_active: - toolbar.redirect_url = redirect_url - elif redirect_url not in own_urls: + if redirect_url not in own_urls: if get_cms_setting('REDIRECT_PRESERVE_QUERY_PARAMS'): query_string = request.META.get('QUERY_STRING') if query_string: From 5216c174b81274dac944556600865cdff81d849f Mon Sep 17 00:00:00 2001 From: theShinigami Date: Sat, 2 Nov 2024 18:50:05 +0300 Subject: [PATCH 3/4] test: add test to verify message display when redirect is set --- cms/tests/test_views.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cms/tests/test_views.py b/cms/tests/test_views.py index 59994ca8679..09fb10b1b93 100644 --- a/cms/tests/test_views.py +++ b/cms/tests/test_views.py @@ -101,6 +101,28 @@ def test_apphook_not_hooked(self): self.assertEqual(response.status_code, 200) self.apphook_clear() + def test_redirect_preview_in_edit_mode(self): + + user = self.get_superuser() + page = create_page("page", "nav_playground.html", "fr") + page_content = create_page_content("en", "home", page, redirect="https://example.com") + + page.set_as_homepage() + + with self.login_user_context(user), force_language('fr'): + edit_url = get_object_edit_url(page_content, language='fr') + response = self.client.get(edit_url, follow=True) + + expected = f""" +
+
+

This page has no preview!

+

It is being redirected to: {page_content.redirect}

+
+
+ """ + self.assertContains(response, expected, count=1, html=True) + def test_external_redirect(self): # test external redirect redirect_one = 'https://www.django-cms.org/' From 553f7a4223545f90a957ac554861a0ebd1157dda Mon Sep 17 00:00:00 2001 From: theShinigami Date: Sat, 2 Nov 2024 18:56:17 +0300 Subject: [PATCH 4/4] refactor: remove unused variable from details view --- cms/views.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cms/views.py b/cms/views.py index 04fa55fee13..9b1b23cc0b6 100644 --- a/cms/views.py +++ b/cms/views.py @@ -85,7 +85,6 @@ def details(request, slug): # Get a Page model object from the request site = get_current_site() page = get_page_from_request(request, use_path=slug) - toolbar = get_toolbar_from_request(request) if not page and not slug and not Page.objects.on_site(site).exists(): # render the welcome page if the requested path is root "/"