Commit b2ec081a by Andy Armstrong

Improve handling of submission cancellation

parent 2b754516
......@@ -214,7 +214,7 @@
{% endif %}
<div class="staff-info__status ui-staff__content__section wrapper--ui--collapse">
<div class="ui-staff ui-toggle-visibility is--collapsed">
<div class="ui-staff ui-toggle-visibility {% if expanded_view != 'final-grade' %}is--collapsed {% endif %}">
<h2 class="staff-info__title ui-staff__subtitle ui-toggle-visibility__control">
<i class="icon fa fa-caret-right"></i>
<span>{% trans "Learner's Final Grade" %}</span>
......@@ -229,7 +229,7 @@
{% elif workflow_status == "waiting" %}
<p>{% trans "The submission is waiting for assessments." %}</p>
{% elif workflow_status == "cancelled" %}
<p>{% trans "The submission has been cancelled." %}</p>
<p>{% trans "The learner's submission has been removed from peer assessment. The learner receives a grade of zero unless you reset the learner's attempts for the problem to allow them to resubmit a response." %}</p>
{% elif workflow_status == None %}
<p>{% trans "The problem has not been started." %}</p>
{% else %}
......@@ -240,7 +240,7 @@
</div>
<div class="staff-info__staff-override ui-staff__content__section wrapper--ui--collapse">
<div class="ui-staff ui-toggle-visibility is--collapsed">
<div class="ui-staff ui-toggle-visibility {% if expanded_view != 'staff-override' %}is--collapsed {% endif %}">
<h2 class="staff-info__title ui-staff__subtitle ui-toggle-visibility__control">
<i class="icon fa fa-caret-right"></i>
<span>{% trans "Submit Assessment Grade Override" %}</span>
......
......@@ -214,13 +214,17 @@ class StaffAreaMixin(object):
"""
try:
student_username = data.params.get('student_username', '')
path, context = self.get_student_info_path_and_context(student_username)
expanded_view = data.params.get('expanded_view', [])
path, context = self.get_student_info_path_and_context(
student_username,
expanded_view=expanded_view
)
return self.render_assessment(path, context)
except PeerAssessmentInternalError:
return self.render_error(self._(u"Error finding assessment workflow cancellation."))
def get_student_info_path_and_context(self, student_username):
def get_student_info_path_and_context(self, student_username, expanded_view=None):
"""
Get the proper path and context for rendering the student info
section of the staff area.
......@@ -295,6 +299,7 @@ class StaffAreaMixin(object):
'example_based_assessment': example_based_assessment,
'rubric_criteria': copy.deepcopy(self.rubric_criteria_with_labels),
'student_username': student_username,
'expanded_view': expanded_view,
}
if peer_assessments or self_assessment or example_based_assessment:
......
......@@ -41,9 +41,9 @@ describe("OpenAssessment.GradeView", function() {
server = new StubServer();
// Create and install the view
var $grade = $('#openassessment__grade').first();
var baseView = new OpenAssessment.BaseView(runtime, $grade, server, {});
view = new OpenAssessment.GradeView($grade, server, baseView);
var gradeElement = $('#openassessment__grade').get(0);
var baseView = new OpenAssessment.BaseView(runtime, gradeElement, server, {});
view = new OpenAssessment.GradeView(gradeElement, server, baseView);
view.installHandlers();
});
......
......@@ -32,9 +32,9 @@ describe("OpenAssessment.PeerView", function() {
var createPeerAssessmentView = function(template) {
loadFixtures(template);
var $assessment = $('#openassessment__peer-assessment').first();
var baseView = new OpenAssessment.BaseView(runtime, $assessment, server, {});
var view = new OpenAssessment.PeerView($assessment, server, baseView);
var assessmentElement = $('#openassessment__peer-assessment').get(0);
var baseView = new OpenAssessment.BaseView(runtime, assessmentElement, server, {});
var view = new OpenAssessment.PeerView(assessmentElement, server, baseView);
view.installHandlers();
return view;
};
......
......@@ -119,9 +119,9 @@ describe("OpenAssessment.ResponseView", function() {
};
// Create and install the view
var $response = $('#openassessment__response').first();
var baseView = new OpenAssessment.BaseView(runtime, $response, server, {});
view = new OpenAssessment.ResponseView($response, server, fileUploader, baseView, data);
var responseElement = $('#openassessment__response').get(0);
var baseView = new OpenAssessment.BaseView(runtime, responseElement, server, {});
view = new OpenAssessment.ResponseView(responseElement, server, fileUploader, baseView, data);
view.installHandlers();
// Stub the confirmation step
......
......@@ -37,9 +37,9 @@ describe("OpenAssessment.SelfView", function() {
server.renderLatex = jasmine.createSpy('renderLatex');
// Create the object under test
var $assessment = $("#openassessment__self-assessment").first();
var baseView = new OpenAssessment.BaseView(runtime, $assessment, server, {});
view = new OpenAssessment.SelfView($assessment, server, baseView);
var assessmentElement = $("#openassessment__self-assessment").get(0);
var baseView = new OpenAssessment.BaseView(runtime, assessmentElement, server, {});
view = new OpenAssessment.SelfView(assessmentElement, server, baseView);
view.installHandlers();
});
......
......@@ -67,9 +67,9 @@ describe('OpenAssessment.StaffAreaView', function() {
if (serverResponse) {
server.data = serverResponse;
}
var $assessment = $('#openassessment').first();
var baseView = new OpenAssessment.BaseView(runtime, $assessment, server, {});
var view = new OpenAssessment.StaffAreaView($assessment, server, baseView);
var assessmentElement = $('#openassessment').get(0);
var baseView = new OpenAssessment.BaseView(runtime, assessmentElement, server, {});
var view = new OpenAssessment.StaffAreaView(assessmentElement, server, baseView);
view.load();
return view;
};
......
......@@ -43,9 +43,9 @@ describe("OpenAssessment.StudentTrainingView", function() {
server.renderLatex = jasmine.createSpy('renderLatex')
// Create the object under test
var $training = $('#openassessment__student-training').first();
var baseView = new OpenAssessment.BaseView(runtime, $training, server, {});
view = new OpenAssessment.StudentTrainingView($training, server, baseView);
var trainingElement = $('#openassessment__student-training').get(0);
var baseView = new OpenAssessment.BaseView(runtime, trainingElement, server, {});
view = new OpenAssessment.StudentTrainingView(trainingElement, server, baseView);
view.installHandlers();
});
......
......@@ -47,8 +47,12 @@
* Upon request, loads the student info section of the staff area.
* This allows viewing all the submissions and assessments associated
* to the given student's current workflow.
*
* @param options An optional set of options to render the section.
* @returns {promise} A promise representing the successful oading
* of the student info section.
*/
loadStudentInfo: function() {
loadStudentInfo: function(options) {
var view = this;
var $staffTools = $('.openassessment__staff-tools', this.element);
var $form = $staffTools.find('.openassessment_student_info_form');
......@@ -56,12 +60,13 @@
var showFormError = function(errorMessage) {
$form.find('.form--error').text(errorMessage);
};
var deferred = $.Deferred();
// Clear any previous student information
$('.openassessment__student-info', view.element).text('');
if (student_username.trim()) {
this.server.studentInfo(student_username)
this.server.studentInfo(student_username, options)
.done(function(html) {
// Clear any error message
showFormError('');
......@@ -99,13 +104,17 @@
}
);
}
}).fail(function() {
deferred.resolve();
})
.fail(function() {
showFormError(gettext('Unexpected server error.'));
}
);
deferred.reject();
});
} else {
showFormError(gettext('A learner name must be provided.'));
deferred.reject();
}
return deferred.promise();
},
/**
......@@ -221,11 +230,14 @@
// Immediately disable the button to prevent multiple requests.
this.cancelSubmissionEnabled(false);
var view = this;
var comments = this.element.find('.cancel_submission_comments').val();
var comments = $('.cancel_submission_comments', this.element).val();
this.server.cancelSubmission(submissionUUID, comments)
.done(function(msg) {
$('.cancel-submission-error').html('');
$('.openassessment__staff-info__cancel__submission', view.element).html(msg);
view.loadStudentInfo({expanded_view: 'final-grade'})
.done(function() {
$('.openassessment__staff-info__cancel__submission', view.element).html(msg);
});
})
.fail(function(errMsg) {
$('.cancel-submission-error').html(errMsg);
......@@ -316,12 +328,9 @@
view.staffSubmitEnabled(false);
this.server.staffAssess(rubric.optionsSelected(), rubric.criterionFeedback(), rubric.overallFeedback())
.done(
function() {
baseView.loadAssessmentModules();
baseView.scrollToTop();
}
)
.done(function() {
view.loadStudentInfo({expanded_view: 'staff-override'});
})
.fail(function(errorMessage) {
baseView.toggleActionError('staff', errorMessage);
view.staffSubmitEnabled(true);
......
......@@ -100,14 +100,14 @@ if (typeof OpenAssessment.Server === "undefined" || !OpenAssessment.Server) {
* @returns {promise} A JQuery promise, which resolves with the HTML of the rendered section
* fails with an error message.
*/
studentInfo: function(student_username) {
studentInfo: function(student_username, options) {
var url = this.url('render_student_info');
return $.Deferred(function(defer) {
$.ajax({
url: url,
type: "POST",
dataType: "html",
data: {student_username: student_username}
data: _.extend({student_username: student_username}, options)
})
.done(function(data) {
defer.resolveWith(this, [data]);
......
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