fix: added keyword substitution support in edx_ace based bulk course email

fix: pylint quality violation

fix: added positive assert and docs link

fix: mark string for i18n according to best practices
This commit is contained in:
zia.fazal@arbisoft.com
2022-09-27 18:31:25 +05:00
parent 19ee9f0354
commit a37996395b
6 changed files with 50 additions and 4 deletions

View File

@@ -8,6 +8,7 @@ from django.core.mail import EmailMultiAlternatives
from edx_ace import ace
from edx_ace.recipient import Recipient
from common.djangoapps.util.keyword_substitution import substitute_keywords_with_data
from lms.djangoapps.bulk_email.message_types import BulkEmail
from openedx.core.lib.celery.task_utils import emulate_http_request
@@ -69,6 +70,14 @@ class ACEEmail(CourseEmailMessage):
"""
self.site = site
self.user = User.objects.get(email=email_context['email'])
text_message = email_context['course_email'].text_message
html_message = email_context['course_email'].html_message
formatted_text_message = substitute_keywords_with_data(text_message, email_context)
formatted_html_message = substitute_keywords_with_data(html_message, email_context)
email_context.update({
'formatted_text_message': formatted_text_message,
'formatted_html_message': formatted_html_message,
})
message = BulkEmail(context=email_context).personalize(
recipient=Recipient(email_context['user_id'], email_context['email']),
language=email_context['course_language'],

View File

@@ -229,6 +229,33 @@ class AceEmailTestCase(SendEmailWithMockedUgettextMixin, EmailSendFromDashboardT
response = self.client.post(self.send_mail_url, test_email)
self.assertEqual(email_sent_with_ace, mock_ace_email_send.called)
def test_keyword_substitution_in_message_body(self):
"""
Make sure keywords like `%%USER_FULLNAME%%`, `%%COURSE_DISPLAY_NAME%%` are substituted in message body
"""
test_email = {
'action': 'Send email',
'send_to': '["staff"]',
'subject': 'test subject for staff',
'message': 'Hi %%USER_FULLNAME%%, Welcome to %%COURSE_DISPLAY_NAME%% course'
}
self.client.post(self.send_mail_url, test_email)
text_message_body = mail.outbox[0].body
html_message_body = ''
for content, mimetype in mail.outbox[0].alternatives:
if mimetype == 'text/html':
html_message_body = content
break
self.assertNotIn('%%USER_FULLNAME%%', text_message_body)
self.assertNotIn('%%COURSE_DISPLAY_NAME%%', text_message_body)
self.assertNotIn('%%USER_FULLNAME%%', html_message_body)
self.assertNotIn('%%COURSE_DISPLAY_NAME%%', html_message_body)
self.assertIn(f'Hi {self.instructor.get_full_name()}', text_message_body)
self.assertIn(f'Welcome to {self.course.display_name}', text_message_body)
self.assertIn(f'Hi {self.instructor.get_full_name()}', html_message_body)
self.assertIn(f'Welcome to {self.course.display_name}', html_message_body)
@patch.dict(settings.FEATURES, {'ENABLE_INSTRUCTOR_EMAIL': True, 'REQUIRE_COURSE_EMAIL_AUTH': False})
@ddt.ddt

View File

@@ -5144,6 +5144,7 @@ TEAMS_HELP_URL = "https://edx.readthedocs.io/projects/open-edx-building-and-runn
TEXTBOOKS_HELP_URL = "https://edx.readthedocs.io/projects/open-edx-building-and-running-a-course/en/latest/course_assets/textbooks.html"
WIKI_HELP_URL = "https://edx.readthedocs.io/projects/open-edx-building-and-running-a-course/en/latest/course_assets/course_wiki.html"
CUSTOM_PAGES_HELP_URL = "https://edx.readthedocs.io/projects/open-edx-building-and-running-a-course/en/latest/course_assets/pages.html#adding-custom-pages"
COURSE_BULK_EMAIL_HELP_URL = "https://edx.readthedocs.io/projects/open-edx-building-and-running-a-course/en/latest/manage_live_course/bulk_email.html"
################# Bulk Course Email Settings #################
# If set, recipients of bulk course email messages will be filtered based on the last_login date of their User account.

View File

@@ -8,7 +8,7 @@
<td>
<p style="color: rgba(0,0,0,.75);">
{% autoescape off %}
{{ course_email.html_message }}
{{ formatted_html_message }}
{% endautoescape %}
<br/>
</p>

View File

@@ -1,6 +1,6 @@
{% load i18n %}
{% autoescape off %}
{{ course_email.text_message }}
{{ formatted_text_message }}
{% endautoescape %}

View File

@@ -1,7 +1,7 @@
<%page args="section_data" expression_filter="h"/>
<%!
from django.utils.translation import ugettext as _
from openedx.core.djangolib.markup import HTML
from openedx.core.djangolib.markup import HTML, Text
%>
@@ -91,7 +91,16 @@ from openedx.core.djangolib.markup import HTML
</li>
</ul>
<div class="submit-email-action">
<p class="copy">${_("We recommend sending learners no more than one email message per week. Before you send your email, review the text carefully and send it to yourself first, so that you can preview the formatting and make sure embedded images and links work correctly.")}</p>
<p class="copy">
${_("We recommend sending learners no more than one email message per week. Before you send your email, review the text carefully and send it to yourself first, so that you can preview the formatting and make sure embedded images and links work correctly.")}
${Text(
_("You can include keywords in your messages. For list of available keywords see the {start_link}documentation{end_link}."
)).format(
start_link=HTML('<a href="{}">').format(settings.COURSE_BULK_EMAIL_HELP_URL),
end_link=HTML('</a>')
)
}
</p>
</div>
<div class="submit-email-warning">
<p class="copy"><span style="color: red;"><b>${_("CAUTION!")}</b></span>