From ae3526d98ef9ae4d9d17dfa8a3bc2cb9f2d5a682 Mon Sep 17 00:00:00 2001 From: tjhunt Date: Fri, 12 Dec 2008 06:45:13 +0000 Subject: [PATCH] match qtype: MDL-17326 backup and restore problems * The shuffleanswers options was not backed up or restored. * Responses were not properly recoded on restore. --- question/type/match/questiontype.php | 37 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/question/type/match/questiontype.php b/question/type/match/questiontype.php index f94750fbc57..10be6264e7d 100644 --- a/question/type/match/questiontype.php +++ b/question/type/match/questiontype.php @@ -347,12 +347,20 @@ class question_match_qtype extends default_questiontype { * This is used in question/backuplib.php */ function backup($bf,$preferences,$question,$level=6) { - $status = true; + // Output the shuffleanswers setting. + $matchoptions = get_record('question_match', 'question', $question); + if ($matchoptions) { + $status = fwrite ($bf,start_tag("MATCHOPTIONS",6,true)); + fwrite ($bf,full_tag("SHUFFLEANSWERS",7,false,$matchoptions->shuffleanswers)); + $status = fwrite ($bf,end_tag("MATCHOPTIONS",6,true)); + } + $matchs = get_records("question_match_sub","question",$question,"id"); //If there are matchs if ($matchs) { + //Print match contents $status = fwrite ($bf,start_tag("MATCHS",6,true)); //Iterate over each match foreach ($matchs as $match) { @@ -377,7 +385,6 @@ class question_match_qtype extends default_questiontype { * This is used in question/restorelib.php */ function restore($old_question_id,$new_question_id,$info,$restore) { - $status = true; //Get the matchs array @@ -437,6 +444,13 @@ class question_match_qtype extends default_questiontype { $match->question = $new_question_id; $match->subquestions = $subquestions_field; + // Get the shuffleanswers option, if it is there. + if (!empty($info['#']['MATCHOPTIONS']['0']['#']['SHUFFLEANSWERS'])) { + $match->shuffleanswers = backup_todb($info['#']['MATCHOPTIONS']['0']['#']['SHUFFLEANSWERS']['0']['#']); + } else { + $match->shuffleanswers = 1; + } + //The structure is equal to the db, so insert the question_match_sub $newid = insert_record ("question_match",$match); @@ -517,26 +531,13 @@ class question_match_qtype extends default_questiontype { //Get the match_sub from backup_ids (for the question) if (!$match_que = backup_getid($restore->backup_unique_code,"question_match_sub",$match_question_id)) { echo 'Could not recode question in question_match_sub '.$match_question_id.'
'; - } - //Get the match_sub from backup_ids (for the answer) - if ($match_answer_id) { // only recode answer if not 0, not answered yet - if (!$match_ans = backup_getid($restore->backup_unique_code,"question_match_sub",$match_answer_id)) { - echo 'Could not recode answer in question_match_sub '.$match_answer_id.'
'; - } - } - - if ($match_que) { - //If the question hasn't response, it must be 0 - if (!$match_ans and $match_answer_id == 0) { - $match_ans->new_id = 0; - } - + } else { if ($in_first) { - $answer_field .= $match_que->new_id."-".$match_ans->new_id; $in_first = false; } else { - $answer_field .= ",".$match_que->new_id."-".$match_ans->new_id; + $answer_field .= ','; } + $answer_field .= $match_que->new_id.'-'.$match_answer_id; } //check for next $tok = strtok(",");