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:
tjhunt
2007-08-10 15:21:29 +00:00
parent 76317c73a2
commit ceeae340f9
2 changed files with 12 additions and 8 deletions
+2 -7
View File
@@ -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['']);
+10 -1
View File
@@ -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;
}
/**