39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from django.core.exceptions import PermissionDenied
|
|
from django.urls import reverse
|
|
from django.utils.translation import gettext as _
|
|
|
|
from wagtail.admin.views.generic import lock
|
|
from wagtail.models import Page
|
|
|
|
|
|
class PageOperationViewMixin:
|
|
model = Page
|
|
pk_url_kwarg = "page_id"
|
|
|
|
def get_object(self):
|
|
return super().get_object().specific
|
|
|
|
def get_success_url(self):
|
|
if self.next_url:
|
|
return self.next_url
|
|
return reverse("wagtailadmin_explore", args=[self.object.get_parent().id])
|
|
|
|
|
|
class LockView(PageOperationViewMixin, lock.LockView):
|
|
def perform_operation(self):
|
|
if not self.object.permissions_for_user(self.request.user).can_lock():
|
|
raise PermissionDenied
|
|
return super().perform_operation()
|
|
|
|
|
|
class UnlockView(PageOperationViewMixin, lock.UnlockView):
|
|
def perform_operation(self):
|
|
if not self.object.permissions_for_user(self.request.user).can_unlock():
|
|
raise PermissionDenied
|
|
return super().perform_operation()
|
|
|
|
def get_success_message(self):
|
|
return _("Page '%(page_title)s' is now unlocked.") % {
|
|
"page_title": self.object.get_admin_display_title()
|
|
}
|