Commit b13f9479 by Vik Paruchuri

Add in allow reset action

parent 1ae94ce6
...@@ -88,6 +88,7 @@ class CombinedOpenEndedModule(XModule): ...@@ -88,6 +88,7 @@ class CombinedOpenEndedModule(XModule):
self.state = instance_state.get('state', 'initial') self.state = instance_state.get('state', 'initial')
self.attempts = instance_state.get('attempts', 0) self.attempts = instance_state.get('attempts', 0)
self.allow_reset = instance_state.get('ready_to_reset', False)
self.max_attempts = int(self.metadata.get('attempts', MAX_ATTEMPTS)) self.max_attempts = int(self.metadata.get('attempts', MAX_ATTEMPTS))
# Used for progress / grading. Currently get credit just for # Used for progress / grading. Currently get credit just for
...@@ -149,8 +150,8 @@ class CombinedOpenEndedModule(XModule): ...@@ -149,8 +150,8 @@ class CombinedOpenEndedModule(XModule):
etree_xml=etree.fromstring(self.current_task_xml) etree_xml=etree.fromstring(self.current_task_xml)
if self.current_task_number>0: if self.current_task_number>0:
allow_reset=self.check_allow_reset() self.allow_reset=self.check_allow_reset()
if allow_reset: if self.allow_reset:
return False return False
self.current_task_parsed_xml=self.current_task_descriptor.definition_from_xml(etree_xml,self.system) self.current_task_parsed_xml=self.current_task_descriptor.definition_from_xml(etree_xml,self.system)
...@@ -174,15 +175,15 @@ class CombinedOpenEndedModule(XModule): ...@@ -174,15 +175,15 @@ class CombinedOpenEndedModule(XModule):
return True return True
def check_allow_reset(self): def check_allow_reset(self):
allow_reset=False
if self.current_task_number>0: if self.current_task_number>0:
last_response_data=self.get_last_response(self.current_task_number-1) last_response_data=self.get_last_response(self.current_task_number-1)
current_response_data=self.get_last_response(self.current_task_number) 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']: if current_response_data['min_score_to_attempt']>last_response_data['score'] or current_response_data['max_score_to_attempt']<last_response_data['score']:
allow_reset=True self.state=self.DONE
self.allow_reset=True
return allow_rest return self.allow_reset
def get_context(self): def get_context(self):
task_html=self.get_html_base() task_html=self.get_html_base()
...@@ -191,7 +192,7 @@ class CombinedOpenEndedModule(XModule): ...@@ -191,7 +192,7 @@ class CombinedOpenEndedModule(XModule):
context = { context = {
'items': [{'content' : task_html}], 'items': [{'content' : task_html}],
'ajax_url': self.system.ajax_url, 'ajax_url': self.system.ajax_url,
'allow_reset': self.check_allow_reset(), 'allow_reset': self.allow_reset,
'state' : self.state, 'state' : self.state,
'task_count' : len(self.task_xml), 'task_count' : len(self.task_xml),
'task_number' : self.current_task_number+1, 'task_number' : self.current_task_number+1,
...@@ -216,21 +217,26 @@ class CombinedOpenEndedModule(XModule): ...@@ -216,21 +217,26 @@ class CombinedOpenEndedModule(XModule):
return_html = rewrite_links(html, self.rewrite_content_links) return_html = rewrite_links(html, self.rewrite_content_links)
return return_html return return_html
def get_current_attributes(self, task_number):
task_xml=self.task_xml[task_number]
etree_xml=etree.fromstring(task_xml)
min_score_to_attempt=int(etree_xml.attrib.get('min_score_to_attempt',0))
max_score_to_attempt=int(etree_xml.attrib.get('max_score_to_attempt',self._max_score))
return {'min_score_to_attempt' : min_score_to_attempt, 'max_score_to_attempt' : max_score_to_attempt}
def get_last_response(self, task_number): def get_last_response(self, task_number):
last_response="" last_response=""
task_state = self.task_states[task_number] task_state = self.task_states[task_number]
task_xml=self.task_xml[task_number] task_xml=self.task_xml[task_number]
task_type=self.get_tag_name(task_xml) task_type=self.get_tag_name(task_xml)
children=self.child_modules() children=self.child_modules()
task_descriptor=children['descriptors'][task_type](self.system) task_descriptor=children['descriptors'][task_type](self.system)
etree_xml=etree.fromstring(task_xml) etree_xml=etree.fromstring(task_xml)
min_score_to_attempt=int(etree_xml.attrib.get('min_score_to_attempt',0)) min_score_to_attempt=int(etree_xml.attrib.get('min_score_to_attempt',0))
max_score_to_attempt=int(etree_xml.attrib.get('min_score_to_attempt',self._max_score)) max_score_to_attempt=int(etree_xml.attrib.get('max_score_to_attempt',self._max_score))
task_parsed_xml=task_descriptor.definition_from_xml(etree_xml,self.system) task_parsed_xml=task_descriptor.definition_from_xml(etree_xml,self.system)
task=children['modules'][task_type](self.system, self.location, task_parsed_xml, task_descriptor, self.static_data, instance_state=task_state) task=children['modules'][task_type](self.system, self.location, task_parsed_xml, task_descriptor, self.static_data, instance_state=task_state)
...@@ -262,9 +268,12 @@ class CombinedOpenEndedModule(XModule): ...@@ -262,9 +268,12 @@ class CombinedOpenEndedModule(XModule):
def update_task_states(self): def update_task_states(self):
changed=False changed=False
self.task_states[self.current_task_number] = self.current_task.get_instance_state() local_task_number=self.current_task_number
current_task_state=json.loads(self.task_states[self.current_task_number]) if self.allow_reset:
if current_task_state['state']==self.DONE: local_task_number=local_task_number-1
self.task_states[local_task_number] = self.current_task.get_instance_state()
current_task_state=json.loads(self.task_states[local_task_number])
if current_task_state['state']==self.DONE and not self.allow_reset:
self.current_task_number+=1 self.current_task_number+=1
if self.current_task_number>=(len(self.task_xml)): if self.current_task_number>=(len(self.task_xml)):
self.state=self.DONE self.state=self.DONE
...@@ -334,6 +343,7 @@ class CombinedOpenEndedModule(XModule): ...@@ -334,6 +343,7 @@ class CombinedOpenEndedModule(XModule):
'error': 'Too many attempts.' 'error': 'Too many attempts.'
} }
self.state=self.INITIAL self.state=self.INITIAL
self.allow_reset=False
for i in xrange(0,len(self.task_xml)): for i in xrange(0,len(self.task_xml)):
self.current_task_number=i self.current_task_number=i
self.setup_next_task(reset=True) self.setup_next_task(reset=True)
...@@ -354,6 +364,7 @@ class CombinedOpenEndedModule(XModule): ...@@ -354,6 +364,7 @@ class CombinedOpenEndedModule(XModule):
'state': self.state, 'state': self.state,
'task_states': self.task_states, 'task_states': self.task_states,
'attempts': self.attempts, 'attempts': self.attempts,
'ready_to_reset' : self.allow_reset,
} }
return json.dumps(state) return json.dumps(state)
......
...@@ -79,7 +79,7 @@ class @CombinedOpenEnded ...@@ -79,7 +79,7 @@ class @CombinedOpenEnded
if @child_type=="openended" if @child_type=="openended"
@skip_button.hide() @skip_button.hide()
if @allow_reset if @allow_reset=="True"
@reset_button.show() @reset_button.show()
@submit_button.hide() @submit_button.hide()
@answer_area.attr("disabled", true) @answer_area.attr("disabled", true)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment