Merge pull request #10554 from edx/release
Verifying release branch for release-2015-11-09
This commit is contained in:
@@ -17,7 +17,6 @@ require.config({
|
||||
paths: {
|
||||
"domReady": "js/vendor/domReady",
|
||||
"gettext": "/i18n",
|
||||
"json2": "js/vendor/json2",
|
||||
"mustache": "js/vendor/mustache",
|
||||
"codemirror": "js/vendor/codemirror-compressed",
|
||||
"codemirror/stex": "js/vendor/CodeMirror/stex",
|
||||
@@ -96,9 +95,6 @@ require.config({
|
||||
]
|
||||
},
|
||||
shim: {
|
||||
"json2": {
|
||||
exports: "JSON"
|
||||
},
|
||||
"gettext": {
|
||||
exports: "gettext"
|
||||
},
|
||||
|
||||
@@ -23,7 +23,6 @@ requirejs.config({
|
||||
"jquery.simulate": "xmodule_js/common_static/js/vendor/jquery.simulate",
|
||||
"datepair": "xmodule_js/common_static/js/vendor/timepicker/datepair",
|
||||
"date": "xmodule_js/common_static/js/vendor/date",
|
||||
"json2": "xmodule_js/common_static/js/vendor/json2",
|
||||
"moment": "xmodule_js/common_static/js/vendor/moment.min",
|
||||
"moment-with-locales": "xmodule_js/common_static/js/vendor/moment-with-locales.min",
|
||||
"text": "xmodule_js/common_static/js/vendor/requirejs/text",
|
||||
@@ -59,9 +58,6 @@ requirejs.config({
|
||||
"js/spec/test_utils": "js/spec/test_utils",
|
||||
}
|
||||
shim: {
|
||||
"json2": {
|
||||
exports: "JSON"
|
||||
},
|
||||
"gettext": {
|
||||
exports: "gettext"
|
||||
},
|
||||
|
||||
@@ -31,23 +31,6 @@ function(_, str, Backbone, BackboneRelational, gettext) {
|
||||
return response;
|
||||
},
|
||||
|
||||
validate: function(attrs) {
|
||||
var errors = null;
|
||||
if(_.has(attrs, 'title')){
|
||||
var title = attrs.title;
|
||||
var lines = title.split(/\r\n|\r|\n/);
|
||||
if (lines.length > 2) {
|
||||
errors = _.extend({
|
||||
'title': gettext('Signatory title should span over maximum of 2 lines.')
|
||||
}, errors);
|
||||
}
|
||||
}
|
||||
if (errors !== null){
|
||||
return errors;
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
setOriginalAttributes: function() {
|
||||
// Remember the current state of this model (enables edit->cancel use cases)
|
||||
this._originalAttributes = this.parse(this.toJSON());
|
||||
|
||||
@@ -244,24 +244,6 @@ function(_, Course, CertificatesCollection, CertificateModel, CertificateDetails
|
||||
this.view.$(SELECTORS.signatory_organization_value)
|
||||
).toContainText('New Signatory Test Organization');
|
||||
});
|
||||
it('should not allow invalid data when saving changes made during in-line signatory editing', function() {
|
||||
this.view.$(SELECTORS.edit_signatory).click();
|
||||
|
||||
setValuesToInputs(this.view, {
|
||||
inputSignatoryName: 'New Signatory Test Name'
|
||||
});
|
||||
|
||||
setValuesToInputs(this.view, {
|
||||
inputSignatoryTitle: 'Signatory Title \non three \nlines'
|
||||
});
|
||||
|
||||
setValuesToInputs(this.view, {
|
||||
inputSignatoryOrganization: 'New Signatory Test Organization'
|
||||
});
|
||||
|
||||
this.view.$(SELECTORS.signatory_panel_save).click();
|
||||
expect(this.view.$(SELECTORS.inputSignatoryTitle).parent()).toHaveClass('error');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -246,7 +246,7 @@ function(_, Course, CertificateModel, SignatoryModel, CertificatesCollection, Ce
|
||||
expect(this.view.$('.certificate-edit-error')).not.toHaveClass('is-shown');
|
||||
});
|
||||
|
||||
it('signatories should not save when title span on more than 2 lines', function() {
|
||||
it('signatories should save when title span on more than 2 lines', function() {
|
||||
this.view.$(SELECTORS.addSignatoryButton).click();
|
||||
setValuesToInputs(this.view, {
|
||||
inputCertificateName: 'New Certificate Name'
|
||||
@@ -265,7 +265,7 @@ function(_, Course, CertificateModel, SignatoryModel, CertificatesCollection, Ce
|
||||
});
|
||||
|
||||
this.view.$(SELECTORS.saveCertificateButton).click();
|
||||
expect(this.view.$('.certificate-edit-error')).toHaveClass('is-shown');
|
||||
expect(this.view.$('.certificate-edit-error')).not.toHaveClass('is-shown');
|
||||
});
|
||||
|
||||
it('user can delete those signatories already saved', function() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
define(["jquery", "jquery.ui", "underscore", "json2", "gettext", "draggabilly",
|
||||
define(["jquery", "jquery.ui", "underscore", "gettext", "draggabilly",
|
||||
"js/utils/module", "common/js/components/views/feedback_notification"],
|
||||
function ($, ui, _, JSON, gettext, Draggabilly, ModuleUtils, NotificationView) {
|
||||
function ($, ui, _, gettext, Draggabilly, ModuleUtils, NotificationView) {
|
||||
'use strict';
|
||||
|
||||
var contentDragger = {
|
||||
|
||||
@@ -59,7 +59,6 @@ lib_paths:
|
||||
- xmodule_js/common_static/js/vendor/draggabilly.pkgd.js
|
||||
- xmodule_js/common_static/js/vendor/date.js
|
||||
- xmodule_js/common_static/js/vendor/domReady.js
|
||||
- xmodule_js/common_static/js/vendor/json2.js
|
||||
- xmodule_js/common_static/js/vendor/URI.min.js
|
||||
- xmodule_js/common_static/js/vendor/jquery.smooth-scroll.min.js
|
||||
- xmodule_js/common_static/coffee/src/jquery.immediateDescendents.js
|
||||
|
||||
@@ -136,8 +136,12 @@ class CourseEnrollmentAdmin(admin.ModelAdmin):
|
||||
""" Admin interface for the CourseEnrollment model. """
|
||||
list_display = ('id', 'course_id', 'mode', 'user', 'is_active',)
|
||||
list_filter = ('mode', 'is_active',)
|
||||
raw_id_fields = ('user',)
|
||||
search_fields = ('course_id', 'mode', 'user__username',)
|
||||
|
||||
def queryset(self, request):
|
||||
return super(CourseEnrollmentAdmin, self).queryset(request).select_related('user')
|
||||
|
||||
class Meta(object):
|
||||
model = CourseEnrollment
|
||||
|
||||
@@ -145,6 +149,7 @@ class CourseEnrollmentAdmin(admin.ModelAdmin):
|
||||
class UserProfileAdmin(admin.ModelAdmin):
|
||||
""" Admin interface for UserProfile model. """
|
||||
list_display = ('user', 'name',)
|
||||
raw_id_fields = ('user',)
|
||||
search_fields = ('user__username', 'user__first_name', 'user__last_name', 'user__email', 'name',)
|
||||
|
||||
def get_readonly_fields(self, request, obj=None):
|
||||
|
||||
@@ -538,19 +538,6 @@ describe 'Problem', ->
|
||||
runs ->
|
||||
expect(window.SR.readElts).toHaveBeenCalled()
|
||||
|
||||
it 'disables check button while posting', ->
|
||||
runs ->
|
||||
spyOn($, 'postWithPrefix').andCallFake (url, answers, callback) -> callback(success: 'OK')
|
||||
spyOn @problem, 'enableCheckButton'
|
||||
@problem.save()
|
||||
expect(@problem.enableCheckButton).toHaveBeenCalledWith false
|
||||
waitsFor (->
|
||||
return jQuery.active == 0
|
||||
), "jQuery requests finished", 1000
|
||||
|
||||
runs ->
|
||||
expect(@problem.enableCheckButton).toHaveBeenCalledWith true
|
||||
|
||||
describe 'refreshMath', ->
|
||||
beforeEach ->
|
||||
@problem = new Problem($('.xblock-student_view'))
|
||||
|
||||
@@ -412,13 +412,11 @@ class @Problem
|
||||
@save_internal()
|
||||
|
||||
save_internal: =>
|
||||
@enableCheckButton false
|
||||
Logger.log 'problem_save', @answers
|
||||
$.postWithPrefix "#{@url}/problem_save", @answers, (response) =>
|
||||
saveMessage = response.msg
|
||||
@gentle_alert saveMessage
|
||||
@updateProgress response
|
||||
@enableCheckButton true
|
||||
|
||||
refreshMath: (event, element) =>
|
||||
element = event.target unless element
|
||||
|
||||
9
common/static/js/vendor/draggabilly.pkgd.js
vendored
9
common/static/js/vendor/draggabilly.pkgd.js
vendored
@@ -1748,7 +1748,14 @@ return Unidragger;
|
||||
|
||||
if ( typeof define == 'function' && define.amd ) {
|
||||
// AMD
|
||||
define( [
|
||||
// Note: fixed by andy-armstrong to include a name for the definition
|
||||
// so that this works when optimized using r.js. This is only an issue
|
||||
// in Studio, as the LMS uses a namespaced version of RequireJS so
|
||||
// this clause isn't reached.
|
||||
// See http://requirejs.org/docs/errors.html#mismatch
|
||||
define(
|
||||
'draggabilly',
|
||||
[
|
||||
'classie/classie',
|
||||
'get-style-property/get-style-property',
|
||||
'get-size/get-size',
|
||||
|
||||
@@ -204,7 +204,7 @@ def calculate_students_features_csv(entry_id, xmodule_instance_args):
|
||||
return run_main_task(entry_id, task_fn, action_name)
|
||||
|
||||
|
||||
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
|
||||
@task(base=BaseInstructorTask) # pylint: disable=not-callable
|
||||
def enrollment_report_features_csv(entry_id, xmodule_instance_args):
|
||||
"""
|
||||
Compute student profile information for a course and upload the
|
||||
@@ -216,7 +216,7 @@ def enrollment_report_features_csv(entry_id, xmodule_instance_args):
|
||||
return run_main_task(entry_id, task_fn, action_name)
|
||||
|
||||
|
||||
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
|
||||
@task(base=BaseInstructorTask) # pylint: disable=not-callable
|
||||
def exec_summary_report_csv(entry_id, xmodule_instance_args):
|
||||
"""
|
||||
Compute executive summary report for a course and upload the
|
||||
@@ -228,7 +228,7 @@ def exec_summary_report_csv(entry_id, xmodule_instance_args):
|
||||
return run_main_task(entry_id, task_fn, action_name)
|
||||
|
||||
|
||||
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
|
||||
@task(base=BaseInstructorTask) # pylint: disable=not-callable
|
||||
def course_survey_report_csv(entry_id, xmodule_instance_args):
|
||||
"""
|
||||
Compute the survey report for a course and upload the
|
||||
@@ -240,7 +240,7 @@ def course_survey_report_csv(entry_id, xmodule_instance_args):
|
||||
return run_main_task(entry_id, task_fn, action_name)
|
||||
|
||||
|
||||
@task(base=BaseInstructorTask, routing_key=settings.GRADES_DOWNLOAD_ROUTING_KEY) # pylint: disable=not-callable
|
||||
@task(base=BaseInstructorTask) # pylint: disable=not-callable
|
||||
def proctored_exam_results_csv(entry_id, xmodule_instance_args):
|
||||
"""
|
||||
Compute proctored exam results report for a course and upload the
|
||||
|
||||
@@ -1327,12 +1327,15 @@ def upload_course_survey_report(_xmodule_instance_args, _entry_id, course_id, _t
|
||||
survey_fields.sort()
|
||||
|
||||
user_survey_answers = OrderedDict()
|
||||
survey_answers_for_course = SurveyAnswer.objects.filter(course_key=course_id)
|
||||
survey_answers_for_course = SurveyAnswer.objects.filter(course_key=course_id).select_related('user')
|
||||
|
||||
for survey_field_record in survey_answers_for_course:
|
||||
user_id = survey_field_record.user.id
|
||||
if user_id not in user_survey_answers.keys():
|
||||
user_survey_answers[user_id] = {}
|
||||
user_survey_answers[user_id] = {
|
||||
'username': survey_field_record.user.username,
|
||||
'email': survey_field_record.user.email
|
||||
}
|
||||
|
||||
user_survey_answers[user_id][survey_field_record.field_name] = survey_field_record.field_value
|
||||
|
||||
@@ -1343,9 +1346,8 @@ def upload_course_survey_report(_xmodule_instance_args, _entry_id, course_id, _t
|
||||
for user_id in user_survey_answers.keys():
|
||||
row = []
|
||||
row.append(user_id)
|
||||
user_obj = User.objects.get(id=user_id)
|
||||
row.append(user_obj.username)
|
||||
row.append(user_obj.email)
|
||||
row.append(user_survey_answers[user_id].get('username', ''))
|
||||
row.append(user_survey_answers[user_id].get('email', ''))
|
||||
for survey_field in survey_fields:
|
||||
row.append(user_survey_answers[user_id].get(survey_field, ''))
|
||||
csv_rows.append(row)
|
||||
|
||||
Reference in New Issue
Block a user