kopia lustrzana https://github.com/wagtail/wagtail
Move run_hooks helper to a mixin and use it for EditView hooks
rodzic
edb87b1cd9
commit
15afbac957
|
@ -8,6 +8,7 @@ from django.views.generic.list import BaseListView
|
|||
|
||||
from wagtail.admin import messages
|
||||
from wagtail.admin.auth import permission_denied
|
||||
from wagtail.core import hooks
|
||||
|
||||
|
||||
class PermissionCheckedMixin:
|
||||
|
@ -44,6 +45,23 @@ class PermissionCheckedMixin:
|
|||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class HookResponseMixin:
|
||||
"""
|
||||
A mixin for class-based views to support hooks like `before_edit_page`, which are triggered
|
||||
during execution of some operation and can return a response to halt that operation.
|
||||
"""
|
||||
|
||||
def run_hook(self, hook_name, *args, **kwargs):
|
||||
"""
|
||||
Run the named hook, passing args and kwargs to each function registered under that hook name.
|
||||
If any return an HttpResponse, stop processing and return that response
|
||||
"""
|
||||
for fn in hooks.get_hooks(hook_name):
|
||||
result = fn(*args, **kwargs)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
|
||||
|
||||
class IndexView(PermissionCheckedMixin, TemplateResponseMixin, BaseListView):
|
||||
model = None
|
||||
header_icon = ''
|
||||
|
|
|
@ -11,8 +11,8 @@ from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
|
|||
|
||||
from wagtail.admin import messages, signals
|
||||
from wagtail.admin.action_menu import PageActionMenu
|
||||
from wagtail.admin.views.generic import HookResponseMixin
|
||||
from wagtail.admin.views.pages.utils import get_valid_next_url_from_request
|
||||
from wagtail.core import hooks
|
||||
from wagtail.core.models import Page
|
||||
|
||||
|
||||
|
@ -42,19 +42,9 @@ def add_subpage(request, parent_page_id):
|
|||
})
|
||||
|
||||
|
||||
class CreateView(TemplateResponseMixin, ContextMixin, View):
|
||||
class CreateView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
|
||||
template_name = 'wagtailadmin/pages/create.html'
|
||||
|
||||
def run_hook(self, hook_name, *args, **kwargs):
|
||||
"""
|
||||
Run the named hook, passing args and kwargs to each function registered under that hook name.
|
||||
If any return an HttpResponse, stop processing and return that response
|
||||
"""
|
||||
for fn in hooks.get_hooks(hook_name):
|
||||
result = fn(*args, **kwargs)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
|
||||
def dispatch(self, request, content_type_app_name, content_type_model_name, parent_page_id):
|
||||
self.parent_page = get_object_or_404(Page, id=parent_page_id).specific
|
||||
self.parent_page_perms = self.parent_page.permissions_for_user(self.request.user)
|
||||
|
|
|
@ -13,13 +13,13 @@ from django.views.generic.base import ContextMixin, TemplateResponseMixin, View
|
|||
|
||||
from wagtail.admin import messages
|
||||
from wagtail.admin.action_menu import PageActionMenu
|
||||
from wagtail.admin.views.generic import HookResponseMixin
|
||||
from wagtail.admin.views.pages.utils import get_valid_next_url_from_request
|
||||
from wagtail.core import hooks
|
||||
from wagtail.core.exceptions import PageClassNotFoundError
|
||||
from wagtail.core.models import Page, WorkflowState
|
||||
|
||||
|
||||
class EditView(TemplateResponseMixin, ContextMixin, View):
|
||||
class EditView(TemplateResponseMixin, ContextMixin, HookResponseMixin, View):
|
||||
template_name = 'wagtailadmin/pages/edit.html'
|
||||
|
||||
def add_legacy_moderation_warning(self):
|
||||
|
@ -69,10 +69,9 @@ class EditView(TemplateResponseMixin, ContextMixin, View):
|
|||
|
||||
self.next_url = get_valid_next_url_from_request(self.request)
|
||||
|
||||
for fn in hooks.get_hooks('before_edit_page'):
|
||||
result = fn(self.request, self.page)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
response = self.run_hook('before_edit_page', self.request, self.page)
|
||||
if response:
|
||||
return response
|
||||
|
||||
self.edit_handler = self.page_class.get_edit_handler()
|
||||
self.edit_handler = self.edit_handler.bind_to(instance=self.page, request=self.request)
|
||||
|
@ -227,10 +226,9 @@ class EditView(TemplateResponseMixin, ContextMixin, View):
|
|||
# store submitted go_live_at for messaging below
|
||||
go_live_at = self.page.go_live_at
|
||||
|
||||
for fn in hooks.get_hooks('before_publish_page'):
|
||||
result = fn(self.request, self.page)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
response = self.run_hook('before_publish_page', self.request, self.page)
|
||||
if response:
|
||||
return response
|
||||
|
||||
revision.publish(
|
||||
user=self.request.user,
|
||||
|
@ -242,10 +240,9 @@ class EditView(TemplateResponseMixin, ContextMixin, View):
|
|||
# need the up-to-date URL for the "View Live" button.
|
||||
self.page = self.page.specific_class.objects.get(pk=self.page.pk)
|
||||
|
||||
for fn in hooks.get_hooks('after_publish_page'):
|
||||
result = fn(self.request, self.page)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
response = self.run_hook('after_publish_page', self.request, self.page)
|
||||
if response:
|
||||
return response
|
||||
|
||||
# Submit
|
||||
if is_submitting or is_restarting_workflow:
|
||||
|
@ -380,10 +377,9 @@ class EditView(TemplateResponseMixin, ContextMixin, View):
|
|||
|
||||
messages.success(self.request, message)
|
||||
|
||||
for fn in hooks.get_hooks('after_edit_page'):
|
||||
result = fn(self.request, self.page)
|
||||
if hasattr(result, 'status_code'):
|
||||
return result
|
||||
response = self.run_hook('after_edit_page', self.request, self.page)
|
||||
if response:
|
||||
return response
|
||||
|
||||
if is_publishing or is_submitting or is_restarting_workflow or is_performing_workflow_action:
|
||||
# we're done here - redirect back to the explorer
|
||||
|
|
Ładowanie…
Reference in New Issue