MDL-32062 question engine: fix re-grading attempts from 2.0
The code to upgrade attempts from before Moodle 2.0 to 2.1 created attempt data that was not exactly the same as a new attempt created in 2.1+. This did not matter very much - revew and the quiz reports all worked OK - but it broke on re-grade. These changes detect the problem data in the re-grade code, an apply a work-around so that the re-grade gives the correct result.
This commit is contained in:
@@ -1086,15 +1086,32 @@ class question_attempt {
|
||||
$first = true;
|
||||
foreach ($oldqa->get_step_iterator() as $step) {
|
||||
$this->observer->notify_step_deleted($step, $this);
|
||||
|
||||
if ($first) {
|
||||
// First step of the attempt.
|
||||
$first = false;
|
||||
$this->start($oldqa->behaviour, $oldqa->get_variant(), $step->get_all_data(),
|
||||
$step->get_timecreated(), $step->get_user_id(), $step->get_id());
|
||||
|
||||
} else if ($step->has_behaviour_var('finish') && count($step->get_submitted_data()) > 1) {
|
||||
// This case relates to MDL-32062. The upgrade code from 2.0
|
||||
// generates attempts where the final submit of the question
|
||||
// data, and the finish action, are in the same step. The system
|
||||
// cannot cope with that, so convert the single old step into
|
||||
// two new steps.
|
||||
$submitteddata = $step->get_submitted_data();
|
||||
unset($submitteddata['-finish']);
|
||||
$this->process_action($submitteddata,
|
||||
$step->get_timecreated(), $step->get_user_id(), $step->get_id());
|
||||
$this->finish($step->get_timecreated(), $step->get_user_id());
|
||||
|
||||
} else {
|
||||
// This is the normal case. Replay the next step of the attempt.
|
||||
$this->process_action($step->get_submitted_data(),
|
||||
$step->get_timecreated(), $step->get_user_id(), $step->get_id());
|
||||
}
|
||||
}
|
||||
|
||||
if ($finished) {
|
||||
$this->finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user