Commit 56055cc4 by Douglas Hall

Merge branch 'release' into douglashall/merge_patch_2016_06_22_to_master

parents d794fc5c 1fcf32cf
...@@ -58,7 +58,7 @@ class PasswordResetFormNoActive(PasswordResetForm): ...@@ -58,7 +58,7 @@ class PasswordResetFormNoActive(PasswordResetForm):
email_template_name='registration/password_reset_email.html', email_template_name='registration/password_reset_email.html',
use_https=False, use_https=False,
token_generator=default_token_generator, token_generator=default_token_generator,
from_email=theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL), from_email=theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
request=None request=None
): ):
""" """
......
...@@ -57,7 +57,7 @@ class EmailTestMixin(object): ...@@ -57,7 +57,7 @@ class EmailTestMixin(object):
email_user.assert_called_with( email_user.assert_called_with(
mock_render_to_string(subject_template, subject_context), mock_render_to_string(subject_template, subject_context),
mock_render_to_string(body_template, body_context), mock_render_to_string(body_template, body_context),
theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL) theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
) )
def append_allowed_hosts(self, hostname): def append_allowed_hosts(self, hostname):
...@@ -298,7 +298,7 @@ class EmailChangeRequestTests(EventTestMixin, TestCase): ...@@ -298,7 +298,7 @@ class EmailChangeRequestTests(EventTestMixin, TestCase):
send_mail.assert_called_with( send_mail.assert_called_with(
mock_render_to_string('emails/email_change_subject.txt', context), mock_render_to_string('emails/email_change_subject.txt', context),
mock_render_to_string('emails/email_change.txt', context), mock_render_to_string('emails/email_change.txt', context),
theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL), theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
[new_email] [new_email]
) )
self.assert_event_emitted( self.assert_event_emitted(
......
...@@ -125,7 +125,7 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase): ...@@ -125,7 +125,7 @@ class ResetPasswordTests(EventTestMixin, CacheIsolationTestCase):
(subject, msg, from_addr, to_addrs) = send_email.call_args[0] (subject, msg, from_addr, to_addrs) = send_email.call_args[0]
self.assertIn("Password reset", subject) self.assertIn("Password reset", subject)
self.assertIn("You're receiving this e-mail because you requested a password reset", msg) self.assertIn("You're receiving this e-mail because you requested a password reset", msg)
self.assertEquals(from_addr, theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL)) self.assertEquals(from_addr, theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL))
self.assertEquals(len(to_addrs), 1) self.assertEquals(len(to_addrs), 1)
self.assertIn(self.user.email, to_addrs) self.assertIn(self.user.email, to_addrs)
......
...@@ -2229,11 +2229,11 @@ def reactivation_email_for_user(user): ...@@ -2229,11 +2229,11 @@ def reactivation_email_for_user(user):
message = render_to_string('emails/activation_email.txt', context) message = render_to_string('emails/activation_email.txt', context)
try: try:
user.email_user(subject, message, theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL)) user.email_user(subject, message, theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL))
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
log.error( log.error(
u'Unable to send reactivation email from "%s"', u'Unable to send reactivation email from "%s"',
theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL), theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
exc_info=True exc_info=True
) )
return JsonResponse({ return JsonResponse({
...@@ -2357,7 +2357,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument ...@@ -2357,7 +2357,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument
user.email_user( user.email_user(
subject, subject,
message, message,
theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL) theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
) )
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
log.warning('Unable to send confirmation email to old address', exc_info=True) log.warning('Unable to send confirmation email to old address', exc_info=True)
...@@ -2373,7 +2373,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument ...@@ -2373,7 +2373,7 @@ def confirm_email_change(request, key): # pylint: disable=unused-argument
user.email_user( user.email_user(
subject, subject,
message, message,
theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL) theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
) )
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
log.warning('Unable to send confirmation email to new address', exc_info=True) log.warning('Unable to send confirmation email to new address', exc_info=True)
......
...@@ -535,8 +535,6 @@ ...@@ -535,8 +535,6 @@
.speed-option, .speed-option,
.control-lang { .control-lang {
@include border-left($baseline/10 solid rgb(14, 166, 236));
font-weight: $font-bold;
color: rgb(14, 166, 236); // UXPL primary accent color: rgb(14, 166, 236); // UXPL primary accent
} }
} }
......
...@@ -55,9 +55,8 @@ ...@@ -55,9 +55,8 @@
</div> </div>
</section> </section>
</article> </article>
<div class="subtitles">
<ol class="subtitles-menu"><li></li></ol> <ol class="subtitles"><li></li></ol>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -109,9 +108,7 @@ ...@@ -109,9 +108,7 @@
</section> </section>
</article> </article>
<div class="subtitles"> <ol class="subtitles"><li></li></ol>
<ol class="subtitles-menu"><li></li></ol>
</div>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -20,10 +20,12 @@ var options = { ...@@ -20,10 +20,12 @@ var options = {
libraryFilesToInclude: [ libraryFilesToInclude: [
{pattern: 'common_static/js/vendor/requirejs/require.js', included: true}, {pattern: 'common_static/js/vendor/requirejs/require.js', included: true},
{pattern: 'RequireJS-namespace-undefine.js', included: true}, {pattern: 'RequireJS-namespace-undefine.js', included: true},
{pattern: 'spec/main_requirejs.js', included: true},
{pattern: 'common_static/coffee/src/ajax_prefix.js', included: true}, {pattern: 'common_static/coffee/src/ajax_prefix.js', included: true},
{pattern: 'common_static/common/js/vendor/underscore.js', included: true}, {pattern: 'common_static/common/js/vendor/underscore.js', included: true},
{pattern: 'common_static/common/js/vendor/backbone.js', included: true}, {pattern: 'common_static/common/js/vendor/backbone.js', included: true},
{pattern: 'common_static/edx-ui-toolkit/js/utils/global-loader.js', included: true},
{pattern: 'common_static/js/vendor/CodeMirror/codemirror.js', included: true}, {pattern: 'common_static/js/vendor/CodeMirror/codemirror.js', included: true},
{pattern: 'common_static/js/vendor/draggabilly.js'}, {pattern: 'common_static/js/vendor/draggabilly.js'},
{pattern: 'common_static/common/js/vendor/jquery.js', included: true}, {pattern: 'common_static/common/js/vendor/jquery.js', included: true},
...@@ -48,14 +50,11 @@ var options = { ...@@ -48,14 +50,11 @@ var options = {
{pattern: 'common_static/js/vendor/jasmine-imagediff.js', included: true}, {pattern: 'common_static/js/vendor/jasmine-imagediff.js', included: true},
{pattern: 'common_static/common/js/spec_helpers/jasmine-waituntil.js', included: true}, {pattern: 'common_static/common/js/spec_helpers/jasmine-waituntil.js', included: true},
{pattern: 'common_static/common/js/spec_helpers/jasmine-extensions.js', included: true}, {pattern: 'common_static/common/js/spec_helpers/jasmine-extensions.js', included: true},
{pattern: 'common_static/js/vendor/sinon-1.17.0.js', included: true}, {pattern: 'common_static/js/vendor/sinon-1.17.0.js', included: true}
{pattern: 'spec/main_requirejs.js', included: true},
], ],
libraryFiles: [ libraryFiles: [
{pattern: 'common_static/edx-pattern-library/js/**/*.js'}, {pattern: 'common_static/edx-pattern-library/js/**/*.js'}
{pattern: 'common_static/edx-ui-toolkit/js/**/*.js'}
], ],
// Make sure the patterns in sourceFiles and specFiles do not match the same file. // Make sure the patterns in sourceFiles and specFiles do not match the same file.
......
(function(requirejs, define) { (function(requirejs) {
'use strict';
// We do not wish to bundle common libraries (that may also be used by non-RequireJS code on the page
// into the optimized files. Therefore load these libraries through script tags and explicitly define them.
// Note that when the optimizer executes this code, window will not be defined.
if (window) {
var defineDependency = function (globalName, name, noShim) {
var getGlobalValue = function(name) {
var globalNamePath = name.split('.'),
result = window,
i;
for (i = 0; i < globalNamePath.length; i++) {
result = result[globalNamePath[i]];
}
return result;
},
globalValue = getGlobalValue(globalName);
if (globalValue) {
if (noShim) {
define(name, {});
}
else {
define(name, [], function() { return globalValue; });
}
}
else {
console.error("Expected library to be included on page, but not found on window object: " + name);
}
};
defineDependency("jQuery", "jquery");
defineDependency("jQuery", "jquery-migrate");
defineDependency("_", "underscore");
}
requirejs.config({ requirejs.config({
baseUrl: '/base/', baseUrl: '/base/',
paths: { paths: {
...@@ -38,8 +6,7 @@ ...@@ -38,8 +6,7 @@
"modernizr": "common_static/edx-pattern-library/js/modernizr-custom", "modernizr": "common_static/edx-pattern-library/js/modernizr-custom",
"afontgarde": "common_static/edx-pattern-library/js/afontgarde", "afontgarde": "common_static/edx-pattern-library/js/afontgarde",
"edxicons": "common_static/edx-pattern-library/js/edx-icons", "edxicons": "common_static/edx-pattern-library/js/edx-icons",
"draggabilly": "common_static/js/vendor/draggabilly", "draggabilly": "common_static/js/vendor/draggabilly"
'edx-ui-toolkit': 'common_static/edx-ui-toolkit'
}, },
"moment": { "moment": {
exports: "moment" exports: "moment"
...@@ -51,4 +18,5 @@ ...@@ -51,4 +18,5 @@
exports: "AFontGarde" exports: "AFontGarde"
} }
}); });
}).call(this, RequireJS.requirejs, RequireJS.define);
}).call(this, RequireJS.requirejs);
...@@ -266,7 +266,6 @@ ...@@ -266,7 +266,6 @@
expect($('.closed-captions')).toHaveAttrs({ expect($('.closed-captions')).toHaveAttrs({
'lang': 'de' 'lang': 'de'
}); });
expect(link).toHaveAttr('aria-pressed', 'true');
}); });
it('when clicking on link with current language', function () { it('when clicking on link with current language', function () {
...@@ -285,7 +284,6 @@ ...@@ -285,7 +284,6 @@
expect(state.storage.setItem) expect(state.storage.setItem)
.not.toHaveBeenCalledWith('language', 'en'); .not.toHaveBeenCalledWith('language', 'en');
expect($('.langs-list li.is-active').length).toBe(1); expect($('.langs-list li.is-active').length).toBe(1);
expect(link).toHaveAttr('aria-pressed', 'true');
}); });
it('open the language toggle on hover', function () { it('open the language toggle on hover', function () {
...@@ -415,7 +413,7 @@ ...@@ -415,7 +413,7 @@
}); });
it('show explanation message', function () { it('show explanation message', function () {
expect($('.subtitles .subtitles-menu li')).toHaveText( expect($('.subtitles-menu li')).toHaveText(
'Transcript will be displayed when you start playing the video.' 'Transcript will be displayed when you start playing the video.'
); );
}); });
......
...@@ -203,18 +203,16 @@ ...@@ -203,18 +203,16 @@
describe('onSpeedChange', function () { describe('onSpeedChange', function () {
beforeEach(function () { beforeEach(function () {
state = jasmine.initializePlayer(); state = jasmine.initializePlayer();
$('li[data-speed="1.0"]').addClass('is-active').attr('aria-pressed', 'true'); $('li[data-speed="1.0"]').addClass('is-active');
state.videoSpeedControl.setSpeed(0.75); state.videoSpeedControl.setSpeed(0.75);
}); });
it('set the new speed as active', function () { it('set the new speed as active', function () {
expect($('li[data-speed="1.0"]')).not.toHaveClass('is-active'); expect($('.video-speeds li[data-speed="1.0"]'))
expect($('li[data-speed="1.0"] .speed-option').attr('aria-pressed')).not.toEqual('true'); .not.toHaveClass('is-active');
expect($('.video-speeds li[data-speed="0.75"]'))
expect($('li[data-speed="0.75"]')).toHaveClass('is-active'); .toHaveClass('is-active');
expect($('li[data-speed="0.75"] .speed-option').attr('aria-pressed')).toEqual('true'); expect($('.speeds .value')).toHaveHtml('0.75x');
expect($('.speeds .speed-button .value')).toHaveHtml('0.75x');
}); });
}); });
......
(function (requirejs, require, define) { (function (requirejs, require, define) {
"use strict"; "use strict";
define( define(
'video/08_video_speed_control.js', [ 'video/08_video_speed_control.js',
'video/00_iterator.js', ['video/00_iterator.js'],
'edx-ui-toolkit/js/utils/html-utils' function (Iterator) {
], function (Iterator, HtmlUtils) {
/** /**
* Video speed control module. * Video speed control module.
* @exports video/08_video_speed_control.js * @exports video/08_video_speed_control.js
...@@ -96,37 +95,23 @@ define( ...@@ -96,37 +95,23 @@ define(
* Creates any necessary DOM elements, attach them, and set their, * Creates any necessary DOM elements, attach them, and set their,
* initial configuration. * initial configuration.
* @param {array} speeds List of speeds available for the player. * @param {array} speeds List of speeds available for the player.
* @param {string} currentSpeed The current speed set to the player.
*/ */
render: function (speeds, currentSpeed) { render: function (speeds) {
var speedsContainer = this.speedsContainer, var speedsContainer = this.speedsContainer,
reversedSpeeds = speeds.concat().reverse(), reversedSpeeds = speeds.concat().reverse(),
speedsList = $.map(reversedSpeeds, function (speed) { speedsList = $.map(reversedSpeeds, function (speed) {
return HtmlUtils.interpolateHtml( return [
HtmlUtils.joinHtml( '<li data-speed="', speed, '">',
HtmlUtils.HTML('<li data-speed="{speed}">'), '<button class="control speed-option" tabindex="-1">',
HtmlUtils.HTML('<button class="control speed-option" tabindex="-1" aria-pressed="false">'), speed, 'x',
HtmlUtils.HTML(speed), '</button>',
HtmlUtils.HTML('x'), '</li>'
HtmlUtils.HTML('</button>'), ].join('');
HtmlUtils.HTML('</li>')
),
{
speed: speed
}
).toString();
}); });
HtmlUtils.setHtml( speedsContainer.html(speedsList.join(''));
speedsContainer,
HtmlUtils.HTML(speedsList)
);
this.speedLinks = new Iterator(speedsContainer.find('.speed-option')); this.speedLinks = new Iterator(speedsContainer.find('.speed-option'));
HtmlUtils.prepend( this.state.el.find('.secondary-controls').prepend(this.el);
this.state.el.find('.secondary-controls'),
HtmlUtils.HTML(this.el)
);
this.setActiveSpeed(currentSpeed);
}, },
/** /**
...@@ -231,38 +216,17 @@ define( ...@@ -231,38 +216,17 @@ define(
if (speed !== this.currentSpeed || forceUpdate) { if (speed !== this.currentSpeed || forceUpdate) {
this.speedsContainer this.speedsContainer
.find('li') .find('li')
.siblings("li[data-speed='" + speed + "']"); .removeClass('is-active')
.siblings("li[data-speed='" + speed + "']")
.addClass('is-active');
this.speedButton.find('.value').text(speed + 'x'); this.speedButton.find('.value').html(speed + 'x');
this.currentSpeed = speed; this.currentSpeed = speed;
if (!silent) { if (!silent) {
this.el.trigger('speedchange', [speed, this.state.speed]); this.el.trigger('speedchange', [speed, this.state.speed]);
} }
} }
this.resetActiveSpeed();
this.setActiveSpeed(speed);
},
resetActiveSpeed: function() {
var speedOptions = this.speedsContainer.find('li');
$(speedOptions).each(function(index, el) {
$(el).removeClass('is-active')
.find('.speed-option')
.attr('aria-pressed', 'false');
});
},
setActiveSpeed: function(speed) {
var speedOption = this.speedsContainer.find('li[data-speed="' + speed + '"]');
speedOption.addClass('is-active')
.find('.speed-option')
.attr('aria-pressed', 'true');
this.speedButton.attr('title', gettext('Video speed: ') + speed + 'x');
}, },
/** /**
...@@ -280,13 +244,10 @@ define( ...@@ -280,13 +244,10 @@ define(
* @param {jquery Event} event * @param {jquery Event} event
*/ */
clickLinkHandler: function (event) { clickLinkHandler: function (event) {
var el = $(event.currentTarget).parent(), var speed = $(event.currentTarget).parent().data('speed');
speed = $(el).data('speed');
this.closeMenu();
this.resetActiveSpeed();
this.setActiveSpeed(speed);
this.state.videoCommands.execute('speed', speed); this.state.videoCommands.execute('speed', speed);
this.closeMenu(true);
return false; return false;
}, },
......
...@@ -389,7 +389,7 @@ def _get_source_address(course_id, course_title, truncate=True): ...@@ -389,7 +389,7 @@ def _get_source_address(course_id, course_title, truncate=True):
course_title=course_title_no_quotes, course_title=course_title_no_quotes,
course_name=course_name, course_name=course_name,
from_email=theming_helpers.get_value( from_email=theming_helpers.get_value(
'bulk_email_default_from_email', 'email_from_address',
settings.BULK_EMAIL_DEFAULT_FROM_EMAIL settings.BULK_EMAIL_DEFAULT_FROM_EMAIL
) )
) )
......
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
${_("Thank you for signing up for {platform_name}.").format(platform_name=settings.PLATFORM_NAME)} <%! from openedx.core.djangoapps.theming.helpers import get_value as get_themed_value %>
${_("Thank you for signing up for {platform_name}.").format(
platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME)
)}
${_("Change your life and start learning today by activating your " ${_("Change your life and start learning today by activating your "
"{platform_name} account. Click on the link below or copy and " "{platform_name} account. Click on the link below or copy and "
"paste it into your browser's address bar.").format( "paste it into your browser's address bar.").format(
platform_name=settings.PLATFORM_NAME platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME)
)} )}
% if is_secure: % if is_secure:
...@@ -15,4 +18,4 @@ ${_("Change your life and start learning today by activating your " ...@@ -15,4 +18,4 @@ ${_("Change your life and start learning today by activating your "
${_("If you didn't request this, you don't need to do anything; you won't " ${_("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; " "receive any more email from us. Please do not reply to this e-mail; "
"if you require assistance, check the help section of the " "if you require assistance, check the help section of the "
"{platform_name} website.").format(platform_name=settings.PLATFORM_NAME)} "{platform_name} website.").format(platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME))}
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
<%! from openedx.core.djangoapps.theming.helpers import get_value as get_themed_value %>
${_("Activate Your {platform_name} Account").format(platform_name=settings.PLATFORM_NAME)} ${_("Activate Your {platform_name} Account").format(
platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME
))}
<%! from django.core.urlresolvers import reverse %> <%! from django.core.urlresolvers import reverse %>
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
<%! from openedx.core.djangoapps.theming.helpers import get_value as get_themed_value %>
${_("This is to confirm that you changed the e-mail associated with " ${_("This is to confirm that you changed the e-mail associated with "
"{platform_name} from {old_email} to {new_email}. If you " "{platform_name} from {old_email} to {new_email}. If you "
"did not make this request, please contact us immediately. Contact " "did not make this request, please contact us immediately. Contact "
"information is listed at:").format(platform_name=settings.PLATFORM_NAME, old_email=old_email, new_email=new_email)} "information is listed at:").format(
platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME),
old_email=old_email,
new_email=new_email
)
}
% if is_secure: % if is_secure:
https://${ site }${reverse('contact')} https://${ site }${reverse('contact')}
...@@ -11,5 +17,4 @@ ${_("This is to confirm that you changed the e-mail associated with " ...@@ -11,5 +17,4 @@ ${_("This is to confirm that you changed the e-mail associated with "
http://${ site }${reverse('contact')} http://${ site }${reverse('contact')}
% endif % endif
${_("We keep a log of old e-mails, so if this request was unintentional, we " ${_("We keep a log of old e-mails, so if this request was unintentional, we can investigate.")}
"can investigate.")}
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
<%! from openedx.core.djangoapps.theming.helpers import get_value as get_themed_value %>
${_("We received a request to change the e-mail associated with your " ${_("We received a request to change the e-mail associated with your "
"{platform_name} account from {old_email} to {new_email}. " "{platform_name} account from {old_email} to {new_email}. "
"If this is correct, please confirm your new e-mail address by " "If this is correct, please confirm your new e-mail address by "
"visiting:").format(platform_name=settings.PLATFORM_NAME, old_email=old_email, new_email=new_email)} "visiting:").format(
platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME),
old_email=old_email,
new_email=new_email
)
}
% if is_secure: % if is_secure:
https://${ site }/email_confirm/${ key } https://${ site }/email_confirm/${ key }
...@@ -13,4 +19,4 @@ ${_("We received a request to change the e-mail associated with your " ...@@ -13,4 +19,4 @@ ${_("We received a request to change the e-mail associated with your "
${_("If you didn't request this, you don't need to do anything; you won't " ${_("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; " "receive any more email from us. Please do not reply to this e-mail; "
"if you require assistance, check the help section of the " "if you require assistance, check the help section of the "
"{platform_name} web site.").format(platform_name=settings.PLATFORM_NAME)} "{platform_name} web site.").format(platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME))}
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
${_("Request to change {platform_name} account e-mail").format(platform_name=settings.PLATFORM_NAME)} <%! from openedx.core.djangoapps.theming.helpers import get_value as get_themed_value %>
${_("Request to change {platform_name} account e-mail").format(
platform_name=get_themed_value('PLATFORM_NAME', settings.PLATFORM_NAME)
)}
...@@ -125,7 +125,7 @@ def send_credit_notifications(username, course_key): ...@@ -125,7 +125,7 @@ def send_credit_notifications(username, course_key):
notification_msg.attach(logo_image) notification_msg.attach(logo_image)
# add email addresses of sender and receiver # add email addresses of sender and receiver
from_address = theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL) from_address = theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL)
to_address = user.email to_address = user.email
# send the root email message # send the root email message
......
...@@ -398,7 +398,7 @@ def request_password_change(email, orig_host, is_secure): ...@@ -398,7 +398,7 @@ def request_password_change(email, orig_host, is_secure):
# Generate a single-use link for performing a password reset # Generate a single-use link for performing a password reset
# and email it to the user. # and email it to the user.
form.save( form.save(
from_email=theming_helpers.get_value('default_from_email', settings.DEFAULT_FROM_EMAIL), from_email=theming_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL),
domain_override=orig_host, domain_override=orig_host,
use_https=is_secure use_https=is_secure
) )
......
...@@ -90,7 +90,7 @@ git+https://github.com/edx/xblock-utils.git@v1.0.2#egg=xblock-utils==1.0.2 ...@@ -90,7 +90,7 @@ git+https://github.com/edx/xblock-utils.git@v1.0.2#egg=xblock-utils==1.0.2
-e git+https://github.com/edx/edx-reverification-block.git@0.0.5#egg=edx-reverification-block==0.0.5 -e git+https://github.com/edx/edx-reverification-block.git@0.0.5#egg=edx-reverification-block==0.0.5
git+https://github.com/edx/edx-user-state-client.git@1.0.1#egg=edx-user-state-client==1.0.1 git+https://github.com/edx/edx-user-state-client.git@1.0.1#egg=edx-user-state-client==1.0.1
git+https://github.com/edx/xblock-lti-consumer.git@v1.0.9#egg=xblock-lti-consumer==1.0.9 git+https://github.com/edx/xblock-lti-consumer.git@v1.0.9#egg=xblock-lti-consumer==1.0.9
git+https://github.com/edx/edx-proctoring.git@0.12.20#egg=edx-proctoring==0.12.20 git+https://github.com/edx/edx-proctoring.git@0.12.21#egg=edx-proctoring==0.12.21
# Third Party XBlocks # Third Party XBlocks
-e git+https://github.com/mitodl/edx-sga@172a90fd2738f8142c10478356b2d9ed3e55334a#egg=edx-sga -e git+https://github.com/mitodl/edx-sga@172a90fd2738f8142c10478356b2d9ed3e55334a#egg=edx-sga
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment