diff --git a/djangocms_versioning/admin.py b/djangocms_versioning/admin.py index 00cc68e2..41d5e2c6 100644 --- a/djangocms_versioning/admin.py +++ b/djangocms_versioning/admin.py @@ -47,8 +47,10 @@ content_is_unlocked_for_user, create_version_lock, get_admin_url, + get_current_site, get_editable_url, get_latest_admin_viewable_content, + get_object_live_url, get_preview_url, proxy_model, remove_version_lock, @@ -1097,9 +1099,9 @@ def publish_view(self, request, object_id): self.message_user(request, _("Version published")) # Redirect to published? - if conf.ON_PUBLISH_REDIRECT == "published": + if not requested_redirect and conf.ON_PUBLISH_REDIRECT == "published": if hasattr(version.content, "get_absolute_url"): - requested_redirect = requested_redirect or version.content.get_absolute_url() + requested_redirect = get_object_live_url(version.content, site=get_current_site(request)) return self._internal_redirect(requested_redirect, redirect_url) diff --git a/djangocms_versioning/cms_toolbars.py b/djangocms_versioning/cms_toolbars.py index 30ff203f..2fbb6e3c 100644 --- a/djangocms_versioning/cms_toolbars.py +++ b/djangocms_versioning/cms_toolbars.py @@ -32,7 +32,9 @@ from djangocms_versioning.conf import ALLOW_DELETING_VERSIONS, LOCK_VERSIONS from djangocms_versioning.constants import DRAFT from djangocms_versioning.helpers import ( + get_current_site, get_latest_admin_viewable_content, + get_object_live_url, version_list_url, ) from djangocms_versioning.models import Version @@ -250,7 +252,9 @@ def _add_view_published_button(self): if not published_version: return - url = published_version.get_absolute_url() if hasattr(published_version, "get_absolute_url") else None + url = None + if hasattr(published_version, "get_absolute_url"): + url = get_object_live_url(published_version, site=get_current_site(self.toolbar.request)) if url and (self.toolbar.edit_mode_active or self.toolbar.preview_mode_active): item = ButtonList(side=self.toolbar.RIGHT) item.add_button( diff --git a/djangocms_versioning/helpers.py b/djangocms_versioning/helpers.py index bad4e108..beb70d7a 100644 --- a/djangocms_versioning/helpers.py +++ b/djangocms_versioning/helpers.py @@ -18,7 +18,7 @@ from django.http import HttpRequest from django.template.loader import render_to_string from django.utils.encoding import force_str -from django.utils.translation import get_language +from django.utils.translation import get_language, override as force_language from . import versionables from .conf import EMAIL_NOTIFICATIONS_FAIL_SILENTLY @@ -29,6 +29,21 @@ except ImportError: emit_content_change = None +try: + # django CMS >= 5.1 + from cms.toolbar.utils import get_object_live_url # noqa F401 + from cms.utils import get_current_site # noqa F401 +except ImportError: + # cms < 5.1 + def get_object_live_url(obj, language=None, site=None) -> str: + with force_language(language): + return obj.get_absolute_url() + + def get_current_site(request) -> models.Model: + from django.contrib.sites.models import Site + + return Site.objects.get_current() + def is_editable(content_obj: models.Model, request: HttpRequest) -> bool: """Check of content_obj is editable""" @@ -72,9 +87,7 @@ def _replace_admin_for_model(modeladmin: type[admin.ModelAdmin], mixin: type, ad admin_site.register(modeladmin.model, new_admin_class) -def replace_admin_for_models( - pairs: Iterable[tuple[type[models.Model], type]], admin_site: admin.AdminSite | None = None -): +def replace_admin_for_models(pairs: tuple[type[models.Model], type], admin_site: admin.AdminSite | None = None): """ :param pairs: Iterable of (model class, admin mixin class) tuples :param admin_site: AdminSite instance diff --git a/djangocms_versioning/templates/admin/djangocms_versioning/page/change_form.html b/djangocms_versioning/templates/admin/djangocms_versioning/page/change_form.html index e26d9746..b8310f3e 100644 --- a/djangocms_versioning/templates/admin/djangocms_versioning/page/change_form.html +++ b/djangocms_versioning/templates/admin/djangocms_versioning/page/change_form.html @@ -34,7 +34,7 @@ -
+ {% csrf_token %} {% block form_top %}{% endblock %}