Skip to content

Commit

Permalink
fix draft deletion bug on Django CMS 4.0.x (#233)
Browse files Browse the repository at this point in the history
* fix djangocms-versioning draft deletion bug (#214) (#215)

* 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 <[email protected]>

* ci: auto fixes from pre-commit hooks

for more information, see https://pre-commit.ci

---------

Signed-off-by: Florian Scherf <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* tests: requirements: django42: fix broken djangocms-versioning URL

Signed-off-by: Florian Scherf <[email protected]>

---------

Signed-off-by: Florian Scherf <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
fscherf and pre-commit-ci[bot] authored Apr 11, 2024
1 parent 5bae87b commit db0b6c4
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 7 deletions.
13 changes: 12 additions & 1 deletion djangocms_alias/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from cms.utils.permissions import get_model_permission_codename
from cms.utils.urlutils import admin_reverse
from django.contrib import admin
from django.contrib import admin, messages
from django.db.models.functions import Lower
from django.template.loader import render_to_string
from django.utils.translation import gettext_lazy as _
Expand Down Expand Up @@ -168,6 +168,17 @@ def delete_model(self, request, obj):
if not is_versioning_enabled():
emit_content_delete([obj], sender=self.model)

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,
)

def get_list_actions(self):
"""
Collect rendered actions from implemented methods and return as list
Expand Down
5 changes: 0 additions & 5 deletions djangocms_alias/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,11 +305,6 @@ def get_absolute_url(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:
Expand Down
2 changes: 1 addition & 1 deletion tests/requirements/django_42.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ django-sekizai
django-parler

https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms
https://github.com/joshyu/djangocms-versioning/tarball/feat/django-42-compatible#egg=djangocms-versioning
https://github.com/django-cms/djangocms-versioning/tarball/support/django-cms-4.0.x#egg=djangocms-versioning

0 comments on commit db0b6c4

Please sign in to comment.