From 5da5d556303f4d6fa86eedd5b11aa46431e00e75 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Fri, 2 Aug 2013 13:41:37 -0400 Subject: [PATCH 1/3] Fix peer grading feedback issue --- .../xmodule/js/src/peergrading/peer_grading_problem.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee index 050d525a13..47b2652020 100644 --- a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee +++ b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee @@ -482,7 +482,7 @@ class @PeerGradingProblem if response.actual_rubric != undefined calibration_wrapper.append("
Instructor Scored Rubric: #{response.actual_rubric}
") - if response.actual_feedback!=undefined + if response.actual_feedback.feedback!=undefined calibration_wrapper.append("
Instructor Feedback: #{response.actual_feedback}
") # disable score selection and submission from the grading interface From aa09006247210f73ea112e04861aca82cc5e9d6e Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Fri, 2 Aug 2013 13:53:07 -0400 Subject: [PATCH 2/3] Hide and show multiple rubrics --- .../js/src/combinedopenended/display.coffee | 4 +++ .../combined_open_ended_modulev1.py | 30 +++++++++---------- .../combined_open_ended_results.html | 4 +-- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index b539c72554..0db6521d27 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -569,6 +569,10 @@ class @CombinedOpenEnded @question_header.text(new_text) return false + hide_rubrics: () => + @$(combined_rubric_sel + ' > [data-status="hidden"]').hide() + @$(combined_rubric_sel + ' > [data-status="shown"]').show() + prompt_show: () => if @prompt_container.is(":hidden")==true @prompt_container.slideToggle() 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 ae3d01c686..ad9d7a287f 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 @@ -506,22 +506,20 @@ class CombinedOpenEndedV1Module(): for i in xrange(0, loop_up_to_task): response = self.get_last_response(i) rubric_scores = None - if len(response['rubric_scores']) > 0 and response['grader_types'][0] in HUMAN_GRADER_TYPE.keys(): - rubric_scores = [response['rubric_scores']] - grader_types = None - if len(response['grader_types']) > 0 and response['grader_types'][0] in HUMAN_GRADER_TYPE.keys(): - grader_types = [response['grader_types']] - feedback_items = None - if len(response['feedback_items']) > 0 and response['grader_types'][0] in HUMAN_GRADER_TYPE.keys(): - feedback_items = [response['feedback_items']] - if feedback_items is not None and grader_types is not None and rubric_scores is not None: - rubric_html = self.rubric_renderer.render_combined_rubric(stringify_children(self.static_data['rubric']), - rubric_scores, - grader_types, feedback_items) - contexts.append({ - 'result': rubric_html, - 'task_name': 'Scored rubric' - }) + score_length = len(response['grader_types']) + log.info(response) + for z in xrange(0,score_length): + if response['grader_types'][z] in HUMAN_GRADER_TYPE.keys(): + rubric_scores = [[response['rubric_scores'][z]]] + grader_types = [[response['grader_types'][z]]] + feedback_items = [[response['feedback_items'][z]]] + rubric_html = self.rubric_renderer.render_combined_rubric(stringify_children(self.static_data['rubric']), + rubric_scores, + grader_types, feedback_items) + contexts.append({ + 'result': rubric_html, + 'task_name': 'Scored rubric' + }) context = { 'results': contexts, diff --git a/lms/templates/combinedopenended/combined_open_ended_results.html b/lms/templates/combinedopenended/combined_open_ended_results.html index 84f186fbb6..24934be3d2 100644 --- a/lms/templates/combinedopenended/combined_open_ended_results.html +++ b/lms/templates/combinedopenended/combined_open_ended_results.html @@ -2,9 +2,9 @@ % if 'task_name' in result and 'result' in result:
0: - status="shown"> + data-status="shown" data-number="${i}"> % else: - status="hidden"> + data-status="hidden" data-number="${i}"> % endif

${result['task_name']} from grader ${i+1} (Hide)

${result['result'] | n} From ea2b9191c14b39f521d40fbfb33dc98ed2c26437 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Fri, 2 Aug 2013 15:30:17 -0400 Subject: [PATCH 3/3] Allow student to switch between rubrics, tell user once peer grading required amount is done --- .../js/src/combinedopenended/display.coffee | 37 ++++++++++++++++++- .../peergrading/peer_grading_problem.coffee | 6 ++- .../xmodule/xmodule/peer_grading_module.py | 5 +++ .../combined_open_ended_results.html | 4 +- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index 0db6521d27..8aa1af96f6 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -114,6 +114,8 @@ class @CombinedOpenEnded grader_status_sel: '.grader-status' info_rubric_elements_sel: '.rubric-elements-info' rubric_collapse_sel: '.rubric-collapse' + next_rubric_sel: '.rubric-next-button' + previous_rubric_sel: '.rubric-previous-button' constructor: (el) -> @el=el @@ -240,6 +242,9 @@ class @CombinedOpenEnded @toggle_rubric("") @rubric_collapse = @$(@rubric_collapse_sel) @rubric_collapse.click @toggle_rubric + @hide_rubrics() + @$(@previous_rubric_sel).click @previous_rubric + @$(@next_rubric_sel).click @next_rubric show_status_current: () => data = {} @@ -570,8 +575,36 @@ class @CombinedOpenEnded return false hide_rubrics: () => - @$(combined_rubric_sel + ' > [data-status="hidden"]').hide() - @$(combined_rubric_sel + ' > [data-status="shown"]').show() + rubrics = @$(@combined_rubric_sel) + for rub in rubrics + if @$(rub).data('status')=="shown" + @$(rub).show() + else + @$(rub).hide() + + next_rubric: => + @shift_rubric(1) + return false + + previous_rubric: => + @shift_rubric(-1) + return false + + shift_rubric: (i) => + rubrics = @$(@combined_rubric_sel) + number = 0 + for rub in rubrics + if @$(rub).data('status')=="shown" + number = @$(rub).data('number') + @$(rub).data('status','hidden') + if i==1 and number < rubrics.length - 1 + number = number + i + + if i==-1 and number>0 + number = number + i + + @$(rubrics[number]).data('status', 'shown') + @hide_rubrics() prompt_show: () => if @prompt_container.is(":hidden")==true diff --git a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee index 47b2652020..c02fa3f390 100644 --- a/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee +++ b/common/lib/xmodule/xmodule/js/src/peergrading/peer_grading_problem.coffee @@ -344,7 +344,11 @@ class @PeerGradingProblem if response.success @is_calibrated_check() @grading_message.fadeIn() - @grading_message.html("

Successfully saved your feedback. Fetched the next essay.

") + message = "

Successfully saved your feedback. Fetched the next essay." + if response.required_done + message = message + " You have completed the required number of gradings." + message = message + "

" + @grading_message.html(message) else if response.error @render_error(response.error) diff --git a/common/lib/xmodule/xmodule/peer_grading_module.py b/common/lib/xmodule/xmodule/peer_grading_module.py index 44114136aa..b21e4865ec 100644 --- a/common/lib/xmodule/xmodule/peer_grading_module.py +++ b/common/lib/xmodule/xmodule/peer_grading_module.py @@ -327,6 +327,11 @@ class PeerGradingModule(PeerGradingFields, XModule): try: response = self.peer_gs.save_grade(location, grader_id, submission_id, score, feedback, submission_key, rubric_scores, submission_flagged, answer_unknown) + + success, location_data = self.query_data_for_location() + response.update({'required_done' : False}) + if 'count_graded' in location_data and 'count_required' in location_data: + response['required_done'] = True return response except GradingServiceError: # This is a dev_facing_error diff --git a/lms/templates/combinedopenended/combined_open_ended_results.html b/lms/templates/combinedopenended/combined_open_ended_results.html index 24934be3d2..71dbea4ec5 100644 --- a/lms/templates/combinedopenended/combined_open_ended_results.html +++ b/lms/templates/combinedopenended/combined_open_ended_results.html @@ -2,9 +2,9 @@ % if 'task_name' in result and 'result' in result:
0: - data-status="shown" data-number="${i}"> - % else: data-status="hidden" data-number="${i}"> + % else: + data-status="shown" data-number="${i}"> % endif

${result['task_name']} from grader ${i+1} (Hide)

${result['result'] | n}