Fix edx-ace templates

This patch is part of multiple PR's to
protect templates against xss attack

PROD-465
This commit is contained in:
Adeel Khan
2019-07-14 04:13:44 +05:00
parent cb530bf788
commit 7d9be69112
22 changed files with 209 additions and 62 deletions

View File

@@ -380,8 +380,6 @@ class EmailChangeRequestTests(EventTestMixin, EmailTemplateTagMixin, CacheIsolat
),
u'If this is correct, please confirm your new e-mail address by visiting:',
u'http://edx.org/email_confirm/{key}'.format(key=registration_key),
u'If you didn\'t request this, you don\'t need to do anything;',
u'you won\'t receive any more email from us.',
u'Please do not reply to this e-mail; if you require assistance,',
u'check the help section of the édX web site.',
],
@@ -403,7 +401,6 @@ class EmailChangeRequestTests(EventTestMixin, EmailTemplateTagMixin, CacheIsolat
html = message.alternatives[0][0]
assert message.subject == subject
for body in text, html:
for fragment in body_fragments:
assert fragment in body

View File

@@ -124,8 +124,10 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase):
cache.clear()
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', "Test only valid in LMS")
@ddt.data('plain_text', 'html')
def test_reset_password_email(self, body_type):
@ddt.data(('plain_text', "You're receiving this e-mail because you requested a password reset"),
('html', "You're receiving this e-mail because you requested a password reset"))
@ddt.unpack
def test_reset_password_email(self, body_type, expected_output):
"""Tests contents of reset password email, and that user is not active"""
good_req = self.request_factory.post('/password_reset/', {'email': self.user.email})
good_req.user = self.user
@@ -157,7 +159,7 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase):
body = bodies[body_type]
self.assertIn("Password reset", sent_message.subject)
self.assertIn("You're receiving this e-mail because you requested a password reset", body)
self.assertIn(expected_output, body)
self.assertEquals(sent_message.from_email, from_email)
self.assertEquals(len(sent_message.to), 1)
self.assertIn(self.user.email, sent_message.to)

View File

@@ -7,28 +7,34 @@
<tr>
<td>
<h1>
{% trans "Create Password" %}
{% trans "Create Password" as tmsg %}{{ tmsg | force_escape }}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You're receiving this e-mail because you requested to create a password for your user account at {{ platform_name }}.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}We've restored access to your {{ platform_name }} account using the recovery email you provided at registration.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Once you've created a password [below], you will be able to log in to {{ platform_name }} with this email ({{ email }}) and your new password.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% trans "If you didn't request this change, you can disregard this email - we have not yet reset your password." %}
{% trans "If you didn't request this change, you can disregard this email - we have not yet reset your password." as tmsg %}{{ tmsg | force_escape }}
<br />
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Create Password" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=reset_link %}

View File

@@ -7,18 +7,22 @@
<tr>
<td>
<h1>
{% trans "Email Change" %}
{% trans "Email Change" as tmsg %}{{ tmsg | force_escape }}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}We received a request to change the e-mail associated with your {{ platform_name }} account from {{ old_email }} to {{ new_email }}. If this is correct, please confirm your new e-mail address by visiting:{% endblocktrans %}
{% endfilter %}
<br />
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Confirm Email Change" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=confirm_link %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}If you didn't request this, you don't need to do anything; you won't receive any more email from us. Please do not reply to this e-mail; if you require assistance, check the help section of the {{ platform_name }} web site.{% endblocktrans %}
{% endfilter %}
<br />
</p>

View File

@@ -7,17 +7,23 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}Email Change Confirmation for {{ platform_name }}{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This is to confirm that you changed the e-mail associated with {{ platform_name }} from {{ old_email }} to {{ new_email }}. If you did not make this request, please contact us immediately. Contact information is listed at:{% endblocktrans %}
{% endfilter %}
<br />
</p>
<a href="{{ contact_link }}">{{ contact_link }}</a>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}We keep a log of old e-mails, so if this request was unintentional, we can investigate.{% endblocktrans %}
{% endfilter %}
<br />
</p>

View File

@@ -7,29 +7,33 @@
<tr>
<td>
<h1>
{% trans "Password Reset" %}
{% trans "Password Reset" as tmsg %}{{ tmsg | force_escape }}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You're receiving this e-mail because you requested a password reset for your user account at {{ platform_name }}.{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% if failed %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}However, there is currently no user account associated with your email address: {{ email_address }}.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% trans "If you did not request this change, you can ignore this email." %}
{% trans "If you did not request this change, you can ignore this email." as tmsg %}{{ tmsg | force_escape }}
<br />
</p>
{% else %}
<p style="color: rgba(0,0,0,.75);">
{% trans "If you didn't request this change, you can disregard this email - we have not yet reset your password." %}
{% trans "If you didn't request this change, you can disregard this email - we have not yet reset your password." as tmsg %}{{ tmsg | force_escape }}
<br />
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Change my Password" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=reset_link %}

View File

@@ -7,32 +7,44 @@
<tr>
<td>
<h1>
{% blocktrans %}
Welcome to {{ course_name }}
{% endblocktrans %}
{% filter force_escape %}
{% blocktrans %}Welcome to {{ course_name }}{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To get started, please visit https://{{ site_name }}.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}The login information for your account follows:{% endblocktrans %}
{% endfilter %}
<br />
{% filter force_escape %}
{% blocktrans %}email: {{ email_address }}{% endblocktrans %}
{% endfilter %}
<br />
{% filter force_escape %}
{% blocktrans %}password: {{ password }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}It is recommended that you change your password.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Sincerely yours, The {{ course_name }} Team{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,43 +7,60 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}
You have been invited to be a beta tester for {{ course_name }} at {{ site_name }}
{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}The invitation has been sent by a member of the course staff.{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% if auto_enroll %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To start accessing course materials, please visit:{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=display_name|default:course.display_name_with_default course_cta_url=course_url %}
{% elif course_about_url is not None %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To enroll in this course and begin the beta test:{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% filter force_escape %}
{% blocktrans asvar course_cta_text %}Visit {{ course_name }}{% endblocktrans %}
{% endfilter %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=course_about_url %}
{% else %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To enroll in this course and begin the beta test:{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% filter force_escape %}
{% blocktrans asvar course_cta_text %}Visit {{ site_name }}
{% endblocktrans %}
{%endfilter%}
{% blocktrans asvar course_cta_text %}Visit {{ site_name }}{% endblocktrans %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=course_url %}
{% endif %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ email_address }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,25 +7,33 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}You have been invited to {{ course_name }}{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You have been invited to join {{ course_name }} at {{ site_name }} by a member of the course staff.{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% if is_shib_course %}
{% if auto_enroll %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To access this course click on the button below and login:{% endblocktrans %}
{% endfilter %}
<br />
</p>
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_name course_cta_url=course_url %}
{% elif course_about_url is not None %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}To access this course visit it and register:{% endblocktrans %}
{% endfilter %}
<br />
</p>
@@ -33,27 +41,37 @@
{% endif %}
{% else %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Please finish your registration and fill out the registration form making sure to use {{ email_address }} in the Email field:{% endblocktrans %}
{% endfilter %}
<br />
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Finish Your Registration" as button_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=button_cta_text course_cta_url=registration_url %}
<p style="color: rgba(0,0,0,.75);">
{% if auto_enroll %}
{% filter force_escape %}
{% blocktrans %}Once you have registered and activated your account, you will see {{ course_name }} listed on your dashboard.{% endblocktrans %}
{% endfilter %}
{% elif course_about_url is not None %}
{% filter force_escape %}
{% blocktrans %}Once you have registered and activated your account, you will be able to access this course:{% endblocktrans %}
{% endfilter %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_name course_cta_url=course_about_url %}
{% else %}
{% filter force_escape %}
{% blocktrans %}You can then enroll in {{ course_name }}.{% endblocktrans %}
{% endfilter %}
{% endif %}
<br />
</p>
{% endif %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ email_address }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,16 +7,22 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}You have been unenrolled from {{ course_name }}{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You have been unenrolled from the course {{ course_name }} by a member of the course staff. Please disregard the invitation previously sent.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ email_address }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,23 +7,31 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}
You have been unenrolled from {{ course_name }}
{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You have been unenrolled from {{ course_name }} at {{ site_name }} by a member of the course staff. This course will no longer appear on your {{ site_name }} dashboard.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Your other courses have not been affected.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ full_name }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,13 +7,17 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}
You have been enrolled in {{ course_name }}
{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You have been enrolled in {{ course_name }} at {{ site_name }} by a member of the course staff. This course will now appear on your {{ site_name }} dashboard.{% endblocktrans %}
{% endfilter %}
<br />
</p>
@@ -21,7 +25,9 @@
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text course_cta_url=course_url %}
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ full_name }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,26 +7,36 @@
<tr>
<td>
<h1>
{% filter force_escape %}
{% blocktrans %}You have been removed as a beta tester for {{ course_name }} at {{ site_name }}{% endblocktrans %}
{% endfilter %}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}You have been removed as a beta tester for {{ course_name }} at {{ site_name }} by a member of the course staff.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This course will remain on your dashboard, but you will no longer be part of the beta testing group.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Your other courses have not been affected.{% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}This email was automatically sent from {{ site_name }} to {{ email_address }}{% endblocktrans %}
{% endfilter %}
<br />
</p>
</td>

View File

@@ -7,29 +7,39 @@
<tr>
<td>
<h1>
{% trans "Expired ID Verification" %}
{% trans "Expired ID Verification" as tmsg %}{{ tmsg | force_escape }}
</h1>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Hello {{full_name}},{% endblocktrans %}
{% endfilter %}
<br />
{% filter force_escape %}
{% blocktrans %}Your {{platform_name}} ID verification has expired. {% endblocktrans %}
{% endfilter %}
<br />
</p>
<p style="color: rgba(0,0,0,.75);">
{% trans "You must have a valid ID verification to take proctored exams and qualify for certificates."%}
{% trans "Follow the link below to submit your photos and renew your ID verification." %}
{% trans "You can also do this from your dashboard." %}
{% trans "You must have a valid ID verification to take proctored exams and qualify for certificates." as tmsg %}{{ tmsg | force_escape }}
{% trans "Follow the link below to submit your photos and renew your ID verification." as tmsg %}{{ tmsg | force_escape }}
{% trans "You can also do this from your dashboard." as tmsg %}{{ tmsg | force_escape }}
</p>
<p style="color: rgba(0,0,0,.75);">
{% filter force_escape %}
{% blocktrans %}Resubmit Verification : {{lms_verification_link}} {% endblocktrans %}
{% endfilter %}
<br />
{% filter force_escape %}
{% blocktrans %}ID verification FAQ : {{help_center_link}} {% endblocktrans %}
{% endfilter %}
<br />
</p>
<p>
{% trans "Thank you," %}
{% trans "Thank you," as tmsg %}{{ tmsg | force_escape }}
<br />
{% filter force_escape %}
{% blocktrans %}The {{ platform_name }} Team {% endblocktrans %}
{% endfilter %}
</p>
</td>
</tr>

View File

@@ -63,7 +63,7 @@
<td width="70">
<a href="{% with_link_tracking homepage_url %}"><img
src="https://media.sailthru.com/595/1k1/8/o/599f355101b3f.png" width="70"
height="30" alt="{% blocktrans %}Go to {{ platform_name }} Home Page{% endblocktrans %}"/></a>
height="30" alt="{% filter force_escape %}{% blocktrans %}Go to {{ platform_name }} Home Page{% endblocktrans %}{% endfilter %}"/></a>
</td>
<td align="right" style="text-align: {{ LANGUAGE_BIDI|yesno:"left,right" }};">
<a class="login" href="{% with_link_tracking dashboard_url %}" style="color: #005686;">{% trans "Sign In" %}</a>
@@ -97,7 +97,7 @@
<td height="32" width="42">
<a href="{{ social_media_urls.linkedin|safe }}">
<img src="https://media.sailthru.com/595/1k1/8/o/599f354ec70cb.png"
width="32" height="32" alt="{% blocktrans %}{{ platform_name }} on LinkedIn{% endblocktrans %}"/>
width="32" height="32" alt="{% filter force_escape %}{% blocktrans %}{{ platform_name }} on LinkedIn{% endblocktrans %}{% endfilter %}"/>
</a>
</td>
{% endif %}
@@ -105,7 +105,7 @@
<td height="32" width="42">
<a href="{{ social_media_urls.twitter|safe }}">
<img src="https://media.sailthru.com/595/1k1/8/o/599f354d9c26e.png"
width="32" height="32" alt="{% blocktrans %}{{ platform_name }} on Twitter{% endblocktrans %}"/>
width="32" height="32" alt="{% filter force_escape %}{% blocktrans %}{{ platform_name }} on Twitter{% endblocktrans %}{% endfilter %}"/>
</a>
</td>
{% endif %}
@@ -113,7 +113,7 @@
<td height="32" width="42">
<a href="{{ social_media_urls.facebook|safe }}">
<img src="https://media.sailthru.com/595/1k1/8/o/599f355052c8e.png"
width="32" height="32" alt="{% blocktrans %}{{ platform_name }} on Facebook{% endblocktrans %}"/>
width="32" height="32" alt="{% filter force_escape %}{% blocktrans %}{{ platform_name }} on Facebook{% endblocktrans %}{% endfilter %}"/>
</a>
</td>
{% endif %}
@@ -121,7 +121,7 @@
<td height="32" width="42">
<a href="{{ social_media_urls.google_plus|safe }}">
<img src="https://media.sailthru.com/595/1k1/8/o/599f354fc554a.png"
width="32" height="32" alt="{% blocktrans %}{{ platform_name }} on Google Plus{% endblocktrans %}"/>
width="32" height="32" alt="{% filter force_escape %}{% blocktrans %}{{ platform_name }} on Google Plus{% endblocktrans %}{% endfilter %}"/>
</a>
</td>
{% endif %}
@@ -129,7 +129,7 @@
<td height="32" width="42">
<a href="{{ social_media_urls.reddit|safe }}">
<img src="https://media.sailthru.com/595/1k1/8/o/599f354e326b9.png"
width="32" height="32" alt="{% blocktrans %}{{ platform_name }} on Reddit{% endblocktrans %}"/>
width="32" height="32" alt="{% filter force_escape %}{% blocktrans %}{{ platform_name }} on Reddit{% endblocktrans %}{% endfilter %}"/>
</a>
</td>
{% endif %}
@@ -143,14 +143,14 @@
{% if mobile_store_urls.apple %}
<a href="{{ mobile_store_urls.apple|safe }}" style="text-decoration: none">
<img src="https://media.sailthru.com/595/1k1/6/2/5931cfbba391b.png"
alt="{% trans "Download the iOS app on the Apple Store" %}"
alt="{% trans "Download the iOS app on the Apple Store" as tmsg %}{{ tmsg | force_escape }}"
width="136" height="50" style="margin-{{ LANGUAGE_BIDI|yesno:"left,right" }}: 10px"/>
</a>
{% endif %}
{% if mobile_store_urls.google %}
<a href="{{ mobile_store_urls.google|safe }}" style="text-decoration: none">
<img src="https://media.sailthru.com/595/1k1/6/2/5931cf879a033.png"
alt="{% trans "Download the Android app on the Google Play Store" %}"
alt="{% trans "Download the Android app on the Google Play Store" as tmsg %}{{ tmsg | force_escape }}"
width="136" height="50"/>
</a>
{% endif %}
@@ -171,9 +171,9 @@
<tr>
<!-- COPYRIGHT -->
<td>
&copy; {% now "Y" %} {{ platform_name }}, {% trans "All rights reserved" %}.<br/>
&copy; {% now "Y" %} {{ platform_name }}, {% trans "All rights reserved" as tmsg %}{{ tmsg | force_escape }}.<br/>
<br/>
{% trans "Our mailing address is" %}:<br/>
{% trans "Our mailing address is" as tmsg %}{{ tmsg | force_escape }}:<br/>
{{ contact_mailing_address }}
</td>
</tr>

View File

@@ -4,7 +4,7 @@
{% get_current_language as LANGUAGE_CODE %}
<title lang="{{ LANGUAGE_CODE|default:"en" }}">
{% block title %}
{% trans "edX Email" %}
{% trans "edX Email" as tmsg %}{{ tmsg | force_escape }}
{% endblock %}
</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>

View File

@@ -3,10 +3,12 @@
{% if show_upsell %}
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
Don't miss the opportunity to highlight your new knowledge and skills by earning a verified
certificate. Upgrade by {{ user_schedule_upgrade_deadline_time }}.
{% endblocktrans %}
{% endfilter %}
</p>
<p>
<a href="{% with_link_tracking upsell_link %}"
@@ -21,7 +23,7 @@
display: inline-block;
padding: 8px 65px;
">
<font color="#1e8142"><b>{% trans "Upgrade Now" %}</b></font>
<font color="#1e8142"><b>{% trans "Upgrade Now" as tmsg %}{{ tmsg | force_escape }}</b></font>
</a>
</p>
{% endif %}

View File

@@ -1,10 +1,13 @@
{% extends 'ace_common/edx_ace/common/base_body.html' %}
{% load i18n %}
{% load django_markup %}
{% block preview_text %}
{% filter force_escape %}
{% blocktrans trimmed %}
Welcome to week {{ week_num }} of {{ course_name }}!
{% endblocktrans %}
{% endfilter %}
{% endblock %}
{% block content %}
@@ -12,10 +15,11 @@
<tr>
<td>
<p>
{% blocktrans trimmed %}
We hope you're enjoying <strong>{{ course_name }}</strong>!
{% blocktrans trimmed asvar tmsg %}
We hope you're enjoying {start_strong}{{ course_name }}{end_strong}!
We want to let you know what you can look forward to in week {{ week_num }}:
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
<ul>
{% for highlight in week_highlights %}
<li>{{ highlight }}</li>
@@ -23,13 +27,15 @@
</ul>
</p>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
With self-paced courses, you learn on your own schedule.
We encourage you to spend time with the course each week.
Your focused attention will pay off in the end!
{% endblocktrans %}
{% endfilter %}
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Resume your course now" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text%}

View File

@@ -1,17 +1,22 @@
{% extends 'ace_common/edx_ace/common/base_body.html' %}
{% load i18n %}
{% load django_markup %}
{% block preview_text %}
{% if course_ids|length > 1 %}
{% filter force_escape %}
{% blocktrans trimmed %}
Many {{ platform_name }} learners are completing more problems every week, and
participating in the discussion forums. What do you want to do to keep learning?
{% endblocktrans %}
{% endfilter %}
{% else %}
{% filter force_escape %}
{% blocktrans trimmed %}
Many {{ platform_name }} learners in {{course_name}} are completing more problems every week, and
participating in the discussion forums. What do you want to do to keep learning?
{% endblocktrans %}
{% endfilter %}
{% endif %}
{% endblock %}
@@ -19,22 +24,25 @@
<table width="100%" align="left" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<h1>{% trans "Keep up the momentum!" %}</h1>
<h1>{% trans "Keep up the momentum!" as tmsg %}{{ tmsg | force_escape }}</h1>
<p>
{% if course_ids|length > 1 %}
{% filter force_escape %}
{% blocktrans trimmed %}
Many {{ platform_name }} learners are completing more problems every week, and
participating in the discussion forums. What do you want to do to keep learning?
{% endblocktrans %}
{% endfilter %}
{% else %}
{% blocktrans trimmed %}
Many {{ platform_name }} learners in <strong>{{course_name}}</strong> are completing more problems every week, and
{% blocktrans trimmed asvar tmsg %}
Many {{ platform_name }} learners in {start_strong}{{course_name}}{end_strong} are completing more problems every week, and
participating in the discussion forums. What do you want to do to keep learning?
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
{% endif %}
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Keep learning" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text%}

View File

@@ -1,17 +1,22 @@
{% extends 'ace_common/edx_ace/common/base_body.html' %}
{% load i18n %}
{% load django_markup %}
{% block preview_text %}
{% if course_ids|length > 1 %}
{% filter force_escape %}
{% blocktrans trimmed %}
Remember when you enrolled in {{ course_name }}, and other courses on {{ platform_name }}? We do, and were glad
to have you! Come see what everyone is learning.
{% endblocktrans %}
{% endfilter %}
{% else %}
{% filter force_escape %}
{% blocktrans trimmed %}
Remember when you enrolled in {{ course_name }} on {{ platform_name }}? We do, and were glad
to have you! Come see what everyone is learning.
{% endblocktrans %}
{% endfilter %}
{% endif %}
{% endblock %}
@@ -19,22 +24,24 @@
<table width="100%" align="left" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<h1>{% trans "Keep learning today" %}.</h1>
<h1>{% trans "Keep learning today" as tmsg %}{{ tmsg | force_escape}}.</h1>
<p>
{% if course_ids|length > 1 %}
{% blocktrans trimmed %}
Remember when you enrolled in <strong>{{ course_name }}</strong>, and other courses on {{ platform_name }}? We do, and were glad
{% blocktrans trimmed asvar tmsg %}
Remember when you enrolled in {start_strong}{{ course_name }}{end_strong}, and other courses on {{ platform_name }}? We do, and were glad
to have you! Come see what everyone is learning.
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
{% else %}
{% blocktrans trimmed %}
Remember when you enrolled in <strong>{{ course_name }}</strong> on {{ platform_name }}? We do, and were glad
{% blocktrans trimmed asvar tmsg %}
Remember when you enrolled in {start_strong}{{ course_name }}{end_strong} on {{ platform_name }}? We do, and were glad
to have you! Come see what everyone is learning.
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
{% endif %}
</p>
## xss-lint: disable=django-trans-missing-escape
{% trans "Start learning now" as course_cta_text %}
{% include "ace_common/edx_ace/common/return_to_course_cta.html" with course_cta_text=course_cta_text%}

View File

@@ -1,10 +1,12 @@
{% extends 'ace_common/edx_ace/common/base_body.html' %}
{% load i18n %}
{% load django_markup %}
{% load static %}
{% load ace %}
{% block preview_text %}
{% if course_ids|length > 1 %}
{% filter force_escape %}
{% blocktrans trimmed %}
We hope you are enjoying learning with us so far on {{ platform_name }}! A verified certificate allows you to
highlight your new knowledge and skills. An {{ platform_name }} certificate is official and easily
@@ -12,7 +14,9 @@
Upgrade by {{ user_schedule_upgrade_deadline_time }}.
{% endblocktrans %}
{% endfilter %}
{% else %}
{% filter force_escape %}
{% blocktrans trimmed %}
We hope you are enjoying learning with us so far in {{ first_course_name }}! A verified certificate allows
you to highlight your new knowledge and skills. An {{ platform_name }} certificate is official and easily
@@ -20,6 +24,7 @@
Upgrade by {{ user_schedule_upgrade_deadline_time }}.
{% endblocktrans %}
{% endfilter %}
{% endif %}
{% endblock %}
@@ -27,32 +32,35 @@
<table width="100%" align="left" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<h1>{% trans "Upgrade now" %}</h1>
<h1>{% trans "Upgrade now" as tmsg %}{{ tmsg | force_escape }}</h1>
<p>
{% if course_ids|length > 1 %}
{% blocktrans trimmed %}
We hope you are enjoying learning with us so far on <strong>{{ platform_name }}</strong>! A
{% blocktrans trimmed asvar tmsg %}
We hope you are enjoying learning with us so far on {start_strong}{{ platform_name }}{end_strong}! A
verified certificate allows you to highlight your new knowledge and skills. An
{{ platform_name }} certificate is official and easily shareable.
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
{% else %}
{% blocktrans trimmed %}
We hope you are enjoying learning with us so far in <strong>{{ first_course_name }}</strong>! A
{% blocktrans trimmed asvar tmsg %}
We hope you are enjoying learning with us so far in {start_strong}{{ first_course_name }}{end_strong}! A
verified certificate allows you to highlight your new knowledge and skills. An
{{ platform_name }} certificate is official and easily shareable.
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
{% endif %}
</p>
<p>
{% blocktrans trimmed %}
Upgrade by <strong>{{ user_schedule_upgrade_deadline_time }}</strong>.
{% blocktrans trimmed asvar tmsg %}
Upgrade by {start_strong}{{ user_schedule_upgrade_deadline_time }}{end_strong}.
{% endblocktrans %}
{% interpolate_html tmsg start_strong='<strong>'|safe end_strong='</strong>'|safe %}
</p>
{% if course_ids|length > 1 and course_ids|length < 10 %}
<p>
{% trans "You are eligible to upgrade in these courses:" %}
{% trans "You are eligible to upgrade in these courses:" as tmsg %}{{ tmsg | force_escape }}
</p>
<ul style="margin-bottom: 30px;">
{% for course_link in course_links %}
@@ -65,7 +73,7 @@
<img
src="{{ cert_image }}"
alt="{% trans 'Example of a verified certificate' %}"
alt="{% trans 'Example of a verified certificate' as tmsg %}{{ tmsg | force_escape }}"
style="
display: block;
margin-right: auto;
@@ -76,7 +84,7 @@
border-bottom: 3px solid lightgray;
border-right: 3px solid lightgray;
border-left: 1px solid lightgray;
"
"
/>
<p>
@@ -101,7 +109,7 @@
display: inline-block;
">
{# old email clients require the use of the font tag :( #}
<font color="#ffffff"><b>{% trans "Upgrade now" %}</b></font>
<font color="#ffffff"><b>{% trans "Upgrade now" as tmsg %}{{ tmsg | force_escape }}</b></font>
</a>
</p>
</td>

View File

@@ -6,30 +6,40 @@
<tr>
<td>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
Hello {{full_name}},
{% endblocktrans %}
{% endfilter %}
</p>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
We received a deletion request for your account on {{platform_name}}. We're sorry to see you go!
{% endblocktrans %}
{% endfilter %}
</p>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
Your account will be deleted shortly. Account deletion, including removal from email lists, may take a few weeks to fully process through our system. If you want to opt-out of emails before then, please unsubscribe from the footer of any email.
{% endblocktrans %}
{% endfilter %}
</p>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
This is an informational email only. If you did not initiate this request, please contact {{contact_email}}.
{% endblocktrans %}
{% endfilter %}
</p>
<p>
{% filter force_escape %}
{% blocktrans trimmed %}
Best,
{{ platform_name }}
{% endblocktrans %}
{% endfilter %}
</p>
</td>
</tr>