diff --git a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading.coffee b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading.coffee index ed79ba9c71..a82353b7ef 100644 --- a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading.coffee +++ b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading.coffee @@ -9,7 +9,7 @@ class PeerGrading @message_container = $('.message-container') @message_container.toggle(not @message_container.is(':empty')) - + @problem_list = $('.problem-list') @construct_progress_bar() diff --git a/common/lib/xmodule/xmodule/peer_grading_module.py b/common/lib/xmodule/xmodule/peer_grading_module.py index 8002a8d923..f6e5af6752 100644 --- a/common/lib/xmodule/xmodule/peer_grading_module.py +++ b/common/lib/xmodule/xmodule/peer_grading_module.py @@ -38,14 +38,15 @@ import sys from pkg_resources import resource_string from .capa_module import only_one, ComplexEncoder -from peer_grading_service import peer_grading_service +from peer_grading_service import peer_grading_service, GradingServiceError log = logging.getLogger(__name__) class PeerGradingModule(XModule): _VERSION = 1 - js = {'coffee': [resource_string(__name__, 'js/src/combinedopenended/display.coffee'), + js = {'coffee': [resource_string(__name__, 'js/src/peergrading/peer_grading.coffee'), + resource_string(__name__, 'js/src/peergrading/peer_grading_problem.coffee'), resource_string(__name__, 'js/src/collapsible.coffee'), resource_string(__name__, 'js/src/javascript_loader.coffee'), ]} @@ -66,6 +67,7 @@ class PeerGradingModule(XModule): #We need to set the location here so the child modules can use it system.set('location', location) + self.system = system self.peer_gs = peer_grading_service() log.debug(self.system) @@ -104,20 +106,22 @@ class PeerGradingModule(XModule): 'is_student_calibrated': self.is_student_calibrated, 'save_grade': self.save_grade, 'save_calibration_essay' : self.save_calibration_essay, + 'show_problem' : self.peer_grading_problem, } if dispatch not in handlers: return 'Error' - before = self.get_progress() d = handlers[dispatch](get) - after = self.get_progress() - d.update({ - 'progress_changed': after != before, - 'progress_status': Progress.to_js_status_str(after), - }) + return json.dumps(d, cls=ComplexEncoder) + def get_progress(self): + pass + + def get_score(self): + pass + def get_next_submission(self, get): """ Makes a call to the grading controller for the next essay that should be graded @@ -146,12 +150,12 @@ class PeerGradingModule(XModule): location = p['location'] try: - response = peer_grading_service().get_next_submission(location, grader_id) + response = self.peer_gs.get_next_submission(location, grader_id) return HttpResponse(response, mimetype="application/json") except GradingServiceError: log.exception("Error getting next submission. server url: {0} location: {1}, grader_id: {2}" - .format(peer_grading_service().url, location, grader_id)) + .format(self.peer_gs.url, location, grader_id)) return json.dumps({'success': False, 'error': 'Could not connect to grading service'}) @@ -185,20 +189,18 @@ class PeerGradingModule(XModule): rubric_scores = p.getlist('rubric_scores[]') submission_flagged = p['submission_flagged'] try: - response = peer_grading_service().save_grade(location, grader_id, submission_id, + response = self.peer_gs.save_grade(location, grader_id, submission_id, score, feedback, submission_key, rubric_scores, submission_flagged) return HttpResponse(response, mimetype="application/json") except GradingServiceError: log.exception("""Error saving grade. server url: {0}, location: {1}, submission_id:{2}, submission_key: {3}, score: {4}""" - .format(peer_grading_service().url, + .format(self.peer_gs.url, location, submission_id, submission_key, score) ) return json.dumps({'success': False, 'error': 'Could not connect to grading service'}) - - def is_student_calibrated(self, get): """ Calls the grading controller to see if the given student is calibrated @@ -226,16 +228,14 @@ class PeerGradingModule(XModule): location = p['location'] try: - response = peer_grading_service().is_student_calibrated(location, grader_id) + response = self.peer_gs.is_student_calibrated(location, grader_id) return HttpResponse(response, mimetype="application/json") except GradingServiceError: log.exception("Error from grading service. server url: {0}, grader_id: {0}, location: {1}" - .format(peer_grading_service().url, grader_id, location)) + .format(self.peer_gs.url, grader_id, location)) return json.dumps({'success': False, 'error': 'Could not connect to grading service'}) - - def show_calibration_essay(self, get): """ Fetch the next calibration essay from the grading controller and return it @@ -270,11 +270,11 @@ class PeerGradingModule(XModule): p = request.POST location = p['location'] try: - response = peer_grading_service().show_calibration_essay(location, grader_id) + response = self.peer_gs.show_calibration_essay(location, grader_id) return HttpResponse(response, mimetype="application/json") except GradingServiceError: log.exception("Error from grading service. server url: {0}, location: {0}" - .format(peer_grading_service().url, location)) + .format(self.peer_gs.url, location)) return json.dumps({'success': False, 'error': 'Could not connect to grading service'}) # if we can't parse the rubric into HTML, @@ -318,13 +318,14 @@ class PeerGradingModule(XModule): rubric_scores = p.getlist('rubric_scores[]') try: - response = peer_grading_service().save_calibration_essay(location, grader_id, calibration_essay_id, + response = self.peer_gs.save_calibration_essay(location, grader_id, calibration_essay_id, submission_key, score, feedback, rubric_scores) return HttpResponse(response, mimetype="application/json") except GradingServiceError: log.exception("Error saving calibration grade, location: {0}, submission_id: {1}, submission_key: {2}, grader_id: {3}".format(location, submission_id, submission_key, grader_id)) return _err_response('Could not connect to grading service') - def peer_grading(self, request, course_id): + + def peer_grading(self, get = None): ''' Show a peer grading interface ''' @@ -334,7 +335,7 @@ class PeerGradingModule(XModule): error_text = "" problem_list = [] try: - problem_list_json = self.peer_gs.get_problem_list(course_id, unique_id_for_user(request.user)) + problem_list_json = self.peer_gs.get_problem_list(course_id, self.system.anonymous_student_id) problem_list_dict = json.loads(problem_list_json) success = problem_list_dict['success'] if 'error' in problem_list_dict: @@ -350,7 +351,7 @@ class PeerGradingModule(XModule): error_text = "Could not get problem list" success = False - ajax_url = _reverse_with_slash('peer_grading', course_id) + ajax_url = self.system.ajax_url return self.system.render_template('peer_grading/peer_grading.html', { 'course': course, @@ -363,16 +364,20 @@ class PeerGradingModule(XModule): 'staff_access': False, }) - def peer_grading_problem(request, course_id): + def peer_grading_problem(self, get = None): ''' Show individual problem interface ''' - course = get_course_with_access(request.user, course_id, 'load') - problem_location = request.GET.get("location") + if get == None: + problem_location = self.system.location + elif get.get('location') is not None: + problem_location = get.get('location') + else: + problem_location = self.system.location - ajax_url = _reverse_with_slash('peer_grading', course_id) + ajax_url = self.system.ajax_url - return render_to_response('peer_grading/peer_grading_problem.html', { + return self.system.render_template('peer_grading/peer_grading_problem.html', { 'view_html': '', 'course': course, 'problem_location': problem_location, diff --git a/common/lib/xmodule/xmodule/peer_grading_service.py b/common/lib/xmodule/xmodule/peer_grading_service.py index e2a5d72b6c..5fc4686533 100644 --- a/common/lib/xmodule/xmodule/peer_grading_service.py +++ b/common/lib/xmodule/xmodule/peer_grading_service.py @@ -25,10 +25,11 @@ from xmodule.course_module import CourseDescriptor from combined_open_ended_rubric import CombinedOpenEndedRubric, RubricParsingError from lxml import etree - - from django.conf import settings +class GradingServiceError(Exception): + pass + class PeerGradingService(): """ Interface with the grading controller for peer grading diff --git a/lms/envs/common.py b/lms/envs/common.py index 426c29c7d0..edbec26933 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -437,7 +437,6 @@ main_vendor_js = [ discussion_js = sorted(rooted_glob(PROJECT_ROOT / 'static', 'coffee/src/discussion/**/*.coffee')) staff_grading_js = sorted(rooted_glob(PROJECT_ROOT / 'static', 'coffee/src/staff_grading/**/*.coffee')) -peer_grading_js = sorted(rooted_glob(PROJECT_ROOT / 'static','coffee/src/peer_grading/**/*.coffee')) open_ended_js = sorted(rooted_glob(PROJECT_ROOT / 'static','coffee/src/open_ended/**/*.coffee')) PIPELINE_CSS = { @@ -469,7 +468,7 @@ PIPELINE_JS = { 'source_filenames': sorted( set(rooted_glob(COMMON_ROOT / 'static', 'coffee/src/**/*.coffee') + rooted_glob(PROJECT_ROOT / 'static', 'coffee/src/**/*.coffee')) - - set(courseware_js + discussion_js + staff_grading_js + peer_grading_js + open_ended_js) + set(courseware_js + discussion_js + staff_grading_js + open_ended_js) ) + [ 'js/form.ext.js', 'js/my_courses_dropdown.js', @@ -499,10 +498,6 @@ PIPELINE_JS = { 'source_filenames': staff_grading_js, 'output_filename': 'js/staff_grading.js' }, - 'peer_grading' : { - 'source_filenames': peer_grading_js, - 'output_filename': 'js/peer_grading.js' - }, 'open_ended' : { 'source_filenames': open_ended_js, 'output_filename': 'js/open_ended.js' diff --git a/lms/templates/peer_grading/peer_grading.html b/lms/templates/peer_grading/peer_grading.html index bd32b33ec2..fff753da41 100644 --- a/lms/templates/peer_grading/peer_grading.html +++ b/lms/templates/peer_grading/peer_grading.html @@ -1,19 +1,3 @@ -<%inherit file="/main.html" /> -<%block name="bodyclass">${course.css_class} -<%namespace name='static' file='/static_content.html'/> - -<%block name="headextra"> - <%static:css group='course'/> - - -<%block name="title">${course.number} Peer Grading - -<%include file="/courseware/course_navigation.html" args="active_page='peer_grading'" /> - -<%block name="js_extra"> - <%static:js group='peer_grading'/> - -
${error_text}
diff --git a/lms/templates/peer_grading/peer_grading_problem.html b/lms/templates/peer_grading/peer_grading_problem.html index 04ee7415ec..f314b9733a 100644 --- a/lms/templates/peer_grading/peer_grading_problem.html +++ b/lms/templates/peer_grading/peer_grading_problem.html @@ -1,21 +1,3 @@ - -<%inherit file="/main.html" /> -<%block name="bodyclass">${course.css_class} -<%namespace name='static' file='/static_content.html'/> - -<%block name="headextra"> - <%static:css group='course'/> - - -<%block name="title">${course.number} Peer Grading. - -<%include file="/courseware/course_navigation.html" args="active_page='peer_grading'" /> - -<%block name="js_extra"> - <%static:js group='peer_grading'/> - - -
diff --git a/lms/urls.py b/lms/urls.py index e4494e0166..6e8d08e256 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -265,23 +265,6 @@ if settings.COURSEWARE_ENABLED: url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/staff_grading/get_problem_list$', 'open_ended_grading.staff_grading_service.get_problem_list', name='staff_grading_get_problem_list'), - - # Peer Grading - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading$', - 'open_ended_grading.views.peer_grading', name='peer_grading'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/problem$', - 'open_ended_grading.views.peer_grading_problem', name='peer_grading_problem'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/get_next_submission$', - 'open_ended_grading.peer_grading_service.get_next_submission', name='peer_grading_get_next_submission'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/show_calibration_essay$', - 'open_ended_grading.peer_grading_service.show_calibration_essay', name='peer_grading_show_calibration_essay'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/is_student_calibrated$', - 'open_ended_grading.peer_grading_service.is_student_calibrated', name='peer_grading_is_student_calibrated'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/save_grade$', - 'open_ended_grading.peer_grading_service.save_grade', name='peer_grading_save_grade'), - url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/peer_grading/save_calibration_essay$', - 'open_ended_grading.peer_grading_service.save_calibration_essay', name='peer_grading_save_calibration_essay'), - # Open Ended problem list url(r'^courses/(?P[^/]+/[^/]+/[^/]+)/open_ended_problems$', 'open_ended_grading.views.student_problem_list', name='open_ended_problems'),