diff --git a/wagtail/admin/views/pages/__init__.py b/wagtail/admin/views/pages/__init__.py index ec6ae735ae..529f6b2405 100644 --- a/wagtail/admin/views/pages/__init__.py +++ b/wagtail/admin/views/pages/__init__.py @@ -21,7 +21,6 @@ from wagtail.admin import messages from wagtail.admin.action_menu import PageActionMenu from wagtail.admin.auth import user_has_any_page_permission, user_passes_test from wagtail.admin.filters import PageHistoryReportFilterSet -from wagtail.admin.mail import send_notification from wagtail.admin.modal_workflow import render_modal_workflow from wagtail.admin.views.pages.utils import get_valid_next_url_from_request from wagtail.admin.views.reports import ReportView @@ -34,6 +33,7 @@ from wagtail.admin.views.pages.create import * # noqa from wagtail.admin.views.pages.edit import * # noqa from wagtail.admin.views.pages.listing import * # noqa from wagtail.admin.views.pages.lock import * # noqa +from wagtail.admin.views.pages.moderation import * # noqa from wagtail.admin.views.pages.move import * # noqa from wagtail.admin.views.pages.preview import * # noqa from wagtail.admin.views.pages.search import * # noqa @@ -183,53 +183,6 @@ def set_page_position(request, page_to_move_id): return HttpResponse('') -def approve_moderation(request, revision_id): - revision = get_object_or_404(PageRevision, id=revision_id) - if not revision.page.permissions_for_user(request.user).can_publish(): - raise PermissionDenied - - if not revision.submitted_for_moderation: - messages.error(request, _("The page '{0}' is not currently awaiting moderation.").format(revision.page.get_admin_display_title())) - return redirect('wagtailadmin_home') - - if request.method == 'POST': - revision.approve_moderation(user=request.user) - - message = _("Page '{0}' published.").format(revision.page.get_admin_display_title()) - buttons = [] - if revision.page.url is not None: - buttons.append(messages.button(revision.page.url, _('View live'), new_window=True)) - buttons.append(messages.button(reverse('wagtailadmin_pages:edit', args=(revision.page.id,)), _('Edit'))) - messages.success(request, message, buttons=buttons) - - if not send_notification(revision.id, 'approved', request.user.pk): - messages.error(request, _("Failed to send approval notifications")) - - return redirect('wagtailadmin_home') - - -def reject_moderation(request, revision_id): - revision = get_object_or_404(PageRevision, id=revision_id) - if not revision.page.permissions_for_user(request.user).can_publish(): - raise PermissionDenied - - if not revision.submitted_for_moderation: - messages.error(request, _("The page '{0}' is not currently awaiting moderation.").format(revision.page.get_admin_display_title())) - return redirect('wagtailadmin_home') - - if request.method == 'POST': - revision.reject_moderation(user=request.user) - - messages.success(request, _("Page '{0}' rejected for publication.").format(revision.page.get_admin_display_title()), buttons=[ - messages.button(reverse('wagtailadmin_pages:edit', args=(revision.page.id,)), _('Edit')) - ]) - - if not send_notification(revision.id, 'rejected', request.user.pk): - messages.error(request, _("Failed to send rejection notifications")) - - return redirect('wagtailadmin_home') - - class BaseWorkflowFormView(View): """ Shared functionality for views that need to render the modal form to collect extra details diff --git a/wagtail/admin/views/pages/moderation.py b/wagtail/admin/views/pages/moderation.py new file mode 100644 index 0000000000..e81d829211 --- /dev/null +++ b/wagtail/admin/views/pages/moderation.py @@ -0,0 +1,55 @@ +from django.core.exceptions import PermissionDenied +from django.shortcuts import get_object_or_404, redirect +from django.urls import reverse +from django.utils.translation import gettext as _ + +from wagtail.admin import messages +from wagtail.admin.mail import send_notification +from wagtail.core.models import PageRevision + + +def approve_moderation(request, revision_id): + revision = get_object_or_404(PageRevision, id=revision_id) + if not revision.page.permissions_for_user(request.user).can_publish(): + raise PermissionDenied + + if not revision.submitted_for_moderation: + messages.error(request, _("The page '{0}' is not currently awaiting moderation.").format(revision.page.get_admin_display_title())) + return redirect('wagtailadmin_home') + + if request.method == 'POST': + revision.approve_moderation(user=request.user) + + message = _("Page '{0}' published.").format(revision.page.get_admin_display_title()) + buttons = [] + if revision.page.url is not None: + buttons.append(messages.button(revision.page.url, _('View live'), new_window=True)) + buttons.append(messages.button(reverse('wagtailadmin_pages:edit', args=(revision.page.id,)), _('Edit'))) + messages.success(request, message, buttons=buttons) + + if not send_notification(revision.id, 'approved', request.user.pk): + messages.error(request, _("Failed to send approval notifications")) + + return redirect('wagtailadmin_home') + + +def reject_moderation(request, revision_id): + revision = get_object_or_404(PageRevision, id=revision_id) + if not revision.page.permissions_for_user(request.user).can_publish(): + raise PermissionDenied + + if not revision.submitted_for_moderation: + messages.error(request, _("The page '{0}' is not currently awaiting moderation.").format(revision.page.get_admin_display_title())) + return redirect('wagtailadmin_home') + + if request.method == 'POST': + revision.reject_moderation(user=request.user) + + messages.success(request, _("Page '{0}' rejected for publication.").format(revision.page.get_admin_display_title()), buttons=[ + messages.button(reverse('wagtailadmin_pages:edit', args=(revision.page.id,)), _('Edit')) + ]) + + if not send_notification(revision.id, 'rejected', request.user.pk): + messages.error(request, _("Failed to send rejection notifications")) + + return redirect('wagtailadmin_home')