From 255a1e8641e083f27e5d2686b1329b1f97e3cbb7 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 7 Apr 2021 09:19:46 +0100 Subject: [PATCH] Include submitter in workflow submitted email notification (#6976) --- CHANGELOG.txt | 1 + docs/releases/2.13.rst | 1 + wagtail/admin/mail.py | 5 +++++ .../workflow_state_submitted.html | 8 +++++-- .../workflow_state_submitted.txt | 7 ++++--- wagtail/admin/tests/test_workflows.py | 21 +++++++++++++++++++ 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index b9598d4dd2..122029758e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -16,6 +16,7 @@ Changelog * Add support to SVG icons for ``SearchArea`` subclasses in ``register_admin_search_area`` (Thibaud Colas) * Add `wagtail.reorder` page audit log action (Storm Heg) * `get_settings` template tag now supports specifying the variable name with `{% get_settings as var %}` (Samir Shah) + * Reinstate submitter's name on moderation notification email (Matt Westcott) * Fix: StreamField required status is now consistently handled by the `blank` keyword argument (Matt Westcott) * Fix: Show 'required' asterisks for blocks inside required StreamFields (Matt Westcott) * Fix: Make image chooser "Select format" fields translatable (Helen Chapman, Thibaud Colas) diff --git a/docs/releases/2.13.rst b/docs/releases/2.13.rst index 4e6d33ff54..77496001e7 100644 --- a/docs/releases/2.13.rst +++ b/docs/releases/2.13.rst @@ -33,6 +33,7 @@ Other features * Add support to SVG icons for ``SearchArea`` subclasses in ``register_admin_search_area`` (Thibaud Colas) * Add specialized ``wagtail.reorder`` page audit log action. This was previously covered by the ``wagtail.move`` action (Storm Heg) * ``get_settings`` template tag now supports specifying the variable name with ``{% get_settings as var %}`` (Samir Shah) +* Reinstate submitter's name on moderation notification email (Matt Westcott) Bug fixes ~~~~~~~~~ diff --git a/wagtail/admin/mail.py b/wagtail/admin/mail.py index 308853e766..102b236afe 100644 --- a/wagtail/admin/mail.py +++ b/wagtail/admin/mail.py @@ -331,6 +331,11 @@ class WorkflowStateSubmissionEmailNotifier(BaseWorkflowStateEmailNotifier): return recipients + def get_context(self, workflow_state, **kwargs): + context = super().get_context(workflow_state, **kwargs) + context['requested_by'] = workflow_state.requested_by + return context + class BaseGroupApprovalTaskStateEmailNotifier(EmailNotificationMixin, Notifier): """A base notifier to send email updates for GroupApprovalTask events""" diff --git a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.html b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.html index 65e291836e..20dea3ae54 100644 --- a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.html +++ b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.html @@ -1,9 +1,13 @@ {% extends 'wagtailadmin/notifications/base.html' %} -{% load i18n %} +{% load wagtailadmin_tags i18n %} {% block content %} -

{% blocktrans with workflow=workflow.name title=page.get_admin_display_title %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}".{% endblocktrans %}

+ {% if requested_by %} +

{% blocktrans with workflow=workflow.name title=page.get_admin_display_title requester=requested_by|user_display_name %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}" by {{ requester }}.{% endblocktrans %}

+ {% else %} +

{% blocktrans with workflow=workflow.name title=page.get_admin_display_title %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}".{% endblocktrans %}

+ {% endif %}

{% trans "You can edit the page here:" %} {{ settings.BASE_URL }}{% url 'wagtailadmin_pages:edit' page.id %} diff --git a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.txt b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.txt index 2e376970a7..2d0a56f61c 100644 --- a/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.txt +++ b/wagtail/admin/templates/wagtailadmin/notifications/workflow_state_submitted.txt @@ -1,10 +1,11 @@ {% extends 'wagtailadmin/notifications/base.txt' %} -{% load i18n %} +{% load wagtailadmin_tags i18n %} {% block content %} -{% blocktrans with workflow=workflow.name|safe title=page.get_admin_display_title|safe %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}".{% endblocktrans %} - +{% if requested_by %}{% blocktrans with workflow=workflow.name|safe title=page.get_admin_display_title|safe requester=requested_by|user_display_name|safe %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}" by {{ requester }}.{% endblocktrans %} +{% else %}{% blocktrans with workflow=workflow.name|safe title=page.get_admin_display_title|safe %}The page "{{ title }}" has been submitted for moderation to workflow "{{ workflow }}".{% endblocktrans %} +{% endif %} {% trans "You can edit the page here:" %} {{ settings.BASE_URL }}{% url 'wagtailadmin_pages:edit' page.id %} diff --git a/wagtail/admin/tests/test_workflows.py b/wagtail/admin/tests/test_workflows.py index 3e132badaa..523c201d2e 100644 --- a/wagtail/admin/tests/test_workflows.py +++ b/wagtail/admin/tests/test_workflows.py @@ -748,6 +748,27 @@ class TestSubmitToWorkflow(TestCase, WagtailTestUtils): self.assertRegex(response.content.decode('utf-8'), r'Awaiting[\s|\n]+{}'.format(self.page.current_workflow_task.name)) self.assertNotContains(response, 'Draft') + def test_submit_sends_mail(self): + self.submit() + # 3 emails sent: + # - to moderator - submitted for approval in moderation stage test_task_1 + # - to superuser - submitted for approval in moderation stage test_task_1 + # - to superuser - submitted to workflow test_workflow + self.assertEqual(len(mail.outbox), 3) + + # the 'submitted to workflow' email should include the submitter's name + workflow_message = None + for msg in mail.outbox: + if msg.subject == 'The page "Hello world! (simple page)" has been submitted to workflow "test_workflow"': + workflow_message = msg + break + + self.assertTrue(workflow_message) + self.assertIn( + 'The page "Hello world! (simple page)" has been submitted for moderation to workflow "test_workflow" by submitter', + workflow_message.body + ) + @mock.patch.object(EmailMultiAlternatives, 'send', side_effect=IOError('Server down')) def test_email_send_error(self, mock_fn): logging.disable(logging.CRITICAL)