Solved one bug when restoring MATCH(5) questions if

the question is an existing one. Some mapping are done
to use after them in responses.
This commit is contained in:
stronk7 2003-08-15 19:11:55 +00:00
parent 887e908592
commit f19f822b1a

View file

@ -261,6 +261,26 @@
//map between the XML file and the database to be able to restore the responses //map between the XML file and the database to be able to restore the responses
//in each attempt. //in each attempt.
$status = quiz_restore_map_answers($oldid,$newid,$que_info,$restore); $status = quiz_restore_map_answers($oldid,$newid,$que_info,$restore);
//Now, depending of the type of questions, invoke different functions
//to create the necessary mappings in backup_ids, because we are not
//creating the question, but need some records in backup table
if ($question->qtype == "1") {
//Shortanswer question. Nothing to remap
} else if ($question->qtype == "2") {
//Truefalse question. Nothing to remap
} else if ($question->qtype == "3") {
//Multichoice question. Nothing to remap
} else if ($question->qtype == "4") {
//Random question. Nothing to remap
} else if ($question->qtype == "5") {
$status = quiz_restore_map_match($oldid,$newid,$que_info,$restore);
} else if ($question->qtype == "6") {
//Randomsamatch question. Nothing to remap
} else if ($question->qtype == "7") {
//Description question. Nothing to remap
} else if ($question->qtype == "8") {
//Numerical question. Nothing to remap
}
} }
} }
return $status; return $status;
@ -620,6 +640,65 @@
return $status; return $status;
} }
function quiz_restore_map_match ($old_question_id,$new_question_id,$info,$restore) {
global $CFG;
$status = true;
//Get the matchs array
$matchs = $info['#']['MATCHS']['0']['#']['MATCH'];
//We have to build the subquestions field (a list of match_sub id)
$subquestions_field = "";
$in_first = true;
//Iterate over matchs
for($i = 0; $i < sizeof($matchs); $i++) {
$mat_info = $matchs[$i];
//traverse_xmlize($mat_info); //Debug
//print_object ($GLOBALS['traverse_array']); //Debug
//$GLOBALS['traverse_array']=""; //Debug
//We'll need this later!!
$oldid = backup_todb($mat_info['#']['ID']['0']['#']);
//Now, build the QUIZ_MATCH_SUB record structure
$match_sub->question = $new_question_id;
$match_sub->questiontext = backup_todb($mat_info['#']['QUESTIONTEXT']['0']['#']);
$match_sub->answertext = backup_todb($mat_info['#']['ANSWERTEXT']['0']['#']);
//If we are in this method is because the question exists in DB, so its
//match_sub must exist too.
//Now, we are going to look for that match_sub in DB and to create the
//mappings in backup_ids to use them later where restoring responses (user level).
//Get the match_sub from DB (by question, questiontext and answertext)
$db_match_sub = get_record ("quiz_match_sub","question",$new_question_id,
"questiontext",$match_sub->questiontext,
"answertext",$match_sub->answertext);
//Do some output
if (($i+1) % 50 == 0) {
echo ".";
if (($i+1) % 1000 == 0) {
echo "<br>";
}
backup_flush(300);
}
//We have the database match_sub, so update backup_ids
if ($db_match_sub) {
//We have the newid, update backup_ids
backup_putid($restore->backup_unique_code,"quiz_match_sub",$oldid,
$db_match_sub->id);
} else {
$status = false;
}
}
return $status;
}
function quiz_restore_randomsamatch ($old_question_id,$new_question_id,$info,$restore) { function quiz_restore_randomsamatch ($old_question_id,$new_question_id,$info,$restore) {
global $CFG; global $CFG;
@ -1009,11 +1088,15 @@
$exploded = explode("-",$tok); $exploded = explode("-",$tok);
$match_question_id = $exploded[0]; $match_question_id = $exploded[0];
$match_answer_id = $exploded[1]; $match_answer_id = $exploded[1];
//Get the match_sub from backup_ids //Get the match_sub from backup_ids (for the question)
$match_que = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_question_id); $match_que = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_question_id);
//Get the answer from backup_ids //Get the match_sub from backup_ids (for the answer)
$match_ans = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_answer_id); $match_ans = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_answer_id);
if ($match_que and $match_ans) { if ($match_que) {
//It the question hasn't response, it must be 0
if (!$match_ans and $match_answer_id == 0) {
$match_ans->new_id = 0;
}
if ($in_first) { if ($in_first) {
$answer_field .= $match_que->new_id."-".$match_ans->new_id; $answer_field .= $match_que->new_id."-".$match_ans->new_id;
$in_first = false; $in_first = false;
@ -1042,7 +1125,7 @@
$ans = backup_getid($restore->backup_unique_code,"quiz_answers",$answer_id); $ans = backup_getid($restore->backup_unique_code,"quiz_answers",$answer_id);
if ($que) { if ($que) {
//It the question hasn't response, it must be 0 //It the question hasn't response, it must be 0
if (!$ans) { if (!$ans and $answer_id == 0) {
$ans->new_id = 0; $ans->new_id = 0;
} }
if ($in_first) { if ($in_first) {