diff --git a/cms/static/js/certificates/models/signatory.js b/cms/static/js/certificates/models/signatory.js
index 416607d222..a74f7ba10d 100644
--- a/cms/static/js/certificates/models/signatory.js
+++ b/cms/static/js/certificates/models/signatory.js
@@ -54,11 +54,6 @@ function(_, str, Backbone, BackboneRelational, gettext) {
}
}
- if(_.has(attrs, 'organization') && attrs.organization.length > 40) {
- errors = _.extend({
- 'organization': gettext('Signatory organization should not be more than 40 characters long.')
- }, errors);
- }
if (errors !== null){
return errors;
}
diff --git a/cms/static/js/certificates/spec/views/certificate_editor_spec.js b/cms/static/js/certificates/spec/views/certificate_editor_spec.js
index 5ccd3794f2..9ea6dbd241 100644
--- a/cms/static/js/certificates/spec/views/certificate_editor_spec.js
+++ b/cms/static/js/certificates/spec/views/certificate_editor_spec.js
@@ -242,10 +242,6 @@ function(_, Course, CertificateModel, SignatoryModel, CertificatesCollection, Ce
inputSignatoryTitle: 'This is a certificate signatory title that has waaaaaaay more than 106 characters, in order to cause an exception.'
});
- setValuesToInputs(this.view, {
- inputSignatoryOrganization: 'New Signatory Organization longer than 40 characters'
- });
-
this.view.$(SELECTORS.saveCertificateButton).click();
expect(this.view.$('.certificate-edit-error')).toHaveClass('is-shown');
});
diff --git a/cms/templates/js/signatory-editor.underscore b/cms/templates/js/signatory-editor.underscore
index 0595ef3bc5..65789a9eb5 100644
--- a/cms/templates/js/signatory-editor.underscore
+++ b/cms/templates/js/signatory-editor.underscore
@@ -27,8 +27,8 @@
- " value="<%= organization %>" aria-describedby="signatory-organization-<%= signatory_number %>-tip" maxlength="40" />
- <%= gettext("The organization that this signatory belongs to, as it should appear on certificates. Maximum 40 characters.") %>
+ " value="<%= organization %>" aria-describedby="signatory-organization-<%= signatory_number %>-tip" />
+ <%= gettext("The organization that this signatory belongs to, as it should appear on certificates.") %>
<% if(error && error.organization) { %>
<%= error.organization %>
<% } %>
diff --git a/lms/djangoapps/verify_student/views.py b/lms/djangoapps/verify_student/views.py
index 09e750b1e4..ea89f8828c 100644
--- a/lms/djangoapps/verify_student/views.py
+++ b/lms/djangoapps/verify_student/views.py
@@ -273,7 +273,7 @@ class PayAndVerifyView(View):
# separate out the payment flow and use the product SKU to figure out what
# the user is trying to purchase.
#
- # Nonethless, for the time being we continue to make the really ugly assumption
+ # Nonetheless, for the time being we continue to make the really ugly assumption
# that at some point there was a paid course mode we can query for the price.
relevant_course_mode = self._get_paid_mode(course_key)
@@ -509,9 +509,12 @@ class PayAndVerifyView(View):
# Retrieve all the modes at once to reduce the number of database queries
all_modes, unexpired_modes = CourseMode.all_and_unexpired_modes_for_courses([course_key])
- # Retrieve the first unexpired, paid mode, if there is one
+ # Retrieve the first mode that matches the following criteria:
+ # * Unexpired
+ # * Price > 0
+ # * Not credit
for mode in unexpired_modes[course_key]:
- if mode.min_price > 0:
+ if mode.min_price > 0 and not CourseMode.is_credit_mode(mode):
return mode
# Otherwise, find the first expired mode
diff --git a/lms/envs/aws.py b/lms/envs/aws.py
index 3566c13970..9399a79e6c 100644
--- a/lms/envs/aws.py
+++ b/lms/envs/aws.py
@@ -131,6 +131,9 @@ if STATIC_URL_BASE:
if not STATIC_URL.endswith("/"):
STATIC_URL += "/"
+# Enable uglification of JavaScript
+PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.uglifyjs.UglifyJSCompressor'
+
# DEFAULT_COURSE_ABOUT_IMAGE_URL specifies the default image to show for courses that don't provide one
DEFAULT_COURSE_ABOUT_IMAGE_URL = ENV_TOKENS.get('DEFAULT_COURSE_ABOUT_IMAGE_URL', DEFAULT_COURSE_ABOUT_IMAGE_URL)
diff --git a/lms/static/js/commerce/views/receipt_view.js b/lms/static/js/commerce/views/receipt_view.js
index 665aec401d..4a9b0a30c3 100644
--- a/lms/static/js/commerce/views/receipt_view.js
+++ b/lms/static/js/commerce/views/receipt_view.js
@@ -64,6 +64,7 @@ var edx = edx || {};
providerDiv = this.$el.find("#receipt-provider");
context.course_key = this.courseKey;
context.username = this.username;
+ context.platformName = this.$el.data('platform-name');
providerDiv.html(_.template(templateHtml, context)).removeClass('hidden');
},
@@ -301,7 +302,7 @@ function completeOrder (event) {
);
$.ajax({
- url: '/api/credit/v1/provider/' + providerId + '/request/',
+ url: '/api/credit/v1/providers/' + providerId + '/request/',
type: 'POST',
headers: {
'X-CSRFToken': $.cookie('csrftoken')
diff --git a/lms/static/sass/views/_verification.scss b/lms/static/sass/views/_verification.scss
index da59fac628..979c5cf956 100644
--- a/lms/static/sass/views/_verification.scss
+++ b/lms/static/sass/views/_verification.scss
@@ -246,42 +246,33 @@
}
.report-receipt-provider {
@extend %ui-window;
- border-top: 3px solid $credit-color-base;
+ padding: ($baseline*0.75) $baseline;
.provider-wrapper {
width: 70%;
@include float(left);
- padding-left: $baseline;
.provider-info {
- padding: $baseline $baseline $baseline 0;
+ margin-bottom: $baseline;
font-weight: 600;
}
- .provider-more-info {
- }
- .provider-instructions {
- }
}
.provider-buttons-logos {
- width: 30%;
@include float(right);
@include text-align(center);
- .provider-logo {
- padding: $baseline;
- }
- .provider-logo image {
- width: 100px;
+ .provider-logo img {
+ width: 100px;
}
.complete-order {
@include text-align(center);
- padding: $baseline;
- }
- .complete-order button {
- @extend %btn-pl-primary-base;
- white-space: nowrap;
+
+ button {
+ @extend %btn-pl-primary-base;
+ white-space: nowrap;
+ }
}
}
}
diff --git a/lms/templates/commerce/provider.underscore b/lms/templates/commerce/provider.underscore
index ce4df2e362..a79108f6b4 100644
--- a/lms/templates/commerce/provider.underscore
+++ b/lms/templates/commerce/provider.underscore
@@ -1,9 +1,9 @@
- <%= interpolate(gettext("You still need to visit %s to complete the credit process."), [display_name]) %>
+ <%= interpolate(gettext("You still need to visit the %s website to complete the credit process."), [display_name]) %>
- <%= interpolate(gettext("In order to learn credit, %s requires learner to:"), [display_name]) %>
+ <%= interpolate(gettext("To finalize course credit, %s requires %s learners to submit a credit request."), [provider_id.toUpperCase(), platformName]) %>