Commit 9700a80e by muzaffaryousaf

Refactoring the Staff override functionality.

TNL-898
parent 218601e2
...@@ -83,14 +83,14 @@ ...@@ -83,14 +83,14 @@
<form id="openassessment_staff_regrade_form" data-assessment-id="{{ assessment.id }}"> <form id="openassessment_staff_regrade_form" data-assessment-id="{{ assessment.id }}">
<ul> <ul>
<li> <li>
<label for="openassessment__staff-info__regrade_points" class="label">{% trans "New Total Grade" %}</label> <label for="openassessment__staff-info__regrade_points" class="label">{% trans "New Total Grade (Required)" %}</label>
</li> </li>
<li> <li>
<input id="openassessment__staff-info__regrade_points" type="number" <input id="openassessment__staff-info__regrade_points" type="number"
maxlength="3" min="0" max="100"> maxlength="3" min="0" max="100">
</li> </li>
<li> <li>
<label for="openassessment__staff-info__regrade_comments" class="label">{% trans "(Optional) Comments" %}</label> <label for="openassessment__staff-info__regrade_comments" class="label">{% trans "Comments (Optional)" %}</label>
</li> </li>
<li> <li>
<textarea <textarea
...@@ -107,6 +107,7 @@ ...@@ -107,6 +107,7 @@
<span <span
class="copy">{% trans "Save" %}</span> class="copy">{% trans "Save" %}</span>
</a> </a>
<div class="override-grade-error"></div>
</li> </li>
</ul> </ul>
</form> </form>
......
...@@ -487,6 +487,27 @@ class OpenAssessmentBlock( ...@@ -487,6 +487,27 @@ class OpenAssessmentBlock(
context = Context(context_dict) context = Context(context_dict)
return Response(template.render(context), content_type='application/html', charset='UTF-8') return Response(template.render(context), content_type='application/html', charset='UTF-8')
def render_html(self, path, context_dict=None):
"""Render Module's HTML
Args:
path (str): The path to the template used to render this HTML
section.
context_dict (dict): A dictionary of context variables used to
populate this HTML section.
Returns:
(Response): A Rendered Object with the generated HTML fragment. This
is intended for AJAX calls to load dynamically into a larger
document.
"""
if not context_dict:
context_dict = {}
template = get_template(path)
context = Context(context_dict)
return template.render(context)
def add_xml_to_node(self, node): def add_xml_to_node(self, node):
""" """
Serialize the XBlock to XML for exporting. Serialize the XBlock to XML for exporting.
......
...@@ -5,6 +5,8 @@ determine the flow of the problem. ...@@ -5,6 +5,8 @@ determine the flow of the problem.
import copy import copy
from functools import wraps from functools import wraps
import logging import logging
from django.template import Context
from django.template.loader import get_template
from xblock.core import XBlock from xblock.core import XBlock
from openassessment.assessment.errors import PeerAssessmentInternalError, PeerAssessmentRequestError from openassessment.assessment.errors import PeerAssessmentInternalError, PeerAssessmentRequestError
...@@ -281,26 +283,27 @@ class StaffInfoMixin(object): ...@@ -281,26 +283,27 @@ class StaffInfoMixin(object):
path = 'openassessmentblock/staff_debug/student_info.html' path = 'openassessmentblock/staff_debug/student_info.html'
return path, context return path, context
@XBlock.handler @XBlock.json_handler
@require_course_staff("STAFF_INFO") @require_course_staff("STAFF_INFO")
def staff_override_assessment(self, data, suffix=''): def staff_override_assessment(self, data, suffix=''):
assessment_id = data.params.get('assessment_id', '') assessment_id = data.get('assessment_id', '')
points = data.params.get('points', None) points = data.get('points', '')
comments = data.params.get('comments', '') comments = data.get('comments', '')
if points is None: if points in ['', None]:
return self.render_error(self._(u'"override_assessment" required new grade value.')) return {"success": False, "msg": self._(u'Please enter integer value for new grade.')}
# return self.render_error(self._(u'"override_assessment" required new grade value.'))
try: try:
overridden_assessment = peer_api.create_overridden_assessment(assessment_id=assessment_id, points=points, comments=comments, overridden_assessment = peer_api.create_overridden_assessment(assessment_id=assessment_id, points=points, comments=comments,
scorer_id=self.get_student_item_dict()["student_id"]) scorer_id=self.get_student_item_dict()["student_id"])
path='openassessmentblock/staff_debug/staff_regrade_info.html' path = 'openassessmentblock/staff_debug/staff_regrade_info.html'
context = { context_dict = {
'overridden_points': overridden_assessment.points, 'overridden_points': overridden_assessment.points,
'overridden_comments': overridden_assessment.comments 'overridden_comments': overridden_assessment.comments
} }
return self.render_assessment(path, context) return {"success": True, "rendered_html": self.render_html(path, context_dict)}
except PeerAssessmentRequestError as ex: except PeerAssessmentRequestError as ex:
msg = ex.message msg = ex.message
......
...@@ -90,13 +90,12 @@ OpenAssessment.StaffInfoView.prototype = { ...@@ -90,13 +90,12 @@ OpenAssessment.StaffInfoView.prototype = {
this.server.assessmentOverride(assessmentId, points, comments).done( this.server.assessmentOverride(assessmentId, points, comments).done(
function(html) { function(html) {
// Load the HTML and install event handlers // Load the HTML and install event handlers
if (html) { $('.override-grade-error').html('');
}
$('#openassessment__staff-info__regrade-info', view.element).html(html); $('#openassessment__staff-info__regrade-info', view.element).html(html);
} }
).fail(function(errMsg) { ).fail(function(errMsg) {
view.showLoadError('student_info'); $('.override-grade-error').html(errMsg);
}); });
}, },
......
...@@ -142,17 +142,23 @@ if (typeof OpenAssessment.Server == "undefined" || !OpenAssessment.Server) { ...@@ -142,17 +142,23 @@ if (typeof OpenAssessment.Server == "undefined" || !OpenAssessment.Server) {
         **/          **/
assessmentOverride: function (assessmentId, points, comments) { assessmentOverride: function (assessmentId, points, comments) {
var url = this.url('staff_override_assessment'); var url = this.url('staff_override_assessment');
var payload = JSON.stringify({
'assessment_id': assessmentId,
'points': points,
'comments': comments
});
return $.Deferred(function (defer) { return $.Deferred(function (defer) {
$.ajax({ $.ajax({ type: "POST", url: url, data: payload }).done(
url: url, function(data) {
type: "POST", if (data.success) {
dataType: "html", defer.resolveWith(this, [data.rendered_html]);
data: {assessment_id: assessmentId, points: points, comments: comments} }
}).done(function (data) { else {
defer.resolveWith(this, [data]); defer.rejectWith(this, [data.msg]);
}
}).fail(function (data) { }
defer.rejectWith(this, [gettext('This section could not be loaded.')]); ).fail(function(data) {
defer.rejectWith(this, [gettext('The staff overridden could not be submitted.')]);
}); });
}).promise(); }).promise();
}, },
......
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