Reveal student input at state of problem reset back to student
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import cgi
|
||||
import datetime
|
||||
import dateutil
|
||||
import dateutil.parser
|
||||
@@ -236,16 +237,33 @@ class CapaModule(XModule):
|
||||
# to avoid bricking of problem as much as possible
|
||||
|
||||
# Presumably, student submission has corrupted LoncapaProblem HTML.
|
||||
# So, let's try generate a fresh LoncapaProblem
|
||||
# First, pull down all student answers
|
||||
student_answers = self.lcp.student_answers
|
||||
answer_ids = student_answers.keys()
|
||||
|
||||
# Some inputtypes, such as dynamath, have additional "hidden" state that
|
||||
# is not exposed to the student. Keep those hidden
|
||||
hidden_state_keywords = ['dynamath']
|
||||
for answer_id in answer_ids:
|
||||
for hidden_state_keyword in hidden_state_keywords:
|
||||
if answer_id.find(hidden_state_keyword) >= 0:
|
||||
student_answers.pop(answer_id)
|
||||
|
||||
# Next, generate a fresh LoncapaProblem
|
||||
self.lcp = LoncapaProblem(self.definition['data'], self.location.html_id(),
|
||||
state=None, # Tabula rasa
|
||||
seed=self.seed, system=self.system)
|
||||
|
||||
# Prepend a scary warning to the student
|
||||
warning = '<div class="capa_reset">'
|
||||
warning += '<p>Problem state was corruped by invalid input. '
|
||||
warning += 'Problem reset to initial state! '
|
||||
warning += 'If problem persists, please contact the course staff.</p>'
|
||||
warning += '<h2>Problem reset to initial state!</h2>'
|
||||
warning += '<p>Problem state was corruped by invalid submission. The submission consisted of:</p>'
|
||||
warning += '<ul>'
|
||||
for student_answer in student_answers.values():
|
||||
if student_answer != '':
|
||||
warning += '<li>' + cgi.escape(student_answer) + '</li>'
|
||||
warning += '</ul>'
|
||||
warning += '<p>If problem persists, please contact the course staff.</p>'
|
||||
warning += '</div>'
|
||||
|
||||
html = warning
|
||||
|
||||
Reference in New Issue
Block a user