8000 Fixed #6231 -- Pages created under a page-type page should also be pa… · django-cms/django-cms@d14e1b9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d14e1b9

Browse files
committed
Fixed #6231 -- Pages created under a page-type page should also be page types
1 parent a5b521c commit d14e1b9

File tree

4 files changed

+71
-17
lines changed

4 files changed

+71
-17
lines changed

cms/admin/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def save(self, *args, **kwargs):
363363
# User has created a page-type via "Add page"
364364
# instead of from another page.
365365
new_page.update(
366-
draft_only=False,
366+
draft_only=True,
367367
is_page_type=True,
368368
in_navigation=False,
369369
)

cms/cms_toolbars.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,17 @@ def add_page_menu(self):
563563
new_page_params = {'edit': 1}
564564
new_sub_page_params = {'edit': 1, 'parent_node': self.page.node_id}
565565

566+
if self.page.is_page_type:
567+
add_page_url = admin_reverse('cms_pagetype_add')
568+
advanced_url = admin_reverse('cms_pagetype_advanced', args=(self.page.pk,))
569+
page_settings_url = admin_reverse('cms_pagetype_change', args=(self.page.pk,))
570+
duplicate_page_url = admin_reverse('cms_pagetype_duplicate', args=[self.page.pk])
571+
else:
572+
add_page_url = admin_reverse('cms_page_add')
573+
advanced_url = admin_reverse('cms_page_advanced', args=(self.page.pk,))
574+
page_settings_url = admin_reverse('cms_page_change', args=(self.page.pk,))
575+
duplicate_page_url = admin_reverse('cms_page_duplicate', args=[self.page.pk])
576+
566577
can_add_root_page = page_permissions.user_can_add_page(
567578
user=self.request.user,
568579
site=self.current_site,
@@ -587,7 +598,6 @@ def add_page_menu(self):
587598
PAGE_MENU_ADD_IDENTIFIER,
588599
_('Create Page'),
589600
)
590-
app_page_url = admin_reverse('cms_page_add')
591601

592602
add_page_menu_modal_items = (
593603
(_('New Page'), new_page_params, can_add_sibling_page),
@@ -598,14 +608,10 @@ def add_page_menu(self):
598608
params.update(language=self.toolbar.language)
599609
add_page_menu.add_modal_item(
600610
title,
601-
url=add_url_parameters(app_page_url, params),
611+
url=add_url_parameters(add_page_url, params),
602612
disabled=not has_perm,
603613
)
604614

605-
if self.page.is_page_type:
606-
duplicate_page_url = admin_reverse('cms_pagetype_duplicate', args=[self.page.pk])
607-
else:
608-
duplicate_page_url = admin_reverse('cms_page_duplicate', args=[self.page.pk])
609615
add_page_menu.add_modal_item(
610616
_('Duplicate this Page'),
611617
url=add_url_parameters(duplicate_page_url, {'language': self.toolbar.language}),
@@ -620,20 +626,12 @@ def add_page_menu(self):
620626
current_page_menu.add_link_item(_('Edit this Page'), disabled=edit_mode, url=page_edit_url)
621627

622628
# page settings
623-
if self.page.is_page_type:
624-
page_settings_url = admin_reverse('cms_pagetype_change', args=(self.page.pk,))
625-
else:
626< EDBE code>-
page_settings_url = admin_reverse('cms_page_change', args=(self.page.pk,))
627629
page_settings_url = add_url_parameters(page_settings_url, language=self.toolbar.language)
628630
settings_disabled = not edit_mode or not can_change
629631
current_page_menu.add_modal_item(_('Page settings'), url=page_settings_url, disabled=settings_disabled,
630632
on_close=refresh)
631633

632634
# advanced settings
633-
if self.page.is_page_type:
634-
advanced_url = admin_reverse('cms_pagetype_advanced', args=(self.page.pk,))
635-
else:
636-
advanced_url = admin_reverse('cms_page_advanced', args=(self.page.pk,))
637635
advanced_url = add_url_parameters(advanced_url, language=self.toolbar.language)
638636
can_change_advanced = self.page.has_advanced_settings_permission(self.request.user)
639637
advanced_disabled = not edit_mode or not can_change_advanced

cms/forms/wizards.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,17 @@ def save(self, **kwargs):
162162
if self.cleaned_data.get("page_type"):
163163
return new_page
164164

165+
parent_node = self.cleaned_data.get('parent_node')
166+
167+
if parent_node and new_page.parent_page.is_page_type:
168+
# the new page was created under a page-type page
169+
# set the new page as a page-type too
170+
new_page.update(
171+
draft_only=True,
172+
is_page_type=True,
173+
in_navigation=False,
174+
)
175+
165176
# If the user provided content, then use that instead.
166177
content = self.cleaned_data.get('content')
167178
plugin_type = get_cms_setting('PAGE_WIZARD_CONTENT_PLUGIN')

cms/tests/test_wizards.py

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
from cms.cms_wizards import CMSPageWizard
1414
from cms.constants import TEMPLATE_INHERITANCE_MAGIC
1515
from cms.forms.wizards import CreateCMSPageForm, CreateCMSSubPageForm
16-
from cms.models import Page, UserSettings
16+
from cms.models import Page, PageType, UserSettings
1717
from cms.test_utils.testcases import CMSTestCase, TransactionCMSTestCase
18+
from cms.utils import get_current_site
1819
from cms.utils.conf import get_cms_setting
1920
from cms.wizards.forms import step2_form_factory, WizardStep2BaseForm
2021
from cms.wizards.wizard_base import Wizard
@@ -245,7 +246,7 @@ def test_wizard_first_page_published(self):
245246
response = self.client.get(url)
246247
self.assertEqual(response.status_code, 200)
247248

248-
def test_wizard_create_sibling_page(self):
249+
def test_wizard_create_child_page(self):
249250
superuser = self.get_superuser()
250251
parent_page = create_page(
251252
title="Parent",
@@ -271,6 +272,50 @@ def test_wizard_create_sibling_page(self):
271272
self.assertEqual(child_page.get_title('en'), 'Child')
272273
self.assertEqual(child_page.get_path('en'), 'parent/child')
273274

275+
def test_wizard_create_child_page_under_page_type(self):
276+
"""
277+
When a user creates a child page through the wizard,
278+
if the parent page is a page-type, the child page should
279+
also be a page-type.
280+
"""
281+
site = get_current_site()
282+
superuser = self.get_superuser()
283+
source_page = create_page(
284+
title="Source",
285+
template=TEMPLATE_INHERITANCE_MAGIC,
286+
language="en",
287+
)
288+
289+
with self.login_user_context(superuser):
290+
self.client.post(
291+
self.get_admin_url(PageType, 'add'),
292+
data={'source': source_page.pk, 'title': 'type1', 'slug': 'type1', '_save': 1},
293+
)
294+
295+
types_root = PageType.get_root_page(site)
296+
parent_page = types_root.get_child_pages()[0]
297+
data = {
298+
'title': 'page-type-child',
299+
'slug': 'page-type-child',
300+
'page_type': None,
301+
}
302+
form = CreateCMSSubPageForm(
303+
data=data,
304+
wizard_page=parent_page,
305+
wizard_user=superuser,
306+
wizard_language='en',
307+
)
308+
self.assertTrue(form.is_valid())
309+
310+
child_page = form.save()
311+
312+
self.assertTrue(child_page.is_page_type)
313+
self.assertFalse(child_page.in_navigation)
314+
self.assertEqual(child_page.node.depth, 3)
315+
self.assertEqual(child_page.parent_page, parent_page)
316+
self.assertEqual(child_page.get_title('en'), 'page-type-child')
317+
self.assertEqual(child_page.get_path('en'), 'page_types/type1/page-type-child')
318+
274319
def test_wizard_create_atomic(self):
275320
# Ref: https://github.com/divio/django-cms/issues/5652
276321
# We'll simulate a scenario where a user creates a page with an

0 commit comments

Comments
 (0)
0