manager: add redirect view from frontoffice to backoffice (#57672)

This commit is contained in:
Valentin Deniaud 2021-10-11 14:54:12 +02:00
parent 18fcc5a35d
commit 981f2ee8a1
4 changed files with 50 additions and 3 deletions

View File

@ -31,7 +31,8 @@ from .models import Page, extract_context_from_sub_slug
class MissingSubSlug(Exception):
pass
def __init__(self, page):
self.page = page
class ImportSiteError(Exception):
@ -241,7 +242,7 @@ def get_page_from_url_parts(parts, request=None):
break
if page.sub_slug:
if parts[i + 1 :] == []:
raise MissingSubSlug
raise MissingSubSlug(page)
extra = extract_context_from_sub_slug(page.sub_slug, parts[i + 1])
if extra is None:
page = None

View File

@ -141,6 +141,11 @@ urlpatterns = [
),
url(r'^pages/(?P<page_pk>\d+)/order$', views.cell_order, name='combo-manager-cell-order'),
url(r'^pages/order$', views.page_order, name='combo-manager-page-order'),
url(
r'^pages/(?P<page_path>[\w/_-]+)/$',
views.page_redirect_to_edit,
name='combo-manager-page-redirect-to-edit',
),
url(r'^ckeditor/upload/', ckeditor_views.upload, name='ckeditor_upload'),
url(r'^ckeditor/browse/', never_cache(assets_views.browse), name='ckeditor_browse'),
]

View File

@ -47,7 +47,15 @@ from django.views.generic import (
from combo import plugins
from combo.data.library import get_cell_class
from combo.data.models import CellBase, LinkListCell, Page, PageSnapshot, ParentContentCell
from combo.data.utils import ImportSiteError, export_site, export_site_tar, import_site, import_site_tar
from combo.data.utils import (
ImportSiteError,
MissingSubSlug,
export_site,
export_site_tar,
get_page_from_url_parts,
import_site,
import_site_tar,
)
from combo.urls_utils import staff_required
from .forms import (
@ -572,6 +580,20 @@ class SnapshotRestoreView(ManagedPageMixin, DetailView):
snapshot_restore = SnapshotRestoreView.as_view()
class PageRedirectToEditView(RedirectView):
permanent = False
def get_redirect_url(self, page_path):
try:
page = get_page_from_url_parts(page_path.split('/'))
except MissingSubSlug as e:
page = e.page
return reverse('combo-manager-page-view', kwargs={'pk': page.pk})
page_redirect_to_edit = PageRedirectToEditView.as_view()
class PageAddCellView(ManagedPageMixin, RedirectView):
permanent = False

View File

@ -2614,3 +2614,22 @@ def test_restricted_page_edit(app, admin_user, john_doe):
(page5.id, 1),
(page4.id, 0),
]
def test_redirect_to_page_edit(app, admin_user):
page = Page.objects.create(title='One', slug='one')
page2 = Page.objects.create(title='Two', slug='two', parent=page)
page3 = Page.objects.create(title='User', slug='users', sub_slug='(?P<blah>[a-z]+)')
app = login(app)
resp = app.get('/manage/pages/one/', status=302)
assert resp.location == '/manage/pages/%s/' % page.pk
resp = app.get('/manage/pages/one/two/', status=302)
assert resp.location == '/manage/pages/%s/' % page2.pk
resp = app.get('/manage/pages/users/', status=302)
assert resp.location == '/manage/pages/%s/' % page3.pk
resp = app.get('/manage/pages/users/xxx/', status=302)
assert resp.location == '/manage/pages/%s/' % page3.pk