Skip to content

Commit 3df6225

Browse files
fsbraunmarksweb
andauthored
fix: Modify language menu for pages only if it is present (#333)
* Compile messages * Add locale directory to manifest * fix: Pages do not need to have. a language menu. Only try modifying if it is there. * Add test * Update tests/test_toolbars.py Co-authored-by: Mark Walker <[email protected]> --------- Co-authored-by: Mark Walker <[email protected]>
1 parent 91eafe1 commit 3df6225

File tree

7 files changed

+30
-5
lines changed

7 files changed

+30
-5
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Changelog
44

55
Unreleased
66
==========
7+
* fix: Only try modifying page language menu if it is present
78
* fix: Added ``related_name`` attribute to the ``content_type`` foreign key of the ``Version`` model.
89
* fix: burger menu adjusts to the design of django cms core dropdown
910
* fix: bug that showed an archived version as unpublished in some cases in the state indicator

MANIFEST.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ include LICENSE.txt
22
include README.rst
33
recursive-include djangocms_versioning/static *
44
recursive-include djangocms_versioning/templates *
5+
recursive-include djangocms_versioning/locale *
56
recursive-exclude * *.pyc

djangocms_versioning/cms_toolbars.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,10 +320,9 @@ def override_language_menu(self):
320320
Override the default language menu for pages that are versioned.
321321
The default language menu is too generic so for pages we need to replace it.
322322
"""
323-
# Only override the menu if a page can be found
324-
if settings.USE_I18N and self.page:
325-
language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER, _("Language"))
326-
323+
# Only override the menu if it exists and a page can be found
324+
language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER, _("Language"))
325+
if settings.USE_I18N and language_menu and self.page:
327326
# remove_item uses `items` attribute so we have to copy object
328327
for _item in copy(language_menu.items):
329328
language_menu.remove_item(item=_item)
1.37 KB
Binary file not shown.
1.41 KB
Binary file not shown.

djangocms_versioning/locale/nl/LC_MESSAGES/django.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ msgstr "Actie niet geldig. De laatste versie is gesloten door {user}"
266266
#: models.py:33
267267
#, python-brace-format
268268
msgid "Action Denied. The draft version is locked by {user}"
269-
msgstr "Actie niet geldig. De concept versie is gesloten door "
269+
msgstr "Actie niet geldig. De concept versie is gesloten door {user}"
270270

271271
#: models.py:88
272272
msgid "Created"

tests/test_toolbars.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,3 +578,27 @@ def test_change_language_menu_page_toolbar_language_selector_version_link(self):
578578
self.assertEqual(en_item.url, en_preview_url)
579579
self.assertEqual(de_item.url, de_preview_url)
580580
self.assertEqual(it_item.url, it_preview_url)
581+
582+
def test_page_toolbar_wo_language_menu(self):
583+
from django.utils.translation import gettext as _
584+
585+
pagecontent = PageContentWithVersionFactory(language="en")
586+
page = pagecontent.page
587+
# Get request
588+
request = self.get_page_request(
589+
page=page,
590+
path=get_object_edit_url(pagecontent),
591+
user=self.get_superuser(),
592+
)
593+
# Remove language menu from request's toolbar
594+
del request.toolbar.menus[LANGUAGE_MENU_IDENTIFIER]
595+
596+
# find VersioningPageToolbar
597+
for cls, toolbar in request.toolbar.toolbars.items():
598+
if cls == "djangocms_versioning.cms_toolbars.VersioningPageToolbar":
599+
# and call override_language_menu
600+
toolbar.override_language_menu()
601+
break
602+
603+
language_menu = request.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER, _("Language"))
604+
self.assertIsNone(language_menu)

0 commit comments

Comments
 (0)