Commit 9700a80e by muzaffaryousaf

Refactoring the Staff override functionality.

TNL-898
parent 218601e2
......@@ -83,14 +83,14 @@
<form id="openassessment_staff_regrade_form" data-assessment-id="{{ assessment.id }}">
<ul>
<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>
<input id="openassessment__staff-info__regrade_points" type="number"
maxlength="3" min="0" max="100">
</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>
<textarea
......@@ -107,6 +107,7 @@
<span
class="copy">{% trans "Save" %}</span>
</a>
<div class="override-grade-error"></div>
</li>
</ul>
</form>
......
......@@ -487,6 +487,27 @@ class OpenAssessmentBlock(
context = Context(context_dict)
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):
"""
Serialize the XBlock to XML for exporting.
......
......@@ -5,6 +5,8 @@ determine the flow of the problem.
import copy
from functools import wraps
import logging
from django.template import Context
from django.template.loader import get_template
from xblock.core import XBlock
from openassessment.assessment.errors import PeerAssessmentInternalError, PeerAssessmentRequestError
......@@ -281,26 +283,27 @@ class StaffInfoMixin(object):
path = 'openassessmentblock/staff_debug/student_info.html'
return path, context
@XBlock.handler
@XBlock.json_handler
@require_course_staff("STAFF_INFO")
def staff_override_assessment(self, data, suffix=''):
assessment_id = data.params.get('assessment_id', '')
points = data.params.get('points', None)
comments = data.params.get('comments', '')
assessment_id = data.get('assessment_id', '')
points = data.get('points', '')
comments = data.get('comments', '')
if points is None:
return self.render_error(self._(u'"override_assessment" required new grade value.'))
if points in ['', None]:
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:
overridden_assessment = peer_api.create_overridden_assessment(assessment_id=assessment_id, points=points, comments=comments,
scorer_id=self.get_student_item_dict()["student_id"])
path='openassessmentblock/staff_debug/staff_regrade_info.html'
context = {
path = 'openassessmentblock/staff_debug/staff_regrade_info.html'
context_dict = {
'overridden_points': overridden_assessment.points,
'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:
msg = ex.message
......
......@@ -90,13 +90,12 @@ OpenAssessment.StaffInfoView.prototype = {
this.server.assessmentOverride(assessmentId, points, comments).done(
function(html) {
// Load the HTML and install event handlers
if (html) {
}
$('.override-grade-error').html('');
$('#openassessment__staff-info__regrade-info', view.element).html(html);
}
).fail(function(errMsg) {
view.showLoadError('student_info');
$('.override-grade-error').html(errMsg);
});
},
......
......@@ -142,17 +142,23 @@ if (typeof OpenAssessment.Server == "undefined" || !OpenAssessment.Server) {
         **/
assessmentOverride: function (assessmentId, points, comments) {
var url = this.url('staff_override_assessment');
var payload = JSON.stringify({
'assessment_id': assessmentId,
'points': points,
'comments': comments
});
return $.Deferred(function (defer) {
$.ajax({
url: url,
type: "POST",
dataType: "html",
data: {assessment_id: assessmentId, points: points, comments: comments}
}).done(function (data) {
defer.resolveWith(this, [data]);
}).fail(function (data) {
defer.rejectWith(this, [gettext('This section could not be loaded.')]);
$.ajax({ type: "POST", url: url, data: payload }).done(
function(data) {
if (data.success) {
defer.resolveWith(this, [data.rendered_html]);
}
else {
defer.rejectWith(this, [data.msg]);
}
}
).fail(function(data) {
defer.rejectWith(this, [gettext('The staff overridden could not be submitted.')]);
});
}).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