From b0d3bcc5166feced1285826f745e42c8bd5ed871 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Wed, 9 Jan 2013 16:37:15 -0500 Subject: [PATCH] Fix feedback response for peer grading so that students can respond to multiple feedback items --- .../capa/capa/templates/openendedinput.html | 56 ----------------- .../xmodule/combined_open_ended_module.py | 10 ++- .../js/src/combinedopenended/display.coffee | 62 ++++++++++--------- .../lib/xmodule/xmodule/open_ended_module.py | 11 ++-- 4 files changed, 48 insertions(+), 91 deletions(-) delete mode 100644 common/lib/capa/capa/templates/openendedinput.html diff --git a/common/lib/capa/capa/templates/openendedinput.html b/common/lib/capa/capa/templates/openendedinput.html deleted file mode 100644 index c42ad73faf..0000000000 --- a/common/lib/capa/capa/templates/openendedinput.html +++ /dev/null @@ -1,56 +0,0 @@ -
- - -
- % if status == 'unsubmitted': - Unanswered - % elif status == 'correct': - Correct - % elif status == 'incorrect': - Incorrect - % elif status == 'queued': - Submitted for grading - % endif - - % if hidden: -
- % endif -
- - - - % if status == 'queued': - - % endif -
- ${msg|n} - % if status in ['correct','incorrect']: -
-
- Respond to Feedback -
-
-

How accurate do you find this feedback?

-
-
    -
  • -
  • -
  • -
  • -
  • -
-
-

Additional comments:

- -
- -
-
-
- % endif -
-
diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index 42f2393ad9..244346625a 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_module.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_module.py @@ -336,8 +336,14 @@ class CombinedOpenEndedModule(XModule): last_post_assessment = task.latest_post_assessment() last_post_feedback="" if task_type=="openended": - last_post_assessment = task.latest_post_assessment(short_feedback=False) - last_post_evaluation = task.format_feedback_with_evaluation(last_post_assessment) + last_post_assessment = task.latest_post_assessment(short_feedback=False, join_feedback=False) + if isinstance(last_post_assessment,list): + eval_list=[] + for i in xrange(0,len(last_post_assessment)): + eval_list.append(task.format_feedback_with_evaluation(last_post_assessment[i])) + last_post_evaluation="".join(eval_list) + else: + last_post_evaluation = task.format_feedback_with_evaluation(last_post_assessment) last_post_assessment = last_post_evaluation last_correctness = task.is_last_response_correct() max_score = task.max_score() diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index 8a5ef42270..5e2d2db86e 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -69,6 +69,39 @@ class @CombinedOpenEnded else @errors_area.html(response.error) + message_post: (event)=> + Logger.log 'message_post', @answers + external_grader_message=$(event.target).parent().parent().parent() + evaluation_scoring = $(event.target).parent() + + fd = new FormData() + feedback = evaluation_scoring.find('textarea.feedback-on-feedback')[0].value + submission_id = external_grader_message.find('div.submission_id')[0].innerHTML + grader_id = external_grader_message.find('div.grader_id')[0].innerHTML + score = evaluation_scoring.find("input:radio[name='evaluation-score']:checked").val() + + fd.append('feedback', feedback) + fd.append('submission_id', submission_id) + fd.append('grader_id', grader_id) + if(!score) + @gentle_alert "You need to pick a rating before you can submit." + return + else + fd.append('score', score) + + settings = + type: "POST" + data: fd + processData: false + contentType: false + success: (response) => + @gentle_alert response.msg + $('section.evaluation').slideToggle() + @message_wrapper.html(response.message_html) + + $.ajaxWithPrefix("#{@ajax_url}/save_post_assessment", settings) + + rebind: () => # rebind to the appropriate function for the current state @submit_button.unbind('click') @@ -227,35 +260,6 @@ class @CombinedOpenEnded else @errors_area.html('Problem state got out of sync. Try reloading the page.') - message_post: => - Logger.log 'message_post', @answers - - fd = new FormData() - feedback = $('section.evaluation textarea.feedback-on-feedback')[0].value - submission_id = $('div.external-grader-message div.submission_id')[0].innerHTML - grader_id = $('div.external-grader-message div.grader_id')[0].innerHTML - score = $(".evaluation-scoring input:radio[name='evaluation-score']:checked").val() - fd.append('feedback', feedback) - fd.append('submission_id', submission_id) - fd.append('grader_id', grader_id) - if(!score) - @gentle_alert "You need to pick a rating before you can submit." - return - else - fd.append('score', score) - - settings = - type: "POST" - data: fd - processData: false - contentType: false - success: (response) => - @gentle_alert response.msg - $('section.evaluation').slideToggle() - @message_wrapper.html(response.message_html) - - $.ajaxWithPrefix("#{@ajax_url}/save_post_assessment", settings) - gentle_alert: (msg) => if @el.find('.open-ended-alert').length @el.find('.open-ended-alert').remove() diff --git a/common/lib/xmodule/xmodule/open_ended_module.py b/common/lib/xmodule/xmodule/open_ended_module.py index 0420faf534..f715c9d76a 100644 --- a/common/lib/xmodule/xmodule/open_ended_module.py +++ b/common/lib/xmodule/xmodule/open_ended_module.py @@ -391,7 +391,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return feedback_template - def _parse_score_msg(self, score_msg): + def _parse_score_msg(self, score_msg, join_feedback=True): """ Grader reply is a JSON-dump of the following dict { 'correct': True/False, @@ -442,7 +442,10 @@ class OpenEndedModule(openendedchild.OpenEndedChild): 'submission_id' : score_result['submission_id'] } feedback_items.append(self._format_feedback(new_score_result)) - feedback="".join(feedback_items) + if join_feedback: + feedback="".join(feedback_items) + else: + feedback=feedback_items score = int(median(score_result['score'])) else: #This is for instructor and ML grading @@ -454,7 +457,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): return {'valid' : True, 'score' : score, 'feedback' : feedback} - def latest_post_assessment(self, short_feedback=False): + def latest_post_assessment(self, short_feedback=False, join_feedback=True): """ Gets the latest feedback, parses, and returns @param short_feedback: If the long feedback is wanted or not @@ -463,7 +466,7 @@ class OpenEndedModule(openendedchild.OpenEndedChild): if not self.history: return "" - feedback_dict = self._parse_score_msg(self.history[-1].get('post_assessment', "")) + feedback_dict = self._parse_score_msg(self.history[-1].get('post_assessment', ""), join_feedback=join_feedback) if not short_feedback: return feedback_dict['feedback'] if feedback_dict['valid'] else '' if feedback_dict['valid']: