Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 29 additions & 24 deletions djangocms_alias/cms_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,47 +7,52 @@
from .cms_wizards import create_alias_wizard
from .models import AliasContent, AliasPlugin, copy_alias_content
from .rendering import add_static_alias_js, render_alias_content
from .utils import get_versionable_item

try:
apps.get_app_config("djangocms_internalsearch")
from .internal_search import AliasContentConfig
except (ImportError, LookupError):
AliasContentConfig = None

djangocms_versioning_installed = apps.is_installed("djangocms_versioning")


class AliasCMSConfig(CMSAppConfig):
cms_enabled = True
cms_toolbar_enabled_models = [(AliasContent, render_alias_content, "alias")]
moderated_models = [AliasContent]
cms_wizards = [create_alias_wizard]

djangocms_moderation_enabled = getattr(settings, "MODERATING_ALIAS_MODELS_ENABLED", True)
djangocms_versioning_enabled = getattr(settings, "VERSIONING_ALIAS_MODELS_ENABLED", djangocms_versioning_installed)
def __init__(self, app_config):
VersionableItem = get_versionable_item(self)
self.djangocms_moderation_enabled = getattr(settings, "MODERATING_ALIAS_MODELS_ENABLED", True)
self.djangocms_versioning_enabled = getattr(
settings, "VERSIONING_ALIAS_MODELS_ENABLED", VersionableItem is not None
)

if djangocms_versioning_enabled:
from cms.utils.i18n import get_language_tuple
from djangocms_versioning import __version__ as djangocms_versioning_version
from djangocms_versioning.datastructures import VersionableItem
if self.djangocms_versioning_enabled:
from cms.utils.i18n import get_language_tuple

if PackageVersion(djangocms_versioning_version) < PackageVersion("2.4"): # pragma: no cover
raise ImportError(
"djangocms_versioning >= 2.4.0 is required for djangocms_alias to work properly."
" Please upgrade djangocms_versioning."
)
if not VersionableItem:
from djangocms_versioning import __version__ as djangocms_versioning_version
from djangocms_versioning.datastructures import VersionableItem

versioning = [
VersionableItem(
content_model=AliasContent,
grouper_field_name="alias",
extra_grouping_fields=["language"],
version_list_filter_lookups={"language": get_language_tuple},
copy_function=copy_alias_content,
grouper_selector_option_label=lambda obj, lang: obj.get_name(lang),
grouper_admin_mixin="__default__",
),
]
if PackageVersion(djangocms_versioning_version) < PackageVersion("2.4"): # pragma: no cover
raise ImportError(
"djangocms_versioning >= 2.4.0 is required for djangocms_alias to work properly."
" Please upgrade djangocms_versioning."
)

self.versioning = [
VersionableItem(
content_model=AliasContent,
grouper_field_name="alias",
extra_grouping_fields=["language"],
version_list_filter_lookups={"language": get_language_tuple},
copy_function=copy_alias_content,
grouper_selector_option_label=lambda obj, lang: obj.get_name(lang),
grouper_admin_mixin="__default__",
),
]

djangocms_references_enabled = getattr(settings, "REFERENCES_ALIAS_MODELS_ENABLED", True)
reference_fields = [
Expand Down
3 changes: 0 additions & 3 deletions djangocms_alias/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,13 @@
from django.utils.translation import get_language
from django.utils.translation import gettext_lazy as _

from .cms_config import AliasCMSConfig
from .constants import (
CATEGORY_FILTER_PARAM,
SITE_FILTER_NO_SITE_VALUE,
SITE_FILTER_URL_PARAM,
)
from .models import Category

djangocms_versioning_enabled = AliasCMSConfig.djangocms_versioning_enabled


class SiteFilter(admin.SimpleListFilter):
title = _("Site")
Expand Down
Binary file added djangocms_alias/locale/fr/LC_MESSAGES/django.mo
Binary file not shown.
15 changes: 8 additions & 7 deletions djangocms_alias/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
from parler.models import TranslatableModel, TranslatedFields

from .constants import CHANGE_ALIAS_URL_NAME, CHANGE_CATEGORY_URL_NAME
from .utils import is_versioning_enabled

__all__ = [
"Category",
Expand Down Expand Up @@ -158,15 +157,18 @@

def get_name(self, language=None):
content = self.get_content(language, show_draft_content=True)
if not content:
content = next(iter(self._content_cache.values()), None)
name = getattr(content, "name", f"Alias {self.pk} (No content)")
if is_versioning_enabled() and content:
try:
from djangocms_versioning.constants import DRAFT

version = content.versions.first()

if version.state == DRAFT:
return f"{name} (Not published)"

except (ImportError, ModuleNotFoundError, AttributeError):
pass
return name

def get_content(self, language=None, show_draft_content=False):
Expand All @@ -180,10 +182,9 @@
qs = self.contents(manager="admin_manager").latest_content()
else:
qs = self.contents.all()
qs = qs.filter(language=language)

self._content_cache[language] = qs.first()
return self._content_cache[language]
for content in qs:
self._content_cache.setdefault(content.language, content)
return self._content_cache.get(language)

def get_placeholder(self, language=None, show_draft_content=False):
content = self.get_content(language=language, show_draft_content=show_draft_content)
Expand Down
24 changes: 18 additions & 6 deletions djangocms_alias/utils.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
from functools import cache

from django.apps import apps


def is_versioning_enabled():
@cache
def get_versionable_item(cms_config) -> type | None:
if hasattr(cms_config, "get_contract"):
return cms_config.get_contract("djangocms_versioning")
return None


@cache
def is_versioning_enabled() -> bool:
from .models import AliasContent

try:
app_config = apps.get_app_config("djangocms_versioning")
return app_config.cms_extension.is_content_model_versioned(AliasContent)
except LookupError:
return False
for app_config in apps.get_app_configs():
try:
print(app_config)
return app_config.cms_extension.is_content_model_versioned(AliasContent)
except AttributeError:
continue
return False


def emit_content_change(objs, sender=None):
Expand Down