Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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
6 changes: 4 additions & 2 deletions djangocms_versioning/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)

Expand Down
6 changes: 5 additions & 1 deletion djangocms_versioning/cms_toolbars.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -259,7 +261,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(
Expand Down
20 changes: 16 additions & 4 deletions djangocms_versioning/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -29,6 +29,20 @@
except ImportError:
emit_content_change = None

try:
from cms.toolbar.utils import get_object_live_url
from cms.utils import get_current_site
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()
return None

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"""
Expand Down Expand Up @@ -72,9 +86,7 @@
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@



<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="?language={{ language }}{% if request.GET.parent_page %}&amp;parent_page={{ request.GET.parent_page }}{% endif %}{# parameter `parent_node` only for django CMS 4.1 support #}{% if request.GET.parent_node %}&amp;parent_node={{ request.GET.parent_node }}{% endif %}{%if request.GET.source %}&amp;source={{ request.GET.source }}{% endif %}" method="post" id="{{ opts.model_name }}_form">
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="?language={{ language }}{% if request.GET.site %}&amp;site={{ request.GET.site }}{% endif %}{% if request.GET.parent_page %}&amp;parent_page={{ request.GET.parent_page }}{% endif %}{# parameter `parent_node` only for django CMS 4.1 support #}{% if request.GET.parent_node %}&amp;parent_node={{ request.GET.parent_node }}{% endif %}{%if request.GET.source %}&amp;source={{ request.GET.source }}{% endif %}" method="post" id="{{ opts.model_name }}_form">
{% csrf_token %}
{% block form_top %}{% endblock %}

Expand Down
Loading