MDL-10799 - Question types do not accurately determine whether their state has changed or not. Merged from MOODLE_18_STABLE.
This commit is contained in:
@@ -189,8 +189,7 @@ class question_multichoice_qtype extends default_questiontype {
|
||||
if (false === $pos) { // No order of answers is given, so use the default
|
||||
$state->options->order = array_keys($question->options->answers);
|
||||
} else { // Restore the order of the answers
|
||||
$state->options->order = explode(',', substr($state->responses[''], 0,
|
||||
$pos));
|
||||
$state->options->order = explode(',', substr($state->responses[''], 0, $pos));
|
||||
$state->responses[''] = substr($state->responses[''], $pos + 1);
|
||||
}
|
||||
// Restore the responses
|
||||
@@ -200,11 +199,7 @@ class question_multichoice_qtype extends default_questiontype {
|
||||
// the $state->responses array is indexed by the answer ids and the
|
||||
// values are also the answer ids (i.e. key = value).
|
||||
if (empty($state->responses[''])) { // No previous responses
|
||||
if ($question->options->single) {
|
||||
$state->responses = array('' => '');
|
||||
} else {
|
||||
$state->responses = array();
|
||||
}
|
||||
$state->responses = array('' => '');
|
||||
} else {
|
||||
if ($question->options->single) {
|
||||
$state->responses = array('' => $state->responses['']);
|
||||
|
||||
@@ -1157,7 +1157,16 @@ class default_questiontype {
|
||||
// Question types may wish to override this (eg. to ignore trailing
|
||||
// white space or to make "7.0" and "7" compare equal).
|
||||
|
||||
return $state->responses === $teststate->responses;
|
||||
// In php neither == nor === compare arrays the way you want. The following
|
||||
// ensures that the arrays have the same keys, with the same values.
|
||||
$result = false;
|
||||
$diff1 = array_diff_assoc($state->responses, $teststate->responses);
|
||||
if (empty($diff1)) {
|
||||
$diff2 = array_diff_assoc($teststate->responses, $state->responses);
|
||||
$result = empty($diff2);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user