Skip to content

Commit ea8d572

Browse files
authored
fix: Improve placeholder retrieval and admin representation for alias models, fix deletion signal emission, and clean up alias tag behavior. (#292)
* fix: Migration 0005 used manager not available in migration * fix: get_or_create * fix: Avoid creating content type * fix: default_slot_name access * feat: Add static marker in alias change list * Update djangocms_alias/admin.py * fix: Remove debug code * Only create alias content if user is authenticated * fix: Show unkown for static alias usage * Add annotations for py39
1 parent 3a061ab commit ea8d572

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

djangocms_alias/admin.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import annotations
2+
13
from cms.admin.utils import GrouperModelAdmin
24
from cms.utils.permissions import get_model_permission_codename
35
from cms.utils.urlutils import admin_reverse
@@ -35,13 +37,12 @@
3537
"AliasContentAdmin",
3638
]
3739

38-
alias_admin_list_display = ["content__name", "category", "used", "admin_list_actions"]
40+
alias_admin_list_display = ["content__name", "category", "static", "used", "admin_list_actions"]
3941
djangocms_versioning_enabled = AliasCMSConfig.djangocms_versioning_enabled
4042

4143
if djangocms_versioning_enabled:
4244
alias_admin_list_display.insert(-1, "get_author")
4345
alias_admin_list_display.insert(-1, "get_modified_date")
44-
alias_admin_list_display.insert(-1, "state_indicator")
4546

4647

4748
@admin.register(Category)
@@ -87,9 +88,15 @@ def get_queryset(self, request):
8788
return qs.annotate(cmsplugins_count=models.Count("cms_plugins"))
8889

8990
@admin.display(description=_("Used"), boolean=True, ordering="cmsplugins_count")
90-
def used(self, obj: Alias) -> bool:
91+
def used(self, obj: Alias) -> bool | None:
92+
if obj.static_code and obj.cmsplugins_count == 0:
93+
return None
9194
return obj.cmsplugins_count > 0
9295

96+
@admin.display(description=_("Static"), boolean=True)
97+
def static(self, obj: Alias) -> bool:
98+
return bool(obj.static_code)
99+
93100
def has_delete_permission(self, request: HttpRequest, obj: Alias = None) -> bool:
94101
# Alias can be deleted by users who can add aliases,
95102
# if that alias is not referenced anywhere.
@@ -125,13 +132,14 @@ def get_deleted_objects(self, objs, request: HttpRequest) -> tuple:
125132
return deleted_objects, model_count, perms_needed, protected
126133

127134
def delete_model(self, request: HttpRequest, obj: Alias):
135+
pk = obj.pk
128136
super().delete_model(request, obj)
129137

130138
# Only emit content changes if Versioning is not installed because
131139
# Versioning emits it' own signals for changes
132140
if not is_versioning_enabled():
133141
emit_content_delete(
134-
AliasContent.admin_manager.filter(alias=obj),
142+
AliasContent.admin_manager.filter(alias_id=pk),
135143
sender=self.model,
136144
)
137145

djangocms_alias/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def get_content(self, language=None, show_draft_content=False):
187187

188188
def get_placeholder(self, language=None, show_draft_content=False):
189189
content = self.get_content(language=language, show_draft_content=show_draft_content)
190-
return getattr(content, "placeholder", None)
190+
return content.placeholder if content else None
191191

192192
def get_plugins(self, language=None, show_draft_content=False):
193193
if not language:

djangocms_alias/templatetags/djangocms_alias_tags.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,10 @@ def _get_alias(self, request, static_code, extra_bits):
117117

118118
alias = Alias.objects.create(category=default_category, **alias_creation_kwargs)
119119

120-
if not alias.get_content(language=self.language, show_draft_content=self.get_draft_content):
121-
# If versioning is enabled we can only create the records with a logged-in user / staff member
122-
if not self.get_draft_content:
123-
return None
124-
120+
if (
121+
not alias.get_content(language=self.language, show_draft_content=self.get_draft_content)
122+
and request.user.is_authenticated
123+
):
125124
alias_content = AliasContent.objects.with_user(request.user).create(
126125
alias=alias,
127126
name=static_code,

tests/test_models.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,19 @@ def test_category_name_unique_for_language(self):
439439
Category.objects.create(name="Samename B")
440440
c = Category(name="Samename B")
441441
self.assertRaises(ValidationError, c.validate_unique)
442+
443+
def test_get_placeholder(self):
444+
alias = AliasModel.objects.create(
445+
category=self.category,
446+
static_code="static-code",
447+
site=None,
448+
)
449+
AliasContent.objects.with_user(self.superuser).create(
450+
alias=alias,
451+
name="Static code alias",
452+
language=self.language,
453+
)
454+
placeholder = alias.get_placeholder(self.language, show_draft_content=True)
455+
456+
self.assertIsNotNone(placeholder)
457+
self.assertEqual(placeholder.slot, "static-code")

0 commit comments

Comments
 (0)