8000 Moved placeholders from Page to Title model by Aiky30 · Pull Request #6442 · django-cms/django-cms · GitHub
[go: up one dir, main page]

Skip to content

Moved placeholders from Page to Title model #6442

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Jul 12, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8000
Prev Previous commit
Next Next commit
Continued repairing tests
  • Loading branch information
Andrew Aikman authored and czpython committed Jul 11, 2018
commit 0334681d07cbd1cb1e85ab37def5a84d504360a8
2 changes: 1 addition & 1 deletion cms/admin/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ def save(self, *args, **kwargs):
.exclude(pk=new_page.node_id)
.exists()
)
new_page.rescan_placeholders()
#AA REMOVED: new_page.rescan_placeholders()

if is_first and not new_page.is_page_type:
# its the first page. publish it right away
Expand Down
25 changes: 17 additions & 8 deletions cms/models/pagemodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -679,17 +679,17 @@ def copy(self, site, parent_node=None, language=None,
title.path = '%s/%s' % (base, title.slug) if base else title.slug
title.save()

# copy the placeholders (and plugins on those placeholders!)
for placeholder in title.placeholders.iterator():
new_placeholder = copy.copy(placeholder)
new_placeholder.pk = None
new_placeholder.save()
new_page.placeholders.add(new_placeholder)
placeholder.copy_plugins(new_placeholder, language=language)

new_page.title_cache[title.language] = title
new_page.update_languages([trans.language for trans in translations])

# copy the placeholders (and plugins on those placeholders!)
for placeholder in self.placeholders.iterator():
new_placeholder = copy.copy(placeholder)
new_placeholder.pk = None
new_placeholder.save()
new_page.placeholders.add(new_placeholder)
placeholder.copy_plugins(new_placeholder, language=language)

if extensions:
from cms.extensions import extension_pool
extension_pool.copy_extensions(self, new_page)
Expand Down Expand Up @@ -1559,6 +1559,15 @@ def get_xframe_options(self):
except IndexError:
return None

def get_placeholders(self, language=None):
"""
Allow placeholders to be fetched from the page object using a language param.
By default a cached title is returned.
"""
return self.get_title_obj(language=language).get_placeholders()

def rescan_placeholders(self, language=None):
return self.get_title_obj(language=language).rescan_placeholders()

class PageType(Page):

Expand Down
16 changes: 0 additions & 16 deletions cms/models/titlemodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,22 +194,6 @@ def _clear_placeholders(self, language=None):
models.query.QuerySet.delete(plugins)
return placeholders

def copy_placeholders(self, title, language):

cleared_placeholders = target._clear_placeholders(language)
cleared_placeholders_by_slot = {pl.slot: pl for pl in cleared_placeholders}

for placeholder in self.get_placeholders():
try:
target_placeholder = cleared_placeholders_by_slot[placeholder.slot]
except KeyError:
target_placeholder = target.placeholders.create(
slot=placeholder.slot,
default_width=placeholder.default_width,
)

placeholder.copy_plugins(target_placeholder, language=language)

def copy_placeholders(self, target, language):
"""
Copy all the plugins to a new page.
Expand Down
4 changes: 0 additions & 4 deletions cms/test_utils/testcases.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,10 +385,6 @@ def reload(self, obj):
def get_pages_root(self):
return unquote(reverse("pages-root"))

def get_page_title(self, page, language):
"Returns a page title using the page and the language"
return page.title_set.get(language=language)

def get_context(self, path=None, page=None):
if not path:
path = self.get_pages_root()
Expand Down
26 changes: 16 additions & 10 deletions cms/tests/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ def test_delete(self):
created_by=admin_user, published=True)
create_page('child-page', "nav_playground.html", "en",
created_by=admin_user, published=True, parent=page)
body = page.placeholders.get(slot='body')
page_title = page.get_title_obj("en")
body = page_title.placeholders.get(slot='body')
add_plugin(body, 'TextPlugin', 'en', body='text')
page.publish('en')
with self.login_user_context(admin_user):
Expand All @@ -150,7 +151,8 @@ def test_delete_diff_language(self):
created_by=admin_user, published=True)
create_page('child-page', "nav_playground.html", "de",
created_by=admin_user, published=True, parent=page)
body = page.placeholders.get(slot='body')
page_title = page.get_title_obj("en")
body = page_title.placeholders.get(slot='body')
add_plugin(body, 'TextPlugin', 'en', body='text')
page.publish('en')
with self.login_user_context(admin_user):
Expand Down Expand Up @@ -361,7 +363,8 @@ def test_empty_placeholder_with_nested_plugins(self):
# This allows us to catch a strange bug that happened
# under these conditions with the new related name handling.
page_en = create_page("EmptyPlaceholderTestPage (EN)", "nav_playground.html", "en")
ph = page_en.placeholders.get(slot="body")
page_en_title = page_en.get_title_obj("en")
ph = page_en_title.placeholders.get(slot="body")

column_wrapper = add_plugin(ph, "MultiColumnPlugin", "en")

Expand All @@ -388,7 +391,8 @@ def test_empty_placeholder_in_correct_language(self):
"""
# create some objects
page_en = create_page("EmptyPlaceholderTestPage (EN)", "nav_playground.html", "en")
ph = page_en.placeholders.get(slot="body")
page_en_title = page_en.get_title_obj("en")
ph = page_en_title.placeholders.get(slot="body")

# add the text plugin to the en version of the page
add_plugin(ph, "TextPlugin", "en", body="Hello World EN 1")
Expand Down Expand Up @@ -523,7 +527,7 @@ def test_publish_page_requires_perms(self):
self.assertEqual(response.status_code, 403)

def test_remove_plugin_requires_post(self):
ph = self.page.placeholders.all()[0]
ph = self.page.get_placeholders()[0]
plugin = add_plugin(ph, 'TextPlugin', 'en', body='test')
admin_user = self.get_admin()
with self.login_user_context(admin_user):
Expand All @@ -533,7 +537,7 @@ def test_remove_plugin_requires_post(self):

def test_move_language(self):
page = self.get_page()
source, target = list(page.placeholders.all())[:2]
source, target = list(page.get_placeholders())[:2]
col = add_plugin(source, 'MultiColumnPlugin', 'en')
sub_col = add_plugin(source, 'ColumnPlugin', 'en', target=col)
col2 = add_plugin(source, 'MultiColumnPlugin', 'de')
Expand Down Expand Up @@ -597,7 +601,8 @@ def test_too_many_plugins_global(self):
url = admin_reverse('cms_page_add_plugin')
with self.settings(CMS_PERMISSION=False, CMS_PLACEHOLDER_CONF=conf):
page = create_page('somepage', 'nav_playground.html', 'en')
body = page.placeholders.get(slot='body')
page_title = page.get_title_obj(language='en')
body = page_title.placeholders.get(slot='body')
add_plugin(body, 'TextPlugin', 'en', body='text')
with self.login_user_context(admin_user):
data = {
Expand All @@ -620,7 +625,8 @@ def test_too_many_plugins_type(self):
url = admin_reverse('cms_page_add_plugin')
with self.settings(CMS_PERMISSION=False, CMS_PLACEHOLDER_CONF=conf):
page = create_page('somepage', 'nav_playground.html', 'en')
body = page.placeholders.get(slot='body')
page_title = page.get_title_obj(language='en')
body = page_title.placeholders.get(slot='body')
add_plugin(body, 'TextPlugin', 'en', body='text')
with self.login_user_context(admin_user):
data = {
Expand Down Expand Up @@ -688,7 +694,7 @@ def test_lookup_allowed_published(self):
class PluginPermissionTests(AdminTestsBase):
def setUp(self):
self._page = create_page('test page', 'nav_playground.html', 'en')
self._placeholder = self._page.placeholders.all()[0]
self._placeholder = self._page.get_placeholders()[0]

def _get_admin(self):
User = get_user_model()
Expand Down Expand Up @@ -961,7 +967,7 @@ def test_advanced_settings_endpoint_fails_gracefully(self):

def test_create_page_type(self):
page = create_page('Test', 'static.html', 'en', published=True, reverse_id="home")
for placeholder in page.placeholders.all():
for placeholder in page.get_placeholders():
add_plugin(placeholder, TextPlugin, 'en', body='<b>Test</b>')
page.publish('en')
self.assertEqual(Page.objects.count(), 2)
Expand Down
3 changes: 2 additions & 1 deletion cms/tests/test_alias.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ def test_alias_placeholder_is_not_editable(self):
published=True,
in_navigation=True,
)
source_placeholder = source_page.placeholders.get(slot="col_left")
source_title = source_page.get_title_obj(language="en")
source_placeholder = source_title.placeholders.get(slot="col_left")

style = api.add_plugin(
source_placeholder,
Expand Down
22 changes: 8 additions & 14 deletions cms/tests/test_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -616,10 +616,7 @@ def test_delete_with_plugins(self):
Text = self.get_plugin_model('TextPlugin')
home = create_page("home", "nav_playground.html", "en")
page = create_page("page", "nav_playground.html", "en")
home_title = self.get_page_title(page=home, language="en")
page_title = self.get_page_title(page=page, language="en")
page_title.rescan_placeholders() # create placeholders
placeholder = page_title.placeholders.all()[0]
placeholder = page.get_placeholders()[0]
plugin_base = CMSPlugin(
plugin_type='TextPlugin',
placeholder=placeholder,
Expand All @@ -636,8 +633,8 @@ def test_delete_with_plugins(self):
self.assertTrue(Placeholder.objects.count() > 2)

superuser = self.get_superuser()
home_pl_count = home_title.get_placeholders().count()
page_pl_count = page_title.get_placeholders().count()
home_pl_count = home.get_placeholders().count()
page_pl_count = page.get_placeholders().count()
expected_pl_count = Placeholder.objects.count() - (home_pl_count + page_pl_count)

with self.login_user_context(superuser):
Expand Down Expand Up @@ -891,8 +888,7 @@ def test_plugin_loading_queries(self):
CMS_TEMPLATES=(('placeholder_tests/base.html', 'tpl'), ),
):
page = create_page('home', 'placeholder_tests/base.html', 'en', published=True, slug='home')
title = self.get_page_title(page=page, language="en")
placeholders = list(title.placeholders.all())
placeholders = list(page.get_placeholders())
for i, placeholder in enumerate(placeholders):
for j in range(5):
add_plugin(placeholder, 'TextPlugin', 'en', body='text-%d-%d' % (i, j))
Expand Down Expand Up @@ -1069,9 +1065,8 @@ def test_page_used_on_request(self):
slug='home',
xframe_options=Page.X_FRAME_OPTIONS_DENY
)
title = self.get_page_title(page=cms_page, language="en")
placeholder = title.placeholders.all()[0]
add_plugin(title.placeholders.all()[0], 'TextPlugin', 'en', body=public_text)
placeholder = cms_page.get_placeholders()[0]
add_plugin(cms_page.get_placeholders()[0], 'TextPlugin', 'en', body=public_text)
cms_page.publish('en')
add_plugin(placeholder, 'TextPlugin', 'en', body=draft_text)
endpoint = cms_page.get_absolute_url('en')
Expand Down Expand Up @@ -1134,9 +1129,8 @@ def test_page_preview_persists(self):
slug='home',
xframe_options=Page.X_FRAME_OPTIONS_DENY
)
title = self.get_page_title(page=cms_page, language="en")
placeholder = title.placeholders.all()[0]
add_plugin(title.placeholders.all()[0], 'TextPlugin', 'en', body=public_text)
placeholder = cms_page.get_placeholders()[0]
add_plugin(cms_page.get_placeholders()[0], 'TextPlugin', 'en', body=public_text)
cms_page.publish('en')
add_plugin(placeholder, 'TextPlugin', 'en', body=draft_text)
endpoint = cms_page.get_absolute_url('en')
Expand Down
Loading
0