Skip to content
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Testing

To run all the tests the only thing you need to do is run::

pip install -r tests/requirements.txt
pip install -r tests/requirements/requirements_base.txt
python test_settings.py


Expand Down
97 changes: 42 additions & 55 deletions djangocms_versioning/cms_toolbars.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ def _is_versioned(self):
versioning
"""
versioning_extension = apps.get_app_config("djangocms_versioning").cms_extension
return versioning_extension.is_content_model_versioned(
self.toolbar.obj.__class__
)
return versioning_extension.is_content_model_versioned(self.toolbar.obj.__class__)

def _get_proxy_model(self):
"""Helper method to get the proxy model class for the content
Expand All @@ -66,8 +64,7 @@ def _get_proxy_model(self):
return self._get_versionable().version_model_proxy

def _add_publish_button(self):
"""Helper method to add a publish button to the toolbar
"""
"""Helper method to add a publish button to the toolbar"""
# Check if object is registered with versioning otherwise don't add
if not self._is_versioned():
return
Expand Down Expand Up @@ -99,8 +96,7 @@ def add_edit_button(self):
self._add_unlock_button()

def _add_edit_button(self, disabled=False):
"""Helper method to add an edit button to the toolbar
"""
"""Helper method to add an edit button to the toolbar"""
item = ButtonList(side=self.toolbar.RIGHT)
proxy_model = self._get_proxy_model()
version = Version.objects.get_for_content(self.toolbar.obj)
Expand All @@ -109,9 +105,9 @@ def _add_edit_button(self, disabled=False):
f"admin:{proxy_model._meta.app_label}_{proxy_model.__name__.lower()}_edit_redirect",
args=(version.pk,),
)
pks_for_grouper = version.versionable.for_content_grouping_values(
version.content
).values_list("pk", flat=True)
pks_for_grouper = version.versionable.for_content_grouping_values(version.content).values_list(
"pk", flat=True
)
content_type = ContentType.objects.get_for_model(version.content)
draft_exists = Version.objects.filter(
object_id__in=pks_for_grouper, content_type=content_type, state=DRAFT
Expand All @@ -125,8 +121,7 @@ def _add_edit_button(self, disabled=False):
self.toolbar.add_item(item)

def _add_unlock_button(self):
"""Helper method to add an edit button to the toolbar
"""
"""Helper method to add an edit button to the toolbar"""
if LOCK_VERSIONS and self._is_versioned():
item = ButtonList(side=self.toolbar.RIGHT)
proxy_model = self._get_proxy_model()
Expand Down Expand Up @@ -164,8 +159,7 @@ def _add_lock_message(self):
self.toolbar.add_item(lock_message, position=0)

def _add_revert_button(self, disabled=False):
"""Helper method to add a revert button to the toolbar
"""
"""Helper method to add a revert button to the toolbar"""
# Check if object is registered with versioning otherwise don't add
if not self._is_versioned():
return
Expand All @@ -186,8 +180,7 @@ def _add_revert_button(self, disabled=False):
self.toolbar.add_item(item)

def _add_versioning_menu(self):
""" Helper method to add version menu in the toolbar
"""
"""Helper method to add version menu in the toolbar"""
# Check if object is registered with versioning otherwise don't add
if not self._is_versioned():
return
Expand Down Expand Up @@ -215,13 +208,15 @@ def _add_versioning_menu(self):
proxy_model = self._get_proxy_model()
url = reverse(
f"admin:{proxy_model._meta.app_label}_{proxy_model.__name__.lower()}_compare",
args=(version.source.pk,)
args=(version.source.pk,),
)

url += "?" + urlencode({
"compare_to": version.pk,
"back": self.toolbar.request_path,
})
url += "?" + urlencode(
{
"compare_to": version.pk,
"back": self.toolbar.request_path,
}
)
versioning_menu.add_link_item(name, url=url)
# Discard changes menu entry (wrt to source)
if version.check_discard.as_bool(self.request.user): # pragma: no cover
Expand All @@ -230,26 +225,22 @@ def _add_versioning_menu(self):
_("Discard Changes"),
url=reverse(
f"admin:{proxy_model._meta.app_label}_{proxy_model.__name__.lower()}_discard",
args=(version.pk,)
)
args=(version.pk,),
),
)

def _get_published_page_version(self):
"""Returns a published page if one exists for the toolbar object
"""
"""Returns a published page if one exists for the toolbar object"""
language = self.current_lang

# Exit the current toolbar object is not a Page / PageContent instance
if not isinstance(self.toolbar.obj, PageContent) or not self.page:
return

return PageContent.objects.filter(
page=self.page, language=language
).select_related("page").first()
return PageContent.objects.filter(page=self.page, language=language).select_related("page").first()

def _add_view_published_button(self):
"""Helper method to add a publish button to the toolbar
"""
"""Helper method to add a publish button to the toolbar"""
# Check if object is registered with versioning otherwise don't add
if not self._is_versioned():
return
Expand Down Expand Up @@ -360,20 +351,10 @@ def change_language_menu(self):
return None

languages = get_language_dict(self.current_site.pk)
remove = [
(code, languages.get(code, code))
for code in self.page.get_languages()
if code in languages
]
add = [
code
for code in languages.items()
if code not in remove
]
remove = [(code, languages.get(code, code)) for code in self.page.get_languages() if code in languages]
add = [code for code in languages.items() if code not in remove]
copy = [
(code, name)
for code, name in languages.items()
if code != self.current_lang and (code, name) in remove
(code, name) for code, name in languages.items() if code != self.current_lang and (code, name) in remove
]

if add:
Expand All @@ -386,9 +367,7 @@ def change_language_menu(self):
page_add_url = admin_reverse("cms_pagecontent_add")

for code, name in add:
url = add_url_parameters(
page_add_url, cms_page=self.page.pk, language=code
)
url = add_url_parameters(page_add_url, cms_page=self.page.pk, language=code)
add_plugins_menu.add_modal_item(name, url=url)

if remove and ALLOW_DELETING_VERSIONS and CMS_SUPPORTS_DELETING_TRANSLATIONS:
Expand All @@ -404,8 +383,13 @@ def change_language_menu(self):
on_close = REFRESH_PAGE
if self.toolbar.get_object() == pagecontent and not disabled:
other_content = next(
(self.page.get_admin_content(lang) for lang in self.page.get_languages()
if lang != pagecontent.language and lang in languages), None)
(
self.page.get_admin_content(lang)
for lang in self.page.get_languages()
if lang != pagecontent.language and lang in languages
),
None,
)
on_close = get_object_preview_url(other_content)
remove_plugins_menu.add_modal_item(name, url=url, disabled=disabled, on_close=on_close)

Expand All @@ -422,9 +406,11 @@ def change_language_menu(self):
if page_content: # Only offer to copy if content for source language exists
page_copy_url = admin_reverse("cms_pagecontent_copy_language", args=(page_content.pk,))
copy_plugins_menu.add_ajax_item(
title % name, action=page_copy_url,
title % name,
action=page_copy_url,
data={"source_language": code, "target_language": self.current_lang},
question=question % name, on_success=self.toolbar.REFRESH_PAGE
question=question % name,
on_success=self.toolbar.REFRESH_PAGE,
)
item_added = True
if not item_added: # pragma: no cover
Expand All @@ -448,12 +434,14 @@ def add_language_menu(self):
return

languages = get_language_tuple(self.current_site.pk)
page_languages = self.request.current_page.get_languages()
if len(languages) < 2:
return # No need to show the language menu if there is only one language

language_menu = self.toolbar.get_or_create_menu(
LANGUAGE_MENU_IDENTIFIER, _("Language"), position=-1
)
if len(page_languages) < 2:
return # No need to show language menu if current page has one language

language_menu = self.toolbar.get_or_create_menu(LANGUAGE_MENU_IDENTIFIER, _("Languages"), position=-1)
for code, name in languages:
# Get the page content, it could be draft too!
page_content = self.page.get_admin_content(language=code)
Expand All @@ -467,8 +455,7 @@ def replace_toolbar(old, new):
new_name = ".".join((new.__module__, new.__name__))
old_name = ".".join((old.__module__, old.__name__))
toolbar_pool.toolbars = OrderedDict(
(new_name, new) if name == old_name else (name, toolbar)
for name, toolbar in toolbar_pool.toolbars.items()
(new_name, new) if name == old_name else (name, toolbar) for name, toolbar in toolbar_pool.toolbars.items()
)


Expand Down
Loading
Loading