Skip to content

Commit

Permalink
fixup! MDL-83541 qtypes: Define excluded hash fields and test hints
Browse files Browse the repository at this point in the history
Update method name
  • Loading branch information
marxjohnson committed Feb 14, 2025
1 parent d44a26b commit 1b41bfc
Show file tree
Hide file tree
Showing 9 changed files with 140 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,44 @@ public function process_calculated_option($data) {
}

#[\Override]
protected function define_excluded_fields(): array {
public static function convert_backup_to_questiondata(array $tags): \stdClass {
$questiondata = parent::convert_backup_to_questiondata($tags);
$qtype = $questiondata->qtype;
foreach ($tags["plugin_qtype_{$qtype}_question"]['calculated_records']['calculated_record'] as $record) {
foreach($questiondata->options->answers as &$answer) {
if ($answer->id == $record['answer']) {
$answer->tolerance = $record['tolerance'];
$answer->tolerancetype = $record['tolerancetype'];
$answer->correctanswerlength = $record['correctanswerlength'];
$answer->correctanswerformat = $record['correctanswerformat'];
continue 2;
}
}
}
if (isset($tags["plugin_qtype_{$qtype}_question"]['calculated_options'])) {
$questiondata->options = (object) array_merge(
(array) $questiondata->options,
$tags["plugin_qtype_{$qtype}_question"]['calculated_options']['calculated_option'][0],
);
}
return $questiondata;
}

#[\Override]
protected function define_excluded_identity_hash_fields(): array {
return [
'answer',
'synchronize', // These option fields are present in the database, but are only used by calculatedmulti.
'single',
'shuffleanswers',
'correctfeedback',
'correctfeedbackformat',
'partiallycorrectfeedback',
'partiallycorrectfeedbackformat',
'incorrectfeedback',
'incorrectfeedbackformat',
'answernumbering',
'shownumcorrect',
// These option fields are present in the database, but are only used by calculatedmulti.
'/options/synchronize',
'/options/single',
'/options/shuffleanswers',
'/options/correctfeedback',
'/options/correctfeedbackformat',
'/options/partiallycorrectfeedback',
'/options/partiallycorrectfeedbackformat',
'/options/incorrectfeedback',
'/options/incorrectfeedbackformat',
'/options/answernumbering',
'/options/shownumcorrect',
];
}
}
9 changes: 8 additions & 1 deletion question/type/calculated/tests/helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public function get_calculated_question_form_data_sum() {
$fromform->defaultmark = 1.0;
$fromform->generalfeedback = 'Generalfeedback: {={a} + {b}} is the right answer.';

$fromform->unitrole = '3';
$fromform->unitrole = '0';
$fromform->unitpenalty = 0.1;
$fromform->unitgradingtypes = '1';
$fromform->unitsleft = '0';
Expand Down Expand Up @@ -194,6 +194,13 @@ public function get_calculated_question_form_data_sum() {
],
];

$fromform->unit = [
'x'
];
$fromform->multiplier = [
'1.0'
];

return $fromform;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public function recode_legacy_state_answer($state) {
}

#[\Override]
protected function define_excluded_fields(): array {
return ['answer'];
protected function define_excluded_identity_hash_fields(): array {
return [];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,29 @@ public static function define_decode_contents() {

return $contents;
}

#[\Override]
public static function convert_backup_to_questiondata(array $tags): \stdClass {
$questiondata = parent::convert_backup_to_questiondata($tags);
$questiondata->options->drags = array_map(
fn($drag) => (object) $drag,
$tags['plugin_qtype_ddimageortext_question']['drags']['drag'],
);
$questiondata->options->drops = array_map(
fn($drop) => (object) $drop,
$tags['plugin_qtype_ddimageortext_question']['drops']['drop'],
);
return $questiondata;
}

#[\Override]
protected function define_excluded_identity_hash_fields(): array {
return [
'/options/drags/id',
'/options/drags/questionid',
'/options/drops/id',
'/options/drops/questionid',

];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -168,4 +168,28 @@ public static function define_decode_contents() {

return $contents;
}

#[\Override]
public static function convert_backup_to_questiondata(array $tags): \stdClass {
$questiondata = parent::convert_backup_to_questiondata($tags);
$questiondata->options->drags = array_map(
fn($drag) => (object) $drag,
$tags['plugin_qtype_ddmarker_question']['drags']['drag'],
);
$questiondata->options->drops = array_map(
fn($drop) => (object) $drop,
$tags['plugin_qtype_ddmarker_question']['drops']['drop'],
);
return $questiondata;
}

#[\Override]
protected function define_excluded_identity_hash_fields(): array {
return [
'/options/drags/id',
'/options/drags/questionid',
'/options/drops/id',
'/options/drops/questionid',
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -246,4 +246,23 @@ public static function define_decode_contents() {

return $contents;
}

#[\Override]
public static function convert_backup_to_questiondata(array $tags): \stdClass {
$questiondata = parent::convert_backup_to_questiondata($tags);
$questiondata->options = (object) $tags["plugin_qtype_match_question"]['matchoptions'][0];
$questiondata->options->subquestions = array_map(
fn($match) => (object) $match,
$tags["plugin_qtype_match_question"]['matches']['match'],
);
return $questiondata;
}

#[\Override]
protected function define_excluded_identity_hash_fields(): array {
return [
'/options/subquestions/id',
'/options/subquestions/questionid',
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,15 +200,18 @@ public function recode_legacy_state_answer($state) {
}

#[\Override]
public function define_excluded_fields(): array {
return ['sequence'];
public function define_excluded_identity_hash_fields(): array {
return [
'/options/sequence',
'/options/question',
];
}

#[\Override]
public static function reduce_question_data(array $questiondata, array $excludedfields): array {
if (isset($questiondata['options']['questions'])) {
unset($questiondata['options']['questions']);
public static function remove_excluded_question_data(stdClass $questiondata, array $excludefields = []): stdClass {
if (isset($questiondata->options->questions)) {
unset($questiondata->options->questions);
}
return parent::reduce_question_data($questiondata, $excludedfields);
return parent::remove_excluded_question_data($questiondata, $excludefields);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,16 @@ public function process_numerical($data) {
}

#[\Override]
public function define_excluded_fields(): array {
return ['answer'];
public static function convert_backup_to_questiondata(array $tags): \stdClass {
$questiondata = parent::convert_backup_to_questiondata($tags);
foreach ($tags['plugin_qtype_numerical_question']['numerical_records']['numerical_record'] as $record) {
foreach($questiondata->options->answers as &$answer) {
if ($answer->id == $record['answer']) {
$answer->tolerance = $record['tolerance'];
continue 2;
}
}
}
return $questiondata;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,10 @@ public function recode_legacy_state_answer($state) {
}

#[\Override]
public function define_excluded_fields(): array {
return ['trueanswer', 'falseanswer'];
public function define_excluded_identity_hash_fields(): array {
return [
'/options/trueanswer',
'/options/falseanswer',
];
}
}

0 comments on commit 1b41bfc

Please sign in to comment.