From e6462bb630587c42f4143b2c758acb5298b05276 Mon Sep 17 00:00:00 2001 From: Florian Scherf Date: Mon, 29 Jan 2024 12:32:29 +0100 Subject: [PATCH 1/2] fix djangocms-versioning draft deletion bug (#214) Previously, `djangocms_alias.models.AliasContent.delete` deleted all plugins related to `AliasContent.alias`, with the same language. Drafts and previously published versions included. This meant that the deletion of a draft resulted in plugins disappearing from published pages. This patch removes the mechanism entirely and instead adds a warning, notifying the user that the last version or translation of a language got deleted. Signed-off-by: Florian Scherf --- djangocms_alias/admin.py | 12 +++++++++++- djangocms_alias/models.py | 5 ----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/djangocms_alias/admin.py b/djangocms_alias/admin.py index 0f32954..dc1c88e 100644 --- a/djangocms_alias/admin.py +++ b/djangocms_alias/admin.py @@ -2,7 +2,7 @@ from cms.utils.permissions import get_model_permission_codename from cms.utils.urlutils import admin_reverse from django import forms -from django.contrib import admin +from django.contrib import admin, messages from django.http import ( Http404, HttpRequest, @@ -190,3 +190,13 @@ def has_module_permission(self, request: HttpRequest) -> bool: """Hides admin class in admin site overview""" return False + + def delete_model(self, request: HttpRequest, obj: AliasContent): + if obj.alias._default_manager.filter(language=obj.language).count() == 1: + message = _("Alias content for language {} deleted. A new empty alias content will be created if needed.").format(obj.language) + self.message_user(request, message, level=messages.WARNING) + + return super().delete_model( + request=request, + obj=obj, + ) diff --git a/djangocms_alias/models.py b/djangocms_alias/models.py index 4e0b397..d7f4148 100644 --- a/djangocms_alias/models.py +++ b/djangocms_alias/models.py @@ -291,11 +291,6 @@ def get_placeholders(self): def get_template(self): return "djangocms_alias/alias_content.html" - @transaction.atomic - def delete(self, *args, **kwargs): - super().delete(*args, **kwargs) - self.alias.cms_plugins.filter(language=self.language).delete() - @transaction.atomic def populate(self, replaced_placeholder=None, replaced_plugin=None, plugins=None): if not replaced_placeholder and not replaced_plugin: From 5eeb8da96e2a9757c5d0a5a4593dd9912bfe219a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 09:48:59 +0000 Subject: [PATCH 2/2] ci: auto fixes from pre-commit hooks for more information, see https://pre-commit.ci --- djangocms_alias/admin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/djangocms_alias/admin.py b/djangocms_alias/admin.py index dc1c88e..f2c13c4 100644 --- a/djangocms_alias/admin.py +++ b/djangocms_alias/admin.py @@ -193,7 +193,9 @@ def has_module_permission(self, request: HttpRequest) -> bool: def delete_model(self, request: HttpRequest, obj: AliasContent): if obj.alias._default_manager.filter(language=obj.language).count() == 1: - message = _("Alias content for language {} deleted. A new empty alias content will be created if needed.").format(obj.language) + message = _( + "Alias content for language {} deleted. A new empty alias content will be created if needed." + ).format(obj.language) self.message_user(request, message, level=messages.WARNING) return super().delete_model(