You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
784 lines
30 KiB
784 lines
30 KiB
<?php //$Id: restorelib.php,v 1.6.2.4 2011/08/27 19:40:28 bdaloukas Exp $
|
|
//This php script contains all the stuff to restore game mods
|
|
|
|
// Todo:
|
|
|
|
// whereever it says "/// We have to recode the .... field" we should put in a check
|
|
// to see if the recoding was successful and throw an appropriate error otherwise
|
|
|
|
//This is the "graphical" structure of the game mod:
|
|
//To see, put your terminal to 160cc
|
|
|
|
//
|
|
// game
|
|
// (CL,pk->id)
|
|
//
|
|
// Meaning: pk->primary key field of the table
|
|
// fk->foreign key to link with parent
|
|
// nt->nested field (recursive data)
|
|
// SL->site level info
|
|
// CL->course level info
|
|
// UL->user level info
|
|
// files->table may have files
|
|
//
|
|
//-----------------------------------------------------------
|
|
require( 'locallib.php');
|
|
|
|
function game_restore_mods($mod,$restore) {
|
|
|
|
global $CFG;
|
|
$status = true;
|
|
|
|
//Get record from backup_ids
|
|
$data = backup_getid($restore->backup_unique_code,$mod->modtype,$mod->id);
|
|
|
|
if ($data) {
|
|
//Now get completed xmlized object
|
|
$info = $data->info;
|
|
//if necessary, write to restorelog and adjust date/time fields
|
|
if ($restore->course_startdateoffset) {
|
|
restore_log_date_changes('Game', $restore, $info['MOD']['#'], array('TIMEOPEN', 'TIMECLOSE'));
|
|
}
|
|
//Now, build the GAME record structure
|
|
$game = new stdClass;
|
|
$game->course = $restore->course_id;
|
|
|
|
$mod_info = $info[ 'MOD'];
|
|
|
|
$fields = array( 'name', 'sourcemodule', 'timeopen', 'timeclose', 'quizid', 'glossaryid', 'glossarycategoryid', 'questioncategoryid',
|
|
'bookid', 'gameinputid', 'gamekind', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8',
|
|
'timemodified', 'bottomtext', 'grademethod', 'grade', 'decimalpoints', 'review', 'attempts',
|
|
'glossaryid2', 'glossarycategoryid2', 'language');
|
|
game_restore_record( $mod_info, $game, $fields);
|
|
|
|
game_recode( $restore->backup_unique_code, $game, 'quizid', 'quiz');
|
|
game_recode( $restore->backup_unique_code, $game, 'glossaryid', 'glossary');
|
|
game_recode( $restore->backup_unique_code, $game, 'glossarycategoryid', 'glossary_categories');
|
|
game_recode( $restore->backup_unique_code, $game, 'glossaryid2', 'glossary');
|
|
game_recode( $restore->backup_unique_code, $game, 'glossarycategoryid2', 'glossary_categories');
|
|
|
|
game_restore_stamp( $info, $restore, $map_question_categories, 'QUESTION_CATEGORIES', 'QUESTION_CATEGORY');
|
|
game_restore_stamp( $info, $restore, $map_questions, 'QUESTIONS', 'QUESTION');
|
|
|
|
game_recode_questioncategoryid( $game, $map_question_categories);
|
|
game_recode( $restore->backup_unique_code, $game, 'bookid', 'book');
|
|
|
|
//The structure is equal to the db, so insert the game
|
|
$newid = insert_record ("game", $game);
|
|
|
|
//Do some output
|
|
if (!defined('RESTORE_SILENTLY')) {
|
|
echo "<li>".get_string("modulename","game")." \"".format_string(stripslashes($game->name),true)."\"</li>";
|
|
}
|
|
backup_flush(300);
|
|
|
|
if ($newid) {
|
|
//We have the newid, update backup_ids
|
|
backup_putid($restore->backup_unique_code,$mod->modtype, $mod->id, $newid);
|
|
|
|
//Now check if want to restore user data and do it.
|
|
if (restore_userdata_selected($restore,'game',$mod->id)) {
|
|
$status = game_restore_grades( $newid, $info, $restore);
|
|
$status = game_restore_snakes_database( $info, $restore);
|
|
$status = game_restore_bookquiz_questions( $newid, $info, $restore, $map_question_categories);
|
|
|
|
//Restore game_attempts
|
|
$status = game_attempts_restore_mods ($newid,$info,$restore, $map_questions);
|
|
}
|
|
} else {
|
|
$status = false;
|
|
}
|
|
} else {
|
|
$status = false;
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
function game_recode( $backup_unique_code, &$rec, $field, $table){
|
|
$data = backup_getid( $backup_unique_code, $table, $rec->$field);
|
|
|
|
if( $data != false){
|
|
$rec->$field = $data->new_id;
|
|
}
|
|
}
|
|
|
|
function game_restore_record( $info, &$table, $fields){
|
|
$info = $info[ '#'];
|
|
foreach( $fields as $f){
|
|
$table->$f = backup_todb($info[ strtoupper( $f)]['0']['#']);
|
|
}
|
|
}
|
|
|
|
function game_recode_questioncategoryid( &$game, $map_question_categories){
|
|
|
|
$stamp = $map_question_categories[ $game->questioncategoryid];
|
|
|
|
$game->questioncategoryid = get_field_select( 'question_categories', 'id', "stamp='$stamp'");
|
|
}
|
|
|
|
//This function restores the quiz_attempts
|
|
function game_attempts_restore_mods($newgameid,$info,$restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_attempts array
|
|
if (array_key_exists('GAME_ATTEMPTS', $info['MOD']['#'])) {
|
|
$attempts = $info['MOD']['#']['GAME_ATTEMPTS']['0']['#']['GAME_ATTEMPT'];
|
|
} else {
|
|
$attempts = array();
|
|
}
|
|
|
|
//Iterate over attempts
|
|
for($i = 0; $i < sizeof($attempts); $i++) {
|
|
$att_info = $attempts[$i];
|
|
|
|
//We'll need this later!!
|
|
$oldid = backup_todb($att_info['#']['ID']['0']['#']);
|
|
|
|
//Now, build the ATTEMPTS record structure
|
|
$attempt = new stdClass;
|
|
$attempt->gameid = $newgameid;
|
|
$fields = array( 'userid', 'timestart', 'timefinish', 'timelastattempt', 'lastip',
|
|
'lastremotehost', 'preview', 'attempt', 'score', 'attempts');
|
|
game_restore_record( $att_info, $attempt, $fields);
|
|
//We have to recode
|
|
game_recode( $restore->backup_unique_code, $attempt, 'userid', 'users');
|
|
|
|
//The structure is equal to the db, so insert the quiz_attempts
|
|
$newid = insert_record ("game_attempts", $attempt);
|
|
|
|
//Do some output
|
|
game_do_some_output( $i);
|
|
|
|
if ($newid) {
|
|
//We have the newid, update backup_ids
|
|
backup_putid($restore->backup_unique_code, "game_attempts", $oldid, $newid);
|
|
//Now process game_hangman, game_cross
|
|
$status = game_restore_queries( $newgameid, $newid, $att_info, $restore);
|
|
$status = game_restore_hangman( $newid, $att_info, $restore);
|
|
$status = game_restore_cross( $newid, $att_info, $restore);
|
|
$status = game_restore_cryptex( $newid, $att_info, $restore);
|
|
$status = game_restore_millionaire( $newid, $att_info, $restore);
|
|
$status = game_restore_sudoku( $newid, $att_info, $restore);
|
|
$status = game_restore_snakes( $newid, $att_info, $restore);
|
|
$status = game_restore_hiddenpicture( $newid, $att_info, $restore);
|
|
} else {
|
|
$status = false;
|
|
}
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_snakes_database
|
|
function game_restore_snakes_database( $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
//Get the game_attempts array
|
|
if (array_key_exists('GAME_SNAKES_DATABASE', $info['MOD']['#'])) {
|
|
$recs = $info['MOD']['#']['GAME_SNAKES_DATABASE']['0']['#']['GAME_SNAKES_DATABASE_RECORD'];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Iterate over snakes_database
|
|
for($i = 0; $i < sizeof($recs); $i++) {
|
|
$att_info = $recs[$i];
|
|
|
|
//Now, build the game_snakes_database record structure
|
|
$snakes_database = new stdClass;
|
|
$fields = array( 'id', 'name', 'cols', 'rows', 'data', 'fileboard', 'direction', 'headerx', 'headery',
|
|
'footerx', 'footery', 'width', 'height');
|
|
game_restore_record( $att_info, $snakes_database, $fields);
|
|
|
|
if( ($recdb = get_record_select( 'game_snakes_database', "name='{$snakes_database->name}'")) != false){
|
|
backup_putid($restore->backup_unique_code, 'game_snakes_database', $snakes_database->id, $recdb->id);
|
|
continue;
|
|
}
|
|
|
|
//The structure is equal to the db, so insert the quiz_attempts
|
|
$newid = insert_record ("game_snakes_database", $snakes_database);
|
|
|
|
//Do some output
|
|
game_do_some_output( $i);
|
|
|
|
if ($newid == false) {
|
|
$status = false;
|
|
}
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_grades
|
|
function game_restore_grades($newgameid,$info,$restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
//Get the game_attem array
|
|
if (array_key_exists('GAME_GRADES', $info['MOD']['#'])) {
|
|
$recs = $info['MOD']['#']['GAME_GRADES']['0']['#']['GAME_GRADE'];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Iterate over game_grades
|
|
for($i = 0; $i < sizeof($recs); $i++) {
|
|
$att_info = $recs[$i];
|
|
|
|
//Now, build the game_grades record structure
|
|
$game_grade = new stdClass;
|
|
$game_grade->gameid = $newgameid;
|
|
$fields = array( 'userid', 'score', 'timemodified');
|
|
game_restore_record( $att_info, $game_grade, $fields);
|
|
|
|
//The structure is equal to the db, so insert the quiz_attempts
|
|
$newid = insert_record ("game_grades", $games_grade);
|
|
|
|
//Do some output
|
|
game_do_some_output( $i);
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
function game_restore_stamp( $info, $restore, &$map, $tags, $tag) {
|
|
|
|
global $CFG;
|
|
|
|
$map = array();
|
|
|
|
$status = true;
|
|
//Get the game_attempt array
|
|
if (array_key_exists($tags, $info['MOD']['#'])) {
|
|
$recs = $info['MOD']['#'][$tags]['0']['#'][$tag];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Iterate
|
|
for($i = 0; $i < sizeof($recs); $i++) {
|
|
$att_info = $recs[$i];
|
|
|
|
$rec = new stdClass;
|
|
$fields = array( 'id', 'stamp');
|
|
game_restore_record( $att_info, $rec, $fields);
|
|
|
|
$map[ $rec->id] = $rec->stamp;
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_bookquiz_questions
|
|
function game_restore_bookquiz_questions($newgameid,$info,$restore, $map_question_categories) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
//Get the c array
|
|
if (array_key_exists('GAME_BOOKQUIZ_QUESTIONS', $info['MOD']['#'])) {
|
|
$recs = $info['MOD']['#']['GAME_BOOKQUIZ_QUESTIONS']['0']['#']['GAME_BOOKQUIZ_QUESTION'];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Iterate over game_bookquiz_questions
|
|
for($i = 0; $i < sizeof($recs); $i++) {
|
|
$att_info = $recs[$i];
|
|
|
|
//Now, build the game_snakes_database record structure
|
|
$game_bookquiz_question = new stdClass;
|
|
$game_bookquiz_question->gameid = $newgameid;
|
|
$fields = array( 'chapterid', 'questioncategoryid');
|
|
game_restore_record( $att_info, $game_bookquiz_question, $fields);
|
|
|
|
//We have to recode the some
|
|
game_recode( $restore->backup_unique_code, $game_bookquiz_question, 'chapterid', 'book_chapters');
|
|
game_recode_questioncategoryid( $game_bookquiz_question, $map_question_categories);
|
|
|
|
//The structure is equal to the db, so insert the game_bookquiz_question
|
|
$newid = insert_record ("game_bookquiz_questions", $game_bookquiz_question);
|
|
|
|
game_do_some_output( $i);
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
|
|
function game_restore_queries( $newgameid, $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
//Get the c array
|
|
if (array_key_exists('GAME_QUERIES', $info['#'])) {
|
|
$recs = $info['#']['GAME_QUERIES']['0']['#']['GAME_QUERY'];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Iterate over game_queries
|
|
for($i = 0; $i < sizeof($recs); $i++) {
|
|
$att_info = $recs[$i];
|
|
|
|
//Now, build the game_queries record structure
|
|
$game_query = new stdClass;
|
|
$game_query->gameid = $newgameid;
|
|
$game_query->attemptid = $newattemptid;
|
|
$fields = array( 'gamekind', 'userid', 'sourcemodule','questionid',
|
|
'glossaryentryid', 'questiontext', 'score', 'timelastattempt', 'studentanswer',
|
|
'col', 'row', 'horizontal', 'answertext', 'correct');
|
|
game_restore_record( $att_info, $game_query, $fields);
|
|
|
|
//We have to recode the some
|
|
game_recode( $restore->backup_unique_code, $game_query, 'userid', 'users');
|
|
game_recode( $restore->backup_unique_code, $game_query, 'questionid', 'questions');
|
|
game_recode( $restore->backup_unique_code, $game_query, 'glossaryentryid', 'glossary_entries');
|
|
|
|
//The structure is equal to the db, so insert the game_bookquiz_question
|
|
$newid = insert_record ("game_queries", $game_query);
|
|
}
|
|
|
|
return $status;
|
|
}
|
|
|
|
function game_do_some_output( $i){
|
|
//Do some output
|
|
if (defined('RESTORE_SILENTLY')) {
|
|
return;
|
|
}
|
|
|
|
if( ($i+1) % 100 == 0){
|
|
return;
|
|
}
|
|
|
|
echo ".";
|
|
if (($i+1) % 200*100 == 0) {
|
|
echo "<br />";
|
|
}
|
|
|
|
backup_flush( 300);
|
|
}
|
|
|
|
//This function restores the game_hangman
|
|
function game_restore_hangman( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
|
|
//Get the game_hangman array
|
|
if (array_key_exists('GAME_HANGMAN', $info['#'])) {
|
|
$info = $info['#']['GAME_HANGMAN'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_hangman record structure
|
|
$game_hangman = new stdClass;
|
|
$game_hangman->id = $newattemptid;
|
|
$fields = array( 'queryid', 'letters', 'allletters', 'try', 'maxtries', 'finishedword', 'corrects', 'iscorrect');
|
|
game_restore_record( $info, $game_hangman, $fields);
|
|
|
|
//We have to recode the some
|
|
game_recode( $restore->backup_unique_code, $game_hangman, 'queryid', 'game_queries');
|
|
|
|
//The structure is equal to the db, so insert the game_hangman
|
|
if( ( game_insert_record ("game_hangman", $game_hangman) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_hiddenpicture
|
|
function game_restore_hiddenpicture( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
|
|
//Get the game_hiddenpicture array
|
|
if (array_key_exists('GAME_HIDDENPICTURE', $info['#'])) {
|
|
$info = $info['#']['GAME_HIDDENPICTURE'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_hiddenpicture record structure
|
|
$game_hiddenpicture = new stdClass;
|
|
$game_hiddenpicture->id = $newattemptid;
|
|
$fields = array( 'correct', 'wrong', 'found');
|
|
game_restore_record( $info, $game_hiddenpicture, $fields);
|
|
|
|
//The structure is equal to the db, so insert the game_hiddenpicture
|
|
if( ( game_insert_record ("game_hiddenpicture", $game_hiddenpicture) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_cross
|
|
function game_restore_cross( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_cross array
|
|
if (array_key_exists('GAME_CROSS', $info['#'])) {
|
|
$info = $info['#']['GAME_CROSS'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_cross record structure
|
|
$game_cross = new stdClass;
|
|
$game_cross->id = $newattemptid;
|
|
$fields = array( 'cols', 'rows', 'words', 'wordsall', 'createscore', 'createtries',
|
|
'createtimelimit', 'createconnectors', 'createfilleds', 'createspaces');
|
|
game_restore_record( $info, $game_cross, $fields);
|
|
|
|
//The structure is equal to the db, so insert the game_hangman
|
|
if( ( game_insert_record ("game_cross", $game_cross) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_cryptex
|
|
function game_restore_cryptex( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_cryptex array
|
|
if (array_key_exists('GAME_CRYPTEX', $info['#'])) {
|
|
$info = $info['#']['GAME_CRYPTEX'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_cryptex record structure
|
|
$game_cryptex = new stdClass;
|
|
$game_cryptex->id = $newattemptid;
|
|
$fields = array( 'letters');
|
|
game_restore_record( $info, $game_cryptex, $fields);
|
|
|
|
//The structure is equal to the db, so insert the game_cryptex
|
|
if( ( game_insert_record ("game_cryptex", $game_cryptex) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_millionaire
|
|
function game_restore_millionaire( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_cryptex array
|
|
if (array_key_exists('GAME_MILLIONAIRE', $info['#'])) {
|
|
$info = $info['#']['GAME_MILLIONAIRE'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_millionaire record structure
|
|
$game_millionaire = new stdClass;
|
|
$game_millionaire->id = $newattemptid;
|
|
$fields = array( 'queryid', 'state', 'level');
|
|
game_restore_record( $info, $game_millionaire, $fields);
|
|
|
|
//We have to recode the some
|
|
game_recode( $restore->backup_unique_code, $game_millionaire, 'queryid', 'game_queries');
|
|
|
|
//The structure is equal to the db, so insert the game_millionaire
|
|
if( ( game_insert_record ("game_millionaire", $game_millionaire) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_sudoku
|
|
function game_restore_sudoku( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_cryptex array
|
|
if (array_key_exists('GAME_SUDOKU', $info['#'])) {
|
|
$info = $info['#']['GAME_SUDOKU'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_cryptex record structure
|
|
$game_sudoku = new stdClass;
|
|
$game_sudoku->id = $newattemptid;
|
|
$fields = array( 'level', 'data', 'opened', 'guess');
|
|
game_restore_record( $info, $game_sudoku, $fields);
|
|
|
|
//The structure is equal to the db, so insert the game_sudoku
|
|
if( ( game_insert_record ("game_sudoku", $game_sudoku) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function restores the game_snakes
|
|
function game_restore_snakes( $newattemptid, $info, $restore) {
|
|
|
|
global $CFG;
|
|
|
|
$status = true;
|
|
|
|
//Get the game_snakes array
|
|
if (array_key_exists('GAME_SNAKES', $info['#'])) {
|
|
$info = $info['#']['GAME_SNAKES'][ 0];
|
|
} else {
|
|
return $status;
|
|
}
|
|
|
|
//Now, build the game_snakes record structure
|
|
$game_snakes = new stdClass;
|
|
$game_snakes->id = $newattemptid;
|
|
$fields = array( 'snakesdatabaseid', 'queryid', 'position', 'dice');
|
|
game_restore_record( $info, $game_snakes, $fields);
|
|
|
|
//We have to recode the some
|
|
game_recode( $restore->backup_unique_code, $game_snakes, 'queryid', 'game_queries');
|
|
game_recode( $restore->backup_unique_code, $game_snakes, 'snakesdatabaseid', 'game_snakes_database');
|
|
|
|
//The structure is equal to the db, so insert the game_snakes
|
|
if( ( game_insert_record ("game_snakes", $game_snakes) == false)){
|
|
$status = false;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
//This function returns a log record with all the necessay transformations
|
|
//done. It's used by restore_log_module() to restore modules log.
|
|
function game_restore_logs($restore,$log) {
|
|
|
|
$status = false;
|
|
|
|
//Depending of the action, we recode different things
|
|
switch ($log->action) {
|
|
case "add":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "view.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "update":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "view.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "view":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "view.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "view all":
|
|
$log->url = "index.php?id=".$log->course;
|
|
$status = true;
|
|
break;
|
|
case "report":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "report.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "attempt":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "submit":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "review":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "editquestions":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the url field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "view.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "preview":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the url field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
$log->url = "attempt.php?id=".$log->cmid;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
break;
|
|
case "start attempt":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "close attempt":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "continue attempt":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "continue attemp":
|
|
if ($log->cmid) {
|
|
//Get the new_id of the module (to recode the info field)
|
|
$mod = backup_getid($restore->backup_unique_code,$log->module,$log->info);
|
|
if ($mod) {
|
|
//Extract the attempt id from the url field
|
|
$attid = substr(strrchr($log->url,"="),1);
|
|
//Get the new_id of the attempt (to recode the url field)
|
|
$att = backup_getid($restore->backup_unique_code,"game_attempts",$attid);
|
|
if ($att) {
|
|
$log->url = "review.php?id=".$log->cmid."&attempt=".$att->new_id;
|
|
$log->info = $mod->new_id;
|
|
$log->action = "continue attempt"; //To recover some bad actions
|
|
$status = true;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
if (!defined('RESTORE_SILENTLY')) {
|
|
echo "action (".$log->module."-".$log->action.") unknown. Not restored<br />"; //Debug
|
|
}
|
|
break;
|
|
}
|
|
|
|
if ($status) {
|
|
$status = $log;
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
?>
|
|
|