From adcbfbb6035e748cf4b0cecaaf2e4fee3d563113 Mon Sep 17 00:00:00 2001 From: Vik Paruchuri Date: Tue, 8 Jan 2013 18:00:46 -0500 Subject: [PATCH] Fix reset --- .../xmodule/combined_open_ended_module.py | 55 ++++++++++--------- .../js/src/combinedopenended/display.coffee | 3 +- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/common/lib/xmodule/xmodule/combined_open_ended_module.py b/common/lib/xmodule/xmodule/combined_open_ended_module.py index f9c610d51a..3c756f6834 100644 --- a/common/lib/xmodule/xmodule/combined_open_ended_module.py +++ b/common/lib/xmodule/xmodule/combined_open_ended_module.py @@ -142,6 +142,12 @@ class CombinedOpenEndedModule(XModule): current_task_state=self.task_states[self.current_task_number] self.current_task_xml=self.task_xml[self.current_task_number] + + if self.current_task_number>0: + self.allow_reset=self.check_allow_reset() + if self.allow_reset: + self.current_task_number=self.current_task_number-1 + current_task_type=self.get_tag_name(self.current_task_xml) children=self.child_modules() @@ -149,11 +155,6 @@ class CombinedOpenEndedModule(XModule): self.current_task_descriptor=children['descriptors'][current_task_type](self.system) etree_xml=etree.fromstring(self.current_task_xml) - if self.current_task_number>0: - self.allow_reset=self.check_allow_reset() - if self.allow_reset: - return False - self.current_task_parsed_xml=self.current_task_descriptor.definition_from_xml(etree_xml,self.system) if current_task_state is None and self.current_task_number==0: self.current_task=children['modules'][current_task_type](self.system, self.location, self.current_task_parsed_xml, self.current_task_descriptor, self.static_data) @@ -175,13 +176,14 @@ class CombinedOpenEndedModule(XModule): return True def check_allow_reset(self): - if self.current_task_number>0: - last_response_data=self.get_last_response(self.current_task_number-1) - current_response_data=self.get_current_attributes(self.current_task_number) + if not self.allow_reset: + if self.current_task_number>0: + last_response_data=self.get_last_response(self.current_task_number-1) + current_response_data=self.get_current_attributes(self.current_task_number) - if current_response_data['min_score_to_attempt']>last_response_data['score'] or current_response_data['max_score_to_attempt']last_response_data['score'] or current_response_data['max_score_to_attempt']=(len(self.task_xml)): - self.state=self.DONE - self.current_task_number=len(self.task_xml)-1 - else: - self.state=self.INITIAL - changed=True - self.setup_next_task() + if not self.allow_reset: + self.task_states[self.current_task_number] = self.current_task.get_instance_state() + current_task_state=json.loads(self.task_states[self.current_task_number]) + if current_task_state['state']==self.DONE: + self.current_task_number+=1 + if self.current_task_number>=(len(self.task_xml)): + self.state=self.DONE + self.current_task_number=len(self.task_xml)-1 + else: + self.state=self.INITIAL + changed=True + self.setup_next_task() return changed def update_task_states_ajax(self,return_html): @@ -335,7 +336,8 @@ class CombinedOpenEndedModule(XModule): (error only present if not success) """ if self.state != self.DONE: - return self.out_of_sync_error(get) + if not self.allow_reset: + return self.out_of_sync_error(get) if self.attempts > self.max_attempts: return { @@ -350,6 +352,7 @@ class CombinedOpenEndedModule(XModule): self.current_task.reset(self.system) self.task_states[self.current_task_number]=self.current_task.get_instance_state() self.current_task_number=0 + self.allow_reset=False self.setup_next_task() return {'success': True, 'html' : self.get_html_nonsystem()} diff --git a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee index 3929ebe78a..a7e01e8a9b 100644 --- a/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/combinedopenended/display.coffee @@ -187,7 +187,7 @@ class @CombinedOpenEnded reset: (event) => event.preventDefault() - if @child_state == 'done' + if @child_state == 'done' or @allow_reset=="True" $.postWithPrefix "#{@ajax_url}/reset", {}, (response) => if response.success @answer_area.val('') @@ -196,6 +196,7 @@ class @CombinedOpenEnded @message_wrapper.html('') @child_state = 'initial' @combined_open_ended.after(response.html).remove() + @allow_reset="False" @reinitialize(@element) @rebind() @reset_button.hide()