From c939e719da3f98a38f9373998a5157c4df99a45e Mon Sep 17 00:00:00 2001 From: Stefan van den Eertwegh Date: Wed, 5 Mar 2025 13:04:28 +0100 Subject: [PATCH 1/6] added snippets changelog to the toolbar under admin menu --- src/djangocms_snippet/cms_toolbars.py | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/djangocms_snippet/cms_toolbars.py diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py new file mode 100644 index 0000000..cba26ec --- /dev/null +++ b/src/djangocms_snippet/cms_toolbars.py @@ -0,0 +1,58 @@ +from cms.cms_toolbars import ( + ADMIN_MENU_IDENTIFIER, + ADMINISTRATION_BREAK, + SHORTCUTS_BREAK, +) +from cms.toolbar.items import Break +from cms.toolbar_base import CMSToolbar +from cms.toolbar_pool import toolbar_pool +from cms.utils.urlutils import admin_reverse +from django.utils.encoding import force_str +from django.utils.translation import ( + gettext_lazy as _, +) + + +@toolbar_pool.register +class AliasToolbar(CMSToolbar): + name = _("Snippet") + plural_name = _("Snippets") + + def populate(self): + self.add_aliases_link_to_admin_menu() + + def add_aliases_link_to_admin_menu(self): + admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) + + url = admin_reverse('djangocms_snippet_snippet_changelist') + + admin_menu.add_sideframe_item( + _("Snippets"), + url=url, + position=self.get_insert_position(admin_menu, self.plural_name), + ) + + @classmethod + def get_insert_position(cls, admin_menu, item_name): + """ + Ensures that there is a SHORTCUTS_BREAK and returns a position for an + alphabetical position against all items between SHORTCUTS_BREAK, and + the ADMINISTRATION_BREAK. + """ + start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) + + if not start: + end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) + admin_menu.add_break(SHORTCUTS_BREAK, position=end.index) + start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) + end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) + + items = admin_menu.get_items()[start.index + 1: end.index] + for idx, item in enumerate(items): + try: + if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 + return idx + start.index + 1 + except AttributeError: + # Some item types do not have a 'name' attribute. + pass + return end.index From 3f1b78e5112a13718301473645250c5d4a292180 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 12:07:04 +0000 Subject: [PATCH 2/6] ci: auto fixes from pre-commit hooks for more information, see https://pre-commit.ci --- src/djangocms_snippet/cms_toolbars.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py index cba26ec..94fd7da 100644 --- a/src/djangocms_snippet/cms_toolbars.py +++ b/src/djangocms_snippet/cms_toolbars.py @@ -24,7 +24,7 @@ def populate(self): def add_aliases_link_to_admin_menu(self): admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - url = admin_reverse('djangocms_snippet_snippet_changelist') + url = admin_reverse("djangocms_snippet_snippet_changelist") admin_menu.add_sideframe_item( _("Snippets"), @@ -47,10 +47,10 @@ def get_insert_position(cls, admin_menu, item_name): start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) - items = admin_menu.get_items()[start.index + 1: end.index] + items = admin_menu.get_items()[start.index + 1 : end.index] for idx, item in enumerate(items): try: - if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 + if force_str(item_name.lower()) < force_str(item.name.lower()): return idx + start.index + 1 except AttributeError: # Some item types do not have a 'name' attribute. From 8c3d837eb91d6e988a473cb4d64086d9c16dec54 Mon Sep 17 00:00:00 2001 From: Stefan van den Eertwegh Date: Wed, 5 Mar 2025 13:15:01 +0100 Subject: [PATCH 3/6] added snippets changelog to the toolbar under admin menu v2 --- src/djangocms_snippet/cms_toolbars.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py index 94fd7da..c5059a4 100644 --- a/src/djangocms_snippet/cms_toolbars.py +++ b/src/djangocms_snippet/cms_toolbars.py @@ -14,17 +14,17 @@ @toolbar_pool.register -class AliasToolbar(CMSToolbar): +class SnippetToolbar(CMSToolbar): name = _("Snippet") plural_name = _("Snippets") def populate(self): - self.add_aliases_link_to_admin_menu() + self.add_snippet_link_to_admin_menu() - def add_aliases_link_to_admin_menu(self): + def add_snippet_link_to_admin_menu(self): admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - url = admin_reverse("djangocms_snippet_snippet_changelist") + url = admin_reverse('djangocms_snippet_snippet_changelist') admin_menu.add_sideframe_item( _("Snippets"), @@ -47,10 +47,10 @@ def get_insert_position(cls, admin_menu, item_name): start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) - items = admin_menu.get_items()[start.index + 1 : end.index] + items = admin_menu.get_items()[start.index + 1: end.index] for idx, item in enumerate(items): try: - if force_str(item_name.lower()) < force_str(item.name.lower()): + if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 return idx + start.index + 1 except AttributeError: # Some item types do not have a 'name' attribute. From 387de15d0645acc25d63955d8b10353ddfcb7220 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 12:15:14 +0000 Subject: [PATCH 4/6] ci: auto fixes from pre-commit hooks for more information, see https://pre-commit.ci --- src/djangocms_snippet/cms_toolbars.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py index c5059a4..3c9579b 100644 --- a/src/djangocms_snippet/cms_toolbars.py +++ b/src/djangocms_snippet/cms_toolbars.py @@ -24,7 +24,7 @@ def populate(self): def add_snippet_link_to_admin_menu(self): admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - url = admin_reverse('djangocms_snippet_snippet_changelist') + url = admin_reverse("djangocms_snippet_snippet_changelist") admin_menu.add_sideframe_item( _("Snippets"), @@ -47,10 +47,10 @@ def get_insert_position(cls, admin_menu, item_name): start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) - items = admin_menu.get_items()[start.index + 1: end.index] + items = admin_menu.get_items()[start.index + 1 : end.index] for idx, item in enumerate(items): try: - if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 + if force_str(item_name.lower()) < force_str(item.name.lower()): return idx + start.index + 1 except AttributeError: # Some item types do not have a 'name' attribute. From 065f9082b45b4455374b4af5205e4ad00964d858 Mon Sep 17 00:00:00 2001 From: Stefan van den Eertwegh Date: Wed, 5 Mar 2025 13:43:11 +0100 Subject: [PATCH 5/6] added if added or change permissions are true --- src/djangocms_snippet/cms_toolbars.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py index 3c9579b..1d6b9ff 100644 --- a/src/djangocms_snippet/cms_toolbars.py +++ b/src/djangocms_snippet/cms_toolbars.py @@ -24,13 +24,17 @@ def populate(self): def add_snippet_link_to_admin_menu(self): admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - url = admin_reverse("djangocms_snippet_snippet_changelist") + url = admin_reverse('djangocms_snippet_snippet_changelist') - admin_menu.add_sideframe_item( - _("Snippets"), - url=url, - position=self.get_insert_position(admin_menu, self.plural_name), - ) + add_perm = self.request.user.has_perm('djangocms_snippet.add_snippet') + change_perm = self.request.user.has_perm('djangocms_snippet.change_snippet') + + if add_perm or change_perm: + admin_menu.add_sideframe_item( + _("Snippets"), + url=url, + position=self.get_insert_position(admin_menu, self.plural_name), + ) @classmethod def get_insert_position(cls, admin_menu, item_name): @@ -47,10 +51,10 @@ def get_insert_position(cls, admin_menu, item_name): start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) - items = admin_menu.get_items()[start.index + 1 : end.index] + items = admin_menu.get_items()[start.index + 1: end.index] for idx, item in enumerate(items): try: - if force_str(item_name.lower()) < force_str(item.name.lower()): + if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 return idx + start.index + 1 except AttributeError: # Some item types do not have a 'name' attribute. From fbde4bc7a8d82b730c6c79b098866756f51384ee Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 12:44:07 +0000 Subject: [PATCH 6/6] ci: auto fixes from pre-commit hooks for more information, see https://pre-commit.ci --- src/djangocms_snippet/cms_toolbars.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/djangocms_snippet/cms_toolbars.py b/src/djangocms_snippet/cms_toolbars.py index 1d6b9ff..8df9f14 100644 --- a/src/djangocms_snippet/cms_toolbars.py +++ b/src/djangocms_snippet/cms_toolbars.py @@ -24,10 +24,10 @@ def populate(self): def add_snippet_link_to_admin_menu(self): admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - url = admin_reverse('djangocms_snippet_snippet_changelist') + url = admin_reverse("djangocms_snippet_snippet_changelist") - add_perm = self.request.user.has_perm('djangocms_snippet.add_snippet') - change_perm = self.request.user.has_perm('djangocms_snippet.change_snippet') + add_perm = self.request.user.has_perm("djangocms_snippet.add_snippet") + change_perm = self.request.user.has_perm("djangocms_snippet.change_snippet") if add_perm or change_perm: admin_menu.add_sideframe_item( @@ -51,10 +51,10 @@ def get_insert_position(cls, admin_menu, item_name): start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK) end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK) - items = admin_menu.get_items()[start.index + 1: end.index] + items = admin_menu.get_items()[start.index + 1 : end.index] for idx, item in enumerate(items): try: - if force_str(item_name.lower()) < force_str(item.name.lower()): # noqa: E501 + if force_str(item_name.lower()) < force_str(item.name.lower()): return idx + start.index + 1 except AttributeError: # Some item types do not have a 'name' attribute.