From 45d94c17f7d024c4717a2e593b2979d96be91037 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Thu, 8 Aug 2013 12:46:43 -0400 Subject: [PATCH] Add in next button, get rid of error with deleted peer grading module --- .../js/src/combinedopenended/display.coffee | 4 +- .../combined_open_ended_modulev1.py | 40 +++++++++++++++++++ .../open_ended_module.py | 13 ++---- .../openendedchild.py | 32 --------------- .../xmodule/xmodule/peer_grading_module.py | 9 ++++- 5 files changed, 53 insertions(+), 45 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index 68c1f17ef6..b67b6dca93 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -297,8 +297,8 @@ class @CombinedOpenEnded @submit_button.unbind('click') @submit_button.show() @reset_button.hide() - @next_problem_button.hide() @hide_file_upload() + @next_problem_button.hide() @hint_area.attr('disabled', false) if @task_number>1 or @child_state!='initial' @show_status_current() @@ -353,7 +353,7 @@ class @CombinedOpenEnded if @child_type=="openended" @skip_button.hide() if @task_number<@task_count - @next_problem() + @next_problem_button.show() else if @task_number==1 and @task_count==1 @show_combined_rubric_current() diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/combined_open_ended_modulev1.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/combined_open_ended_modulev1.py index ad9d7a287f..eee2e93312 100644 --- a/common/lib/xmodule/xmodule/open_ended_grading_classes/combined_open_ended_modulev1.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/combined_open_ended_modulev1.py @@ -9,6 +9,7 @@ import self_assessment_module import open_ended_module from functools import partial from .combined_open_ended_rubric import CombinedOpenEndedRubric, GRADER_TYPE_IMAGE_DICT, HUMAN_GRADER_TYPE, LEGEND_LIST +from peer_grading_service import PeerGradingService, MockPeerGradingService log = logging.getLogger("mitx.courseware") @@ -116,6 +117,11 @@ class CombinedOpenEndedV1Module(): self.accept_file_upload = instance_state.get('accept_file_upload', ACCEPT_FILE_UPLOAD) in TRUE_DICT self.skip_basic_checks = instance_state.get('skip_spelling_checks', SKIP_BASIC_CHECKS) in TRUE_DICT + if system.open_ended_grading_interface: + self.peer_gs = PeerGradingService(system.open_ended_grading_interface, system) + else: + self.peer_gs = MockPeerGradingService() + due_date = instance_state.get('due', None) grace_period_string = instance_state.get('graceperiod', None) @@ -147,6 +153,8 @@ class CombinedOpenEndedV1Module(): self.location = location self.setup_next_task() + + def get_tag_name(self, xml): """ Gets the tag name of a given xml block. @@ -494,6 +502,34 @@ class CombinedOpenEndedV1Module(): pass return return_html + def check_if_student_has_done_needed_grading(self): + student_id = self.system.anonymous_student_id + success = False + allowed_to_submit = True + error_string = ("You need to peer grade {0} more in order to make another submission. " + "You have graded {1}, and {2} are required. You have made {3} successful peer grading submissions.") + try: + response = self.peer_gs.get_data_for_location(self.location, student_id) + count_graded = response['count_graded'] + count_required = response['count_required'] + student_sub_count = response['student_sub_count'] + success = True + except: + # This is a dev_facing_error + log.error("Could not contact external open ended graders for location {0} and student {1}".format( + self.location, student_id)) + # This is a student_facing_error + error_message = "Could not contact the graders. Please notify course staff." + return success, allowed_to_submit, error_message + if count_graded >= count_required: + return success, allowed_to_submit, "" + else: + allowed_to_submit = False + # This is a student_facing_error + error_message = error_string.format(count_required - count_graded, count_graded, count_required, + student_sub_count) + return success, allowed_to_submit, error_message + def get_rubric(self, _data): """ Gets the results of a given grader via ajax. @@ -501,6 +537,7 @@ class CombinedOpenEndedV1Module(): Output: Dictionary to be rendered via ajax that contains the result html. """ all_responses = [] + loop_up_to_task = self.current_task_number + 1 contexts = [] for i in xrange(0, loop_up_to_task): @@ -546,6 +583,9 @@ class CombinedOpenEndedV1Module(): Output: Dictionary to be rendered via ajax that contains the result html. """ self.update_task_states() + success, can_see_rubric, error = self.check_if_student_has_done_needed_grading() + if not can_see_rubric: + return {'html' : error, 'success' : False} loop_up_to_task = self.current_task_number + 1 all_responses = [] for i in xrange(0, loop_up_to_task): diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/open_ended_module.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/open_ended_module.py index bd873cb5ae..ec3bebac7f 100644 --- a/common/lib/xmodule/xmodule/open_ended_grading_classes/open_ended_module.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/open_ended_module.py @@ -650,15 +650,10 @@ class OpenEndedModule(openendedchild.OpenEndedChild): # add new history element with answer and empty score and hint. success, data = self.append_image_to_student_answer(data) if success: - success, allowed_to_submit, error_message = self.check_if_student_can_submit() - if allowed_to_submit: - data['student_answer'] = OpenEndedModule.sanitize_html(data['student_answer']) - self.new_history_entry(data['student_answer']) - self.send_to_grader(data['student_answer'], system) - self.change_state(self.ASSESSING) - else: - # Error message already defined - success = False + data['student_answer'] = OpenEndedModule.sanitize_html(data['student_answer']) + self.new_history_entry(data['student_answer']) + self.send_to_grader(data['student_answer'], system) + self.change_state(self.ASSESSING) else: # This is a student_facing_error error_message = "There was a problem saving the image in your submission. Please try a different image, or try pasting a link to an image into the answer box." diff --git a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py index 555505d611..71b48aed54 100644 --- a/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py +++ b/common/lib/xmodule/xmodule/open_ended_grading_classes/openendedchild.py @@ -433,38 +433,6 @@ class OpenEndedChild(object): return success, string - def check_if_student_can_submit(self): - location = self.location_string - - student_id = self.system.anonymous_student_id - success = False - allowed_to_submit = True - response = {} - # This is a student_facing_error - error_string = ("You need to peer grade {0} more in order to make another submission. " - "You have graded {1}, and {2} are required. You have made {3} successful peer grading submissions.") - try: - response = self.peer_gs.get_data_for_location(self.location_string, student_id) - count_graded = response['count_graded'] - count_required = response['count_required'] - student_sub_count = response['student_sub_count'] - success = True - except: - # This is a dev_facing_error - log.error("Could not contact external open ended graders for location {0} and student {1}".format( - self.location_string, student_id)) - # This is a student_facing_error - error_message = "Could not contact the graders. Please notify course staff." - return success, allowed_to_submit, error_message - if count_graded >= count_required: - return success, allowed_to_submit, "" - else: - allowed_to_submit = False - # This is a student_facing_error - error_message = error_string.format(count_required - count_graded, count_graded, count_required, - student_sub_count) - return success, allowed_to_submit, error_message - def get_eta(self): if self.controller_qs: response = self.controller_qs.check_for_eta(self.location_string) diff --git a/common/lib/xmodule/xmodule/peer_grading_module.py b/common/lib/xmodule/xmodule/peer_grading_module.py index b21e4865ec..059b66b615 100644 --- a/common/lib/xmodule/xmodule/peer_grading_module.py +++ b/common/lib/xmodule/xmodule/peer_grading_module.py @@ -535,9 +535,13 @@ class PeerGradingModule(PeerGradingFields, XModule): log.error("Problem {0} does not exist in this course".format(location)) raise + good_problem_list = [] for problem in problem_list: problem_location = problem['location'] - descriptor = _find_corresponding_module_for_location(problem_location) + try: + descriptor = _find_corresponding_module_for_location(problem_location) + except: + continue if descriptor: problem['due'] = descriptor._model_data.get('due', None) grace_period_string = descriptor._model_data.get('graceperiod', None) @@ -554,13 +558,14 @@ class PeerGradingModule(PeerGradingFields, XModule): # if we can't find the due date, assume that it doesn't have one problem['due'] = None problem['closed'] = False + good_problem_list.append(problem) ajax_url = self.ajax_url html = self.system.render_template('peer_grading/peer_grading.html', { 'course_id': self.system.course_id, 'ajax_url': ajax_url, 'success': success, - 'problem_list': problem_list, + 'problem_list': good_problem_list, 'error_text': error_text, # Checked above 'staff_access': False,