+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //assignment mods
-
- //This is the "graphical" structure of the assignment mod:
- //
- // assignment
- // (CL,pk->id)
- // |
- // |
- // |
- // assignment_submisions
- // (UL,pk->id, fk->assignment,files)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the backup procedure about this mod
- function assignment_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over assignment table
- $assignments = get_records ("assignment","course",$preferences->backup_course,"id");
- if ($assignments) {
- foreach ($assignments as $assignment) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print assignment data
- fwrite ($bf,full_tag("ID",4,false,$assignment->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"assignment"));
- fwrite ($bf,full_tag("NAME",4,false,$assignment->name));
- fwrite ($bf,full_tag("DESCRIPTION",4,false,$assignment->description));
- fwrite ($bf,full_tag("FORMAT",4,false,$assignment->format));
- fwrite ($bf,full_tag("RESUBMIT",4,false,$assignment->resubmit));
- fwrite ($bf,full_tag("TYPE",4,false,$assignment->type));
- fwrite ($bf,full_tag("MAXBYTES",4,false,$assignment->maxbytes));
- fwrite ($bf,full_tag("TIMEDUE",4,false,$assignment->timedue));
- fwrite ($bf,full_tag("GRADE",4,false,$assignment->grade));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$assignment->timemodified));
- //if we've selected to backup users info, then execute backup_assignment_submisions
- if ($preferences->mods["assignment"]->userinfo) {
- $status = backup_assignment_submissions($bf,$preferences,$assignment->id);
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- //if we've selected to backup users info, then backup files too
- if ($status) {
- if ($preferences->mods["assignment"]->userinfo) {
- $status = backup_assignment_files($bf,$preferences);
- }
- }
- return $status;
- }
-
- //Backup assignment_submissions contents (executed from assignment_backup_mods)
- function backup_assignment_submissions ($bf,$preferences,$assignment) {
-
- global $CFG;
-
- $status = true;
-
- $assignment_submissions = get_records("assignment_submissions","assignment",$assignment,"id");
- //If there is submissions
- if ($assignment_submissions) {
- //Write start tag
- $status =fwrite ($bf,start_tag("SUBMISSIONS",4,true));
- //Iterate over each submission
- foreach ($assignment_submissions as $ass_sub) {
- //Start submission
- $status =fwrite ($bf,start_tag("SUBMISSION",5,true));
- //Print submission contents
- fwrite ($bf,full_tag("ID",6,false,$ass_sub->id));
- fwrite ($bf,full_tag("USERID",6,false,$ass_sub->userid));
- fwrite ($bf,full_tag("TIMECREATED",6,false,$ass_sub->timecreated));
- fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$ass_sub->timemodified));
- fwrite ($bf,full_tag("NUMFILES",6,false,$ass_sub->numfiles));
- fwrite ($bf,full_tag("GRADE",6,false,$ass_sub->grade));
- fwrite ($bf,full_tag("COMMENT",6,false,$ass_sub->comment));
- fwrite ($bf,full_tag("TEACHER",6,false,$ass_sub->teacher));
- fwrite ($bf,full_tag("TIMEMARKED",6,false,$ass_sub->timemarked));
- fwrite ($bf,full_tag("MAILED",6,false,$ass_sub->mailed));
- //End submission
- $status =fwrite ($bf,end_tag("SUBMISSION",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("SUBMISSIONS",4,true));
- }
- return $status;
- }
-
- //Backup assignment files because we've selected to backup user info
- //and files are user info's level
- function backup_assignment_files($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //First we check to moddata exists and create it as necessary
- //in temp/backup/$backup_code dir
- $status = check_and_create_moddata_dir($preferences->backup_unique_code);
- //Now copy the assignment dir
- if ($status) {
- //Only if it exists !! Thanks to Daniel Miksik.
- if (is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/assignment")) {
- $status = backup_copy_file($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/assignment",
- $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/assignment");
- }
- }
-
- return $status;
-
- }
-
- //Return an array of info (name,value)
- function assignment_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","assignment");
- if ($ids = assignment_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- $info[1][0] = get_string("submissions","assignment");
- if ($ids = assignment_submission_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of assignments id
- function assignment_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}assignment a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of assignment_submissions id
- function assignment_submission_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.assignment
- FROM {$CFG->prefix}assignment_submissions s,
- {$CFG->prefix}assignment a
- WHERE a.course = '$course' AND
- s.assignment = a.id");
- }
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //assignment mods
-
- //This is the "graphical" structure of the assignment mod:
- //
- // assignment
- // (CL,pk->id)
- // |
- // |
- // |
- // assignment_submisions
- // (UL,pk->id, fk->assignment,files)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the restore procedure about this mod
- function assignment_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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the ASSIGNMENT record structure
- $assignment->course = $restore->course_id;
- $assignment->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $assignment->description = backup_todb($info['MOD']['#']['DESCRIPTION']['0']['#']);
- $assignment->format = backup_todb($info['MOD']['#']['FORMAT']['0']['#']);
- $assignment->resubmit = backup_todb($info['MOD']['#']['RESUBMIT']['0']['#']);
- $assignment->type = backup_todb($info['MOD']['#']['TYPE']['0']['#']);
- $assignment->maxbytes = backup_todb($info['MOD']['#']['MAXBYTES']['0']['#']);
- $assignment->timedue = backup_todb($info['MOD']['#']['TIMEDUE']['0']['#']);
- $assignment->grade = backup_todb($info['MOD']['#']['GRADE']['0']['#']);
- $assignment->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-
- //The structure is equal to the db, so insert the assignment
- $newid = insert_record ("assignment",$assignment);
-
- //Do some output
- echo "<ul><li>Assignment \"".$assignment->name."\"<br>";
- 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->mods[assignment]->userinfo) {
- //Restore assignmet_submissions
- $status = assignment_submissions_restore_mods ($mod->id, $newid,$info,$restore);
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
- //This function restores the assignment_submissions
- function assignment_submissions_restore_mods($old_assignment_id, $new_assignment_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the submissions array
- $submissions = $info['MOD']['#']['SUBMISSIONS']['0']['#']['SUBMISSION'];
-
- //Iterate over submissions
- for($i = 0; $i < sizeof($submissions); $i++) {
- $sub_info = $submissions[$i];
- //traverse_xmlize($sub_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sub_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sub_info['#']['USERID']['0']['#']);
-
- //Now, build the ASSIGNMENT_SUBMISSIONS record structure
- $submission->assignment = $new_assignment_id;
- $submission->userid = backup_todb($sub_info['#']['USERID']['0']['#']);
- $submission->timecreated = backup_todb($sub_info['#']['TIMECREATED']['0']['#']);
- $submission->timemodified = backup_todb($sub_info['#']['TIMEMODIFIED']['0']['#']);
- $submission->numfiles = backup_todb($sub_info['#']['NUMFILES']['0']['#']);
- $submission->grade = backup_todb($sub_info['#']['GRADE']['0']['#']);
- $submission->comment = backup_todb($sub_info['#']['COMMENT']['0']['#']);
- $submission->teacher = backup_todb($sub_info['#']['TEACHER']['0']['#']);
- $submission->timemarked = backup_todb($sub_info['#']['TIMEMARKED']['0']['#']);
- $submission->mailed = backup_todb($sub_info['#']['MAILED']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$submission->userid);
- if ($user) {
- $submission->userid = $user->new_id;
- }
-
- //We have to recode the teacher field
- $user = backup_getid($restore->backup_unique_code,"user",$submission->teacher);
- if ($user) {
- $submission->teacher = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the assignment_submission
- $newid = insert_record ("assignment_submissions",$submission);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"assignment_submission",$oldid,
- $newid);
-
- //Now copy moddata associated files
- $status = assignment_restore_files ($old_assignment_id, $new_assignment_id,
- $olduserid, $submission->userid, $restore);
-
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function copies the assignment related info from backup temp dir to course moddata folder,
- //creating it if needed and recoding everything (assignment id and user id)
- function assignment_restore_files ($oldassid, $newassid, $olduserid, $newuserid, $restore) {
-
- global $CFG;
-
- $status = true;
- $todo = false;
- $moddata_path = "";
- $assignment_path = "";
- $temp_path = "";
-
- //First, locate course's moddata directory
- $moddata_path = $CFG->dataroot."/".$restore->course_id."/".$CFG->moddata;
-
- //Check it exists and create it
- $status = check_dir_exists($moddata_path,true);
-
- //Now, locate assignment directory
- if ($status) {
- $assignment_path = $moddata_path."/assignment";
- //Check it exists and create it
- $status = check_dir_exists($assignment_path,true);
- }
-
- //Now locate the temp dir we are gong to restore
- if ($status) {
- $temp_path = $CFG->dataroot."/temp/backup/".$restore->backup_unique_code.
- "/moddata/assignment/".$oldassid."/".$olduserid;
- //Check it exists
- if (is_dir($temp_path)) {
- $todo = true;
- }
- }
-
- //If todo, we create the neccesary dirs in course moddata/assignment
- if ($status and $todo) {
- //First this assignment id
- $this_assignment_path = $assignment_path."/".$newassid;
- $status = check_dir_exists($this_assignment_path,true);
- //Now this user id
- $user_assignment_path = $this_assignment_path."/".$newuserid;
- //And now, copy temp_path to user_assignment_path
- $status = backup_copy_file($temp_path, $user_assignment_path);
- }
-
- return $status;
- }
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //choice mods
-
- //This is the "graphical" structure of the choice mod:
- //
- // choice
- // (CL,pk->id)
- // |
- // |
- // |
- // choice_answers
- // (UL,pk->id, fk->choice)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function choice_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over choice table
- $choices = get_records ("choice","course",$preferences->backup_course,"id");
- if ($choices) {
- foreach ($choices as $choice) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print choice data
- fwrite ($bf,full_tag("ID",4,false,$choice->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"choice"));
- fwrite ($bf,full_tag("NAME",4,false,$choice->name));
- fwrite ($bf,full_tag("TEXT",4,false,$choice->text));
- fwrite ($bf,full_tag("FORMAT",4,false,$choice->format));
- fwrite ($bf,full_tag("ANSWER1",4,false,$choice->answer1));
- fwrite ($bf,full_tag("ANSWER2",4,false,$choice->answer2));
- fwrite ($bf,full_tag("ANSWER3",4,false,$choice->answer3));
- fwrite ($bf,full_tag("ANSWER4",4,false,$choice->answer4));
- fwrite ($bf,full_tag("ANSWER5",4,false,$choice->answer5));
- fwrite ($bf,full_tag("ANSWER6",4,false,$choice->answer6));
- fwrite ($bf,full_tag("PUBLISH",4,false,$choice->publish));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$choice->timemodified));
- //if we've selected to backup users info, then execute backup_choice_answers
- if ($preferences->mods["choice"]->userinfo) {
- $status = backup_choice_answers($bf,$preferences,$choice->id);
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- return $status;
- }
-
- //Backup choice_answers contents (executed from choice_backup_mods)
- function backup_choice_answers ($bf,$preferences,$choice) {
-
- global $CFG;
-
- $status = true;
-
- $choice_answers = get_records("choice_answers","choice",$choice,"id");
- //If there is submissions
- if ($choice_answers) {
- //Write start tag
- $status =fwrite ($bf,start_tag("ANSWERS",4,true));
- //Iterate over each answer
- foreach ($choice_answers as $cho_ans) {
- //Start answer
- $status =fwrite ($bf,start_tag("ANSWER",5,true));
- //Print submission contents
- fwrite ($bf,full_tag("ID",6,false,$cho_ans->id));
- fwrite ($bf,full_tag("USERID",6,false,$cho_ans->userid));
- fwrite ($bf,full_tag("CHOICE_ANSWER",6,false,$cho_ans->answer));
- fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$cho_ans->timemodified));
- //End answer
- $status =fwrite ($bf,end_tag("ANSWER",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("ANSWERS",4,true));
- }
- return $status;
- }
-
- ////Return an array of info (name,value)
- function choice_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","choice");
- if ($ids = choice_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- $info[1][0] = get_string("responses","choice");
- if ($ids = choice_answer_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of choices id
- function choice_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}choice a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of choice_answers id
- function choice_answer_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.choice
- FROM {$CFG->prefix}choice_answers s,
- {$CFG->prefix}choice a
- WHERE a.course = '$course' AND
- s.choice = a.id");
- }
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //choice mods
-
- //This is the "graphical" structure of the choice mod:
- //
- // choice
- // (CL,pk->id)
- // |
- // |
- // |
- // choice_answers
- // (UL,pk->id, fk->choice)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the restore procedure about this mod
- function choice_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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the CHOICE record structure
- $choice->course = $restore->course_id;
- $choice->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $choice->text = backup_todb($info['MOD']['#']['TEXT']['0']['#']);
- $choice->format = backup_todb($info['MOD']['#']['FORMAT']['0']['#']);
- $choice->answer1 = backup_todb($info['MOD']['#']['ANSWER1']['0']['#']);
- $choice->answer2 = backup_todb($info['MOD']['#']['ANSWER2']['0']['#']);
- $choice->answer3 = backup_todb($info['MOD']['#']['ANSWER3']['0']['#']);
- $choice->answer4 = backup_todb($info['MOD']['#']['ANSWER4']['0']['#']);
- $choice->answer5 = backup_todb($info['MOD']['#']['ANSWER5']['0']['#']);
- $choice->answer6 = backup_todb($info['MOD']['#']['ANSWER6']['0']['#']);
- $choice->publish = backup_todb($info['MOD']['#']['PUBLISH']['0']['#']);
- $choice->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-
- //The structure is equal to the db, so insert the choice
- $newid = insert_record ("choice",$choice);
-
- //Do some output
- echo "<ul><li>Choice \"".$choice->name."\"<br>";
- 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->mods[choice]->userinfo) {
- //Restore choice_answers
- $status = choice_answers_restore_mods ($newid,$info,$restore);
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
- //This function restores the choice_answers
- function choice_answers_restore_mods($choice_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the answers array
- $answers = $info['MOD']['#']['ANSWERS']['0']['#']['ANSWER'];
-
- //Iterate over answers
- for($i = 0; $i < sizeof($answers); $i++) {
- $sub_info = $answers[$i];
- //traverse_xmlize($sub_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sub_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sub_info['#']['USERID']['0']['#']);
-
- //Now, build the CHOICE_ANSWERS record structure
- $answer->choice = $choice_id;
- $answer->userid = backup_todb($sub_info['#']['USERID']['0']['#']);
- $answer->answer = backup_todb($sub_info['#']['CHOICE_ANSWER']['0']['#']);
- $answer->timemodified = backup_todb($sub_info['#']['TIMEMODIFIED']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$answer->userid);
- if ($user) {
- $answer->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the choice_answers
- $newid = insert_record ("choice_answers",$answer);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"choice_answers",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //forum mods
-
- //This is the "graphical" structure of the forum mod:
- //
- // forum
- // (CL,pk->id)
- // |
- // -----------------------------------
- // | |
- // subscriptions forum_discussions
- // (UL,pk->id, fk->forum) (UL,pk->id, fk->forum)
- // |
- // |
- // |
- // forum_posts
- // (UL,pk->id,fk->discussion,nt->parent,files)
- // |
- // |
- // |
- // forum_ratings
- // (UL,pk->id,fk->post)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function forum_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over forum table
- $forums = get_records ("forum","course",$preferences->backup_course,"id");
- if ($forums) {
- foreach ($forums as $forum) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print forum data
- fwrite ($bf,full_tag("ID",4,false,$forum->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"forum"));
- fwrite ($bf,full_tag("TYPE",4,false,$forum->type));
- fwrite ($bf,full_tag("NAME",4,false,$forum->name));
- fwrite ($bf,full_tag("INTRO",4,false,$forum->intro));
- fwrite ($bf,full_tag("OPEN",4,false,$forum->open));
- fwrite ($bf,full_tag("ASSESSED",4,false,$forum->assessed));
- fwrite ($bf,full_tag("FORCESUBSCRIBE",4,false,$forum->forcesubscribe));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$forum->timemodified));
-
- //if we've selected to backup users info, then execute backup_forum_suscriptions and
- //backup_forum_discussions
- if ($preferences->mods["forum"]->userinfo) {
- $status = backup_forum_subscriptions($bf,$preferences,$forum->id);
- if ($status) {
- $status = backup_forum_discussions($bf,$preferences,$forum->id);
- }
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- //if we've selected to backup users info, then backup files too
- if ($status) {
- if ($preferences->mods["forum"]->userinfo) {
- $status = backup_forum_files($bf,$preferences);
- }
- }
- return $status;
- }
-
- //Backup forum_subscriptions contents (executed from forum_backup_mods)
- function backup_forum_subscriptions ($bf,$preferences,$forum) {
-
- global $CFG;
-
- $status = true;
-
- $forum_subscriptions = get_records("forum_subscriptions","forum",$forum,"id");
- //If there is subscriptions
- if ($forum_subscriptions) {
- //Write start tag
- $status =fwrite ($bf,start_tag("SUBSCRIPTIONS",4,true));
- //Iterate over each answer
- foreach ($forum_subscriptions as $for_sus) {
- //Start suscription
- $status =fwrite ($bf,start_tag("SUBSCRIPTION",5,true));
- //Print forum_subscriptions contents
- fwrite ($bf,full_tag("ID",6,false,$for_sus->id));
- fwrite ($bf,full_tag("USERID",6,false,$for_sus->userid));
- //End subscription
- $status =fwrite ($bf,end_tag("SUBSCRIPTION",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("SUBSCRIPTIONS",4,true));
- }
- return $status;
- }
-
- //Backup forum_discussions contents (executed from forum_backup_mods)
- function backup_forum_discussions ($bf,$preferences,$forum) {
-
- global $CFG;
-
- $status = true;
-
- $forum_discussions = get_records("forum_discussions","forum",$forum,"id");
- //If there are discussions
- if ($forum_discussions) {
- //Write start tag
- $status =fwrite ($bf,start_tag("DISCUSSIONS",4,true));
- //Iterate over each discussion
- foreach ($forum_discussions as $for_dis) {
- //Start discussion
- $status =fwrite ($bf,start_tag("DISCUSSION",5,true));
- //Print forum_discussions contents
- fwrite ($bf,full_tag("ID",6,false,$for_dis->id));
- fwrite ($bf,full_tag("NAME",6,false,$for_dis->name));
- fwrite ($bf,full_tag("FIRSTPOST",6,false,$for_dis->firstpost));
- fwrite ($bf,full_tag("ASSESSED",6,false,$for_dis->assessed));
- fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$for_dis->timemodified));
- //Now print posts to xml
- $status = backup_forum_posts($bf,$preferences,$for_dis->id);
- //End discussion
- $status =fwrite ($bf,end_tag("DISCUSSION",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("DISCUSSIONS",4,true));
- }
- return $status;
- }
-
- //Backup forum_posts contents (executed from backup_forum_discussions)
- function backup_forum_posts ($bf,$preferences,$discussion) {
-
- global $CFG;
-
- $status = true;
-
- $forum_posts = get_records("forum_posts","discussion",$discussion,"id");
- //If there are posts
- if ($forum_posts) {
- //Write start tag
- $status =fwrite ($bf,start_tag("POSTS",6,true));
- //Iterate over each post
- foreach ($forum_posts as $for_pos) {
- //Start post
- $status =fwrite ($bf,start_tag("POST",7,true));
- //Print forum_posts contents
- fwrite ($bf,full_tag("ID",8,false,$for_pos->id));
- fwrite ($bf,full_tag("PARENT",8,false,$for_pos->parent));
- fwrite ($bf,full_tag("USERID",8,false,$for_pos->userid));
- fwrite ($bf,full_tag("CREATED",8,false,$for_pos->created));
- fwrite ($bf,full_tag("MODIFIED",8,false,$for_pos->modified));
- fwrite ($bf,full_tag("MAILED",8,false,$for_pos->mailed));
- fwrite ($bf,full_tag("SUBJECT",8,false,$for_pos->subject));
- fwrite ($bf,full_tag("MESSAGE",8,false,$for_pos->message));
- fwrite ($bf,full_tag("FORMAT",8,false,$for_pos->format));
- fwrite ($bf,full_tag("ATTACHMENT",8,false,$for_pos->attachment));
- fwrite ($bf,full_tag("TOTALSCORE",8,false,$for_pos->totalscore));
- //Now print ratings to xml
- $status = backup_forum_ratings($bf,$preferences,$for_pos->id);
-
- //End discussion
- $status =fwrite ($bf,end_tag("POST",7,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("POSTS",6,true));
- }
- return $status;
- }
-
-
- //Backup forum_ratings contents (executed from backup_forum_posts)
- function backup_forum_ratings ($bf,$preferences,$post) {
-
- global $CFG;
-
- $status = true;
-
- $forum_ratings = get_records("forum_ratings","post",$post,"id");
- //If there are ratings
- if ($forum_ratings) {
- //Write start tag
- $status =fwrite ($bf,start_tag("RATINGS",8,true));
- //Iterate over each rating
- foreach ($forum_ratings as $for_rat) {
- //Start rating
- $status =fwrite ($bf,start_tag("RATING",9,true));
- //Print forum_rating contents
- fwrite ($bf,full_tag("ID",10,false,$for_rat->id));
- fwrite ($bf,full_tag("USERID",10,false,$for_rat->userid));
- fwrite ($bf,full_tag("TIME",10,false,$for_rat->time));
- fwrite ($bf,full_tag("POST_RATING",10,false,$for_rat->rating));
- //End rating
- $status =fwrite ($bf,end_tag("RATING",9,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("RATINGS",8,true));
- }
- return $status;
- }
-
- //Backup forum files because we've selected to backup user info
- //and files are user info's level
- function backup_forum_files($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //First we check to moddata exists and create it as necessary
- //in temp/backup/$backup_code dir
- $status = check_and_create_moddata_dir($preferences->backup_unique_code);
- //Now copy the forum dir
- if ($status) {
- //Only if it exists !! Thanks to Daniel Miksik.
- if (is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/forum")) {
- $status = backup_copy_file($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/forum",
- $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/forum");
- }
- }
-
- return $status;
-
- }
-
-
- ////Return an array of info (name,value)
- function forum_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","forum");
- if ($ids = forum_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- //Subscriptions
- $info[1][0] = get_string("subscriptions","forum");
- if ($ids = forum_subscription_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- //Discussions
- $info[2][0] = get_string("discussions","forum");
- if ($ids = forum_discussion_ids_by_course ($course)) {
- $info[2][1] = count($ids);
- } else {
- $info[2][1] = 0;
- }
- //Posts
- $info[3][0] = get_string("posts","forum");
- if ($ids = forum_post_ids_by_course ($course)) {
- $info[3][1] = count($ids);
- } else {
- $info[3][1] = 0;
- }
- //Ratings
- $info[4][0] = get_string("ratings","forum");
- if ($ids = forum_rating_ids_by_course ($course)) {
- $info[4][1] = count($ids);
- } else {
- $info[4][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of forums id
- function forum_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}forum a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of forum subscriptions id
- function forum_subscription_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.forum
- FROM {$CFG->prefix}forum_subscriptions s,
- {$CFG->prefix}forum a
- WHERE a.course = '$course' AND
- s.forum = a.id");
- }
-
- //Returns an array of forum discussions id
- function forum_discussion_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.forum
- FROM {$CFG->prefix}forum_discussions s,
- {$CFG->prefix}forum a
- WHERE a.course = '$course' AND
- s.forum = a.id");
- }
-
- //Returns an array of forum posts id
- function forum_post_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT p.id , p.discussion, s.forum
- FROM {$CFG->prefix}forum_posts p,
- {$CFG->prefix}forum_discussions s,
- {$CFG->prefix}forum a
- WHERE a.course = '$course' AND
- s.forum = a.id AND
- p.discussion = s.id");
- }
-
- //Returns an array of ratings posts id
- function forum_rating_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT r.id, r.post, p.discussion, s.forum
- FROM {$CFG->prefix}forum_ratings r,
- {$CFG->prefix}forum_posts p,
- {$CFG->prefix}forum_discussions s,
- {$CFG->prefix}forum a
- WHERE a.course = '$course' AND
- s.forum = a.id AND
- p.discussion = s.id AND
- r.post = p.id");
- }
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //forum mods
-
- //This is the "graphical" structure of the forum mod:
- //
- // forum
- // (CL,pk->id)
- // |
- // -----------------------------------
- // | |
- // subscriptions forum_discussions
- // (UL,pk->id, fk->forum) (UL,pk->id, fk->forum)
- // |
- // |
- // |
- // forum_posts
- // (UL,pk->id,fk->discussion,nt->parent,files)
- // |
- // |
- // |
- // forum_ratings
- // (UL,pk->id,fk->post)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function forum_restore_mods($mod,$restore) {
-
- global $CFG,$db;
-
- $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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the FORUM record structure
- $forum->course = $restore->course_id;
- $forum->type = backup_todb($info['MOD']['#']['TYPE']['0']['#']);
- $forum->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $forum->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']);
- $forum->open = backup_todb($info['MOD']['#']['OPEN']['0']['#']);
- $forum->assessed = backup_todb($info['MOD']['#']['ASSESSED']['0']['#']);
- $forum->forcesubscribe = backup_todb($info['MOD']['#']['FORCESUBSCRIBE']['0']['#']);
- $forum->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-
- //The structure is equal to the db, so insert the forum
- $newid = insert_record ("forum",$forum);
-
- //Do some output
- echo "<ul><li>Forum \"".$forum->name."\"<br>";
- 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->mods[forum]->userinfo) {
- //Restore forum_subscriptions
- $status = forum_subscriptions_restore_mods ($newid,$info,$restore);
- if ($status) {
- //Restore forum_discussions
- $status = forum_discussions_restore_mods ($newid,$info,$restore);
- }
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
- //This function restores the forum_subscriptions
- function forum_subscriptions_restore_mods($forum_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the discussions array
- $subscriptions = $info['MOD']['#']['SUBSCRIPTIONS']['0']['#']['SUBSCRIPTION'];
-
- //Iterate over subscriptions
- for($i = 0; $i < sizeof($subscriptions); $i++) {
- $sus_info = $subscriptions[$i];
- //traverse_xmlize($sus_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sus_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sus_info['#']['USERID']['0']['#']);
-
- //Now, build the FORUM_SUBSCRIPTIONS record structure
- $subscription->forum = $forum_id;
- $subscription->userid = backup_todb($sus_info['#']['USERID']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$subscription->userid);
- if ($user) {
- $subscription->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the forum_subscription
- $newid = insert_record ("forum_subscriptions",$subscription);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"forum_subscriptions",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the forum_discussions
- function forum_discussions_restore_mods($forum_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the discussions array
- $discussions = $info['MOD']['#']['DISCUSSIONS']['0']['#']['DISCUSSION'];
-
- //Iterate over discussions
- for($i = 0; $i < sizeof($discussions); $i++) {
- $dis_info = $discussions[$i];
- //traverse_xmlize($dis_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($dis_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($dis_info['#']['USERID']['0']['#']);
-
- //Now, build the FORUM_DISCUSSIONS record structure
- $discussion->forum = $forum_id;
- $discussion->course = $restore->course_id;
- $discussion->name = backup_todb($dis_info['#']['NAME']['0']['#']);
- $discussion->firstpost = backup_todb($dis_info['#']['FIRSTPOST']['0']['#']);
- $discussion->assessed = backup_todb($dis_info['#']['ASSESSED']['0']['#']);
- $discussion->timemodified = backup_todb($dis_info['#']['TIMEMODIFIED']['0']['#']);
-
- //The structure is equal to the db, so insert the forum_discussions
- $newid = insert_record ("forum_discussions",$discussion);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"forum_discussions",$oldid,
- $newid);
- //Restore forum_posts
- $status = forum_posts_restore_mods ($forum_id,$newid,$dis_info,$restore);
- //Now recalculate firstpost field
- $old_firstpost = $discussion->firstpost;
- //Get its new post_id from backup_ids table
- $rec = backup_getid($restore->backup_unique_code,"forum_posts",$old_firstpost);
- if ($rec) {
- //Put its new firstpost
- $discussion->firstpost = $rec->new_id;
- } else {
- $discussion->firstpost = 0;
- }
- //Create temp discussion record
- $temp_discussion->id = $newid;
- $temp_discussion->firstpost = $discussion->firstpost;
- //Update discussion (only firstpost will be changed)
- $status = update_record("forum_discussions",$temp_discussion);
- //echo "Updated firstpost ".$old_firstpost." to ".$temp_discussion->firstpost."<br>"; //Debug
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the forum_posts
- function forum_posts_restore_mods($new_forum_id,$discussion_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the posts array
- $posts = $info['#']['POSTS']['0']['#']['POST'];
-
- //Iterate over posts
- for($i = 0; $i < sizeof($posts); $i++) {
- $pos_info = $posts[$i];
- //traverse_xmlize($pos_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($pos_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($pos_info['#']['USERID']['0']['#']);
-
- //Now, build the FORUM_POSTS record structure
- $post->discussion = $discussion_id;
- $post->parent = backup_todb($pos_info['#']['PARENT']['0']['#']);
- $post->userid = backup_todb($pos_info['#']['USERID']['0']['#']);
- $post->created = backup_todb($pos_info['#']['CREATED']['0']['#']);
- $post->modified = backup_todb($pos_info['#']['MODIFIED']['0']['#']);
- $post->mailed = backup_todb($pos_info['#']['MAILED']['0']['#']);
- $post->subject = backup_todb($pos_info['#']['SUBJECT']['0']['#']);
- $post->message = backup_todb($pos_info['#']['MESSAGE']['0']['#']);
- $post->format = backup_todb($pos_info['#']['FORMAT']['0']['#']);
- $post->attachment = backup_todb($pos_info['#']['ATTACHMENT']['0']['#']);
- $post->totalscore = backup_todb($pos_info['#']['TOTALSCORE']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$post->userid);
- if ($user) {
- $post->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the forum_posts
- $newid = insert_record ("forum_posts",$post);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"forum_posts",$oldid,
- $newid);
-
- //Get old forum id from backup_ids
- $rec = get_record("backup_ids","backup_code",$restore->backup_unique_code,
- "table_name","forum",
- "new_id",$new_forum_id);
- //Now copy moddata associated files
- $status = forum_restore_files ($rec->old_id, $new_forum_id,
- $oldid, $newid, $restore);
-
- //Now restore post ratings
- $status = forum_ratings_restore_mods($newid,$pos_info,$restore);
-
- } else {
- $status = false;
- }
- }
-
- //Now we get every post in this discussion_id and recalculate its parent post
- $posts = get_records ("forum_posts","discussion",$discussion_id);
- if ($posts) {
- //Iterate over each post
- foreach ($posts as $post) {
- //Get its parent
- $old_parent = $post->parent;
- //Get its new post_id from backup_ids table
- $rec = backup_getid($restore->backup_unique_code,"forum_posts",$old_parent);
- if ($rec) {
- //Put its new parent
- $post->parent = $rec->new_id;
- } else {
- $post->parent = 0;
- }
- //Create temp post record
- $temp_post->id = $post->id;
- $temp_post->parent = $post->parent;
- //echo "Updated parent ".$old_parent." to ".$temp_post->parent."<br>"; //Debug
- //Update post (only parent will be changed)
- $status = update_record("forum_posts",$temp_post);
- }
- }
-
- return $status;
- }
-
- //This function copies the forum related info from backup temp dir to course moddata folder,
- //creating it if needed and recoding everything (forum id and post id)
- function forum_restore_files ($oldforid, $newforid, $oldpostid, $newpostid, $restore) {
-
- global $CFG;
-
- $status = true;
- $todo = false;
- $moddata_path = "";
- $forum_path = "";
- $temp_path = "";
-
- //First, locate course's moddata directory
- $moddata_path = $CFG->dataroot."/".$restore->course_id."/".$CFG->moddata;
-
- //Check it exists and create it
- $status = check_dir_exists($moddata_path,true);
-
- //Now, locate forum directory
- if ($status) {
- $forum_path = $moddata_path."/forum";
- //Check it exists and create it
- $status = check_dir_exists($forum_path,true);
- }
-
- //Now locate the temp dir we are restoring from
- if ($status) {
- $temp_path = $CFG->dataroot."/temp/backup/".$restore->backup_unique_code.
- "/moddata/forum/".$oldforid."/".$oldpostid;
- //Check it exists
- if (is_dir($temp_path)) {
- $todo = true;
- }
- }
-
- //If todo, we create the neccesary dirs in course moddata/forum
- if ($status and $todo) {
- //First this forum id
- $this_forum_path = $forum_path."/".$newforid;
- $status = check_dir_exists($this_forum_path,true);
- //Now this post id
- $post_forum_path = $this_forum_path."/".$newpostid;
- //And now, copy temp_path to post_forum_path
- $status = backup_copy_file($temp_path, $post_forum_path);
- }
-
- return $status;
- }
-
- //This function restores the forum_ratings
- function forum_ratings_restore_mods($new_post_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the ratings array
- $ratings = $info['#']['RATINGS']['0']['#']['RATING'];
-
- //Iterate over ratings
- for($i = 0; $i < sizeof($ratings); $i++) {
- $rat_info = $ratings[$i];
- //traverse_xmlize($rat_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($rat_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($rat_info['#']['USERID']['0']['#']);
-
- //Now, build the FORM_RATINGS record structure
- $rating->post = $new_post_id;
- $rating->userid = backup_todb($rat_info['#']['USERID']['0']['#']);
- $rating->time = backup_todb($rat_info['#']['TIME']['0']['#']);
- $rating->rating = backup_todb($rat_info['#']['POST_RATING']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$rating->userid);
- if ($user) {
- $rating->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the forum_ratings
- $newid = insert_record ("forum_ratings",$rating);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"forum_ratings",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //journal mods
-
- //This is the "graphical" structure of the journal mod:
- //
- // journal
- // (CL,pk->id)
- // |
- // |
- // |
- // journal_entries
- // (UL,pk->id, fk->journal)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function journal_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over journal table
- $journals = get_records ("journal","course",$preferences->backup_course,"id");
- if ($journals) {
- foreach ($journals as $journal) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print journal data
- fwrite ($bf,full_tag("ID",4,false,$journal->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"journal"));
- fwrite ($bf,full_tag("NAME",4,false,$journal->name));
- fwrite ($bf,full_tag("INTRO",4,false,$journal->intro));
- fwrite ($bf,full_tag("DAYS",4,false,$journal->days));
- fwrite ($bf,full_tag("ASSESSED",4,false,$journal->assessed));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$journal->timemodified));
-
- //if we've selected to backup users info, then execute backup_journal_entries
- if ($preferences->mods["journal"]->userinfo) {
- $status = backup_journal_entries($bf,$preferences,$journal->id);
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- return $status;
- }
-
- //Backup journal_entries contents (executed from journal_backup_mods)
- function backup_journal_entries ($bf,$preferences,$journal) {
-
- global $CFG;
-
- $status = true;
-
- $journal_entries = get_records("journal_entries","journal",$journal,"id");
- //If there is entries
- if ($journal_entries) {
- //Write start tag
- $status =fwrite ($bf,start_tag("ENTRIES",4,true));
- //Iterate over each entry
- foreach ($journal_entries as $jou_ent) {
- //Start entry
- $status =fwrite ($bf,start_tag("ENTRY",5,true));
- //Print journal_entries contents
- fwrite ($bf,full_tag("ID",6,false,$jou_ent->id));
- fwrite ($bf,full_tag("USERID",6,false,$jou_ent->userid));
- fwrite ($bf,full_tag("MODIFIED",6,false,$jou_ent->modified));
- fwrite ($bf,full_tag("TEXT",6,false,$jou_ent->text));
- fwrite ($bf,full_tag("FORMAT",6,false,$jou_ent->format));
- fwrite ($bf,full_tag("RATING",6,false,$jou_ent->rating));
- fwrite ($bf,full_tag("COMMENT",6,false,$jou_ent->comment));
- fwrite ($bf,full_tag("TEACHER",6,false,$jou_ent->teacher));
- fwrite ($bf,full_tag("TIMEMARKED",6,false,$jou_ent->timemarked));
- fwrite ($bf,full_tag("MAILED",6,false,$jou_ent->mailed));
- //End entry
- $status =fwrite ($bf,end_tag("ENTRY",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("ENTRIES",4,true));
- }
- return $status;
- }
-
- ////Return an array of info (name,value)
- function journal_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","journal");
- if ($ids = journal_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- $info[1][0] = get_string("entries","journal");
- if ($ids = journal_entry_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of journals id
- function journal_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}journal a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of journal entries id
- function journal_entry_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.journal
- FROM {$CFG->prefix}journal_entries s,
- {$CFG->prefix}journal a
- WHERE a.course = '$course' AND
- s.journal = a.id");
- }
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //journal mods
-
- //This is the "graphical" structure of the journal mod:
- //
- // journal
- // (CL,pk->id)
- // |
- // |
- // |
- // journal_entries
- // (UL,pk->id, fk->journal)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the restore procedure about this mod
- function journal_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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the JOURNAL record structure
- $journal->course = $restore->course_id;
- $journal->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $journal->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']);
- $journal->days = backup_todb($info['MOD']['#']['DAYS']['0']['#']);
- $journal->assessed = backup_todb($info['MOD']['#']['ASSESSED']['0']['#']);
- $journal->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-
- //The structure is equal to the db, so insert the journal
- $newid = insert_record ("journal",$journal);
-
- //Do some output
- echo "<ul><li>Journal \"".$journal->name."\"<br>";
- 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->mods[journal]->userinfo) {
- //Restore journal_entries
- $status = journal_entries_restore_mods ($mod->id, $newid,$info,$restore);
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
-
- //This function restores the journal_entries
- function journal_entries_restore_mods($old_journal_id, $new_journal_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the entries array
- $entries = $info['MOD']['#']['ENTRIES']['0']['#']['ENTRY'];
-
- //Iterate over entries
- for($i = 0; $i < sizeof($entries); $i++) {
- $entry_info = $entries[$i];
- //traverse_xmlize($entry_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sub_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sub_info['#']['USERID']['0']['#']);
-
- //Now, build the JOURNAL_ENTRIES record structure
- $entry->journal = $new_journal_id;
- $entry->userid = backup_todb($entry_info['#']['USERID']['0']['#']);
- $entry->modified = backup_todb($entry_info['#']['MODIFIED']['0']['#']);
- $entry->text = backup_todb($entry_info['#']['TEXT']['0']['#']);
- $entry->format = backup_todb($entry_info['#']['FORMAT']['0']['#']);
- $entry->rating = backup_todb($entry_info['#']['RATING']['0']['#']);
- $entry->comment = backup_todb($entry_info['#']['COMMENT']['0']['#']);
- $entry->teacher = backup_todb($entry_info['#']['TEACHER']['0']['#']);
- $entry->timemarked = backup_todb($entry_info['#']['TIMEMARKED']['0']['#']);
- $entry->mailed = backup_todb($entry_info['#']['MAILED']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$entry->userid);
- if ($user) {
- $entry->userid = $user->new_id;
- }
-
- //We have to recode the teacher field
- $user = backup_getid($restore->backup_unique_code,"user",$entry->teacher);
- if ($user) {
- $entry->teacher = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the journal_entry
- $newid = insert_record ("journal_entries",$entry);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"journal_entry",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //pgassignment mods
-
- //This is the "graphical" structure of the pgassignment mod:
- //
- // pgassignment
- // (CL,pk->id)
- // |
- // -----------------------------------
- // | |
- // pgassignment_elements pgassignment_submissions
- // (CL,pk->id, fk->pgassignment) (UL,pk->id, fk->pgassignment,files)
- // |
- // |
- // |
- // pgasignments_grades
- // (UL,pk->id,fk->submission)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function NO_pgassignment_backup_mods($course,$user_data=false,$backup_unique_code) {
- print "hola";
- }
-
- ////Return an array of info (name,value)
- function pgassignment_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","pgassignment");
- if ($ids = pgassignment_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
- //Elements
- $info[1][0] = get_string("elements","pgassignment");
- if ($ids = pgassignment_element_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- //Submissions
- $info[2][0] = get_string("submissions","pgassignment");
- if ($ids = pgassignment_submission_ids_by_course ($course)) {
- $info[2][1] = count($ids);
- } else {
- $info[2][1] = 0;
- }
- //Grades
- $info[3][0] = get_string("grades","pgassignment");
- if ($ids = pgassignment_grade_ids_by_course ($course)) {
- $info[3][1] = count($ids);
- } else {
- $info[3][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of pgassignments id
- function pgassignment_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}pgassignment a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of pgassignment elements id
- function pgassignment_element_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.pgassignment
- FROM {$CFG->prefix}pgassignment_elements s,
- {$CFG->prefix}pgassignment a
- WHERE a.course = '$course' AND
- s.pgassignment = a.id");
- }
-
- //Returns an array of pgassignment submissions id
- function pgassignment_submission_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.pgassignment
- FROM {$CFG->prefix}pgassignment_submissions s,
- {$CFG->prefix}pgassignment a
- WHERE a.course = '$course' AND
- s.pgassignment = a.id");
- }
-
- //Returns an array of pgassignment grades id
- function pgassignment_grade_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT g.id , g.submission, s.pgassignment
- FROM {$CFG->prefix}pgassignment_grades g,
- {$CFG->prefix}pgassignment_submissions s,
- {$CFG->prefix}pgassignment a
- WHERE a.course = '$course' AND
- s.pgassignment = a.id AND
- g.submission = s.id");
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //quiz mods
-
- //To see, put your terminal to 132cc
-
- //This is the "graphical" structure of the quiz mod:
- //
- // quiz quiz_categories
- // (CL,pk->id) (CL,pk->id)
- // | |
- // ----------------------------------------------- |
- // | | | |
- // | | | |
- // | | | |
- // quiz_attempts quiz_grades quiz_question_grades |
- // (UL,pk->id, fk->quiz) (UL,pk->id,fk->quiz) (CL,pk->id,fk->quiz) |
- // | | |
- // | | |
- // | | |
- // quiz_responses | quiz_questions
- // (UL,pk->id, fk->attempt)----------------------------------------------------(CL,pk->id,fk->category,files)
- // |
- // |
- // |
- // ------------------------------------------------------------------------------------------------------
- // | | | |
- // | | | |
- // | | | | quiz_randomsamatch
- // quiz_truefalse quiz_shortanswer quiz_multichoice |---------(CL,pl->id,fk->question)
- // (CL,pl->id,fk->question) (CL,pl->id,fk->question) (CL,pl->id,fk->question) |
- // . . . |
- // . . . |
- // . . . | quiz_match
- // .................................................... |---------(CL,pl->id,fk->question)
- // . | .
- // . | .
- // . | .
- // quiz_answers | quiz_match_sub
- // (CL,pk->id,fk->question)----------------------------|---------(CL,pl->id,fk->question)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files
- //
- //-----------------------------------------------------------
-
- //THIS MOD BACKUP NEEDS TO USE THE mdl_backup_ids TABLE
-
- //This module is special, because we make the backup in two steps:
- // 1.-We backup every category and their questions (complete structure). It includes this tables:
- // - quiz_categories
- // - quiz_questions
- // - quiz_truefalse
- // - quiz_shortanswer
- // - quiz_multichoice
- // - quiz_randomsamatch
- // - quiz_match
- // - quiz_match_sub
- // - quiz_answers
- // All this backup info have its own section in moodle.xml (QUESTION_CATEGORIES) and it's generated
- // before every module backup standard invocation. And only if to backup quizzes has been selected !!
- // It's invoked with quiz_backup_question_categories. (course independent).
-
- // 2.-Standard module backup (Invoked via quiz_backup_mods). It includes this tables:
- // - quiz
- // - quiz_question_grades
- // - quiz_attempts
- // - quiz_grades
- // - quiz_responses
- // This step is the standard mod backup. (course dependent).
-
- //STEP 1. Backup categories/questions and associated structures
- // (course independent)
- function quiz_backup_question_categories($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //First, we get the used categories from backup_ids
- $categories = quiz_category_ids_by_backup ($preferences->backup_unique_code);
-
- //If we've categories
- if ($categories) {
- //Write start tag
- $status = fwrite($bf,start_tag("QUESTION_CATEGORIES",2,true));
- //Iterate over each category
- foreach ($categories as $cat) {
- //Start category
- $status =fwrite ($bf,start_tag("QUESTION_CATEGORY",3,true));
- //Get category data from quiz_categories
- $category = get_record ("quiz_categories","id",$cat->old_id);
- //Print category contents
- fwrite($bf,full_tag("ID",4,false,$category->id));
- fwrite($bf,full_tag("NAME",4,false,$category->name));
- fwrite($bf,full_tag("INFO",4,false,$category->info));
- fwrite($bf,full_tag("PUBLISH",4,false,$category->publish));
- //Now, backup their questions
- $status = quiz_backup_question($bf,$preferences,$category->id);
- //End category
- $status =fwrite ($bf,end_tag("QUESTION_CATEGORY",3,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("QUESTION_CATEGORIES",2,true));
- }
-
- return $status;
- }
-
- //This function backups all the questions in selected category and their
- //asociated data
- function quiz_backup_question($bf,$preferences,$category) {
-
- global $CFG;
-
- $status = true;
-
- $questions = get_records("quiz_questions","category",$category,"id");
- //If there is questions
- if ($questions) {
- //Write start tag
- $status =fwrite ($bf,start_tag("QUESTIONS",4,true));
- $counter = 0;
- //Iterate over each question
- foreach ($questions as $question) {
- //Start question
- $status =fwrite ($bf,start_tag("QUESTION",5,true));
- //Print question contents
- fwrite ($bf,full_tag("ID",6,false,$question->id));
- fwrite ($bf,full_tag("NAME",6,false,$question->name));
- fwrite ($bf,full_tag("QUESTIONTEXT",6,false,$question->questiontext));
- fwrite ($bf,full_tag("IMAGE",6,false,$question->image));
- fwrite ($bf,full_tag("DEFAULTGRADE",6,false,$question->defaultgrade));
- fwrite ($bf,full_tag("QTYPE",6,false,$question->qtype));
- //Now, depending of the qtype, call one function or other
- if ($question->qtype == "1") {
- $status = quiz_backup_shortanswer($bf,$preferences,$question->id);
- } else if ($question->qtype == "2") {
- $status = quiz_backup_truefalse($bf,$preferences,$question->id);
- } else if ($question->qtype == "3") {
- $status = quiz_backup_multichoice($bf,$preferences,$question->id);
- } else if ($question->qtype == "4") {
- //Random question. Nothing to write.
- } else if ($question->qtype == "5") {
- $status = quiz_backup_match($bf,$preferences,$question->id);
- } else if ($question->qtype == "6") {
- $status = quiz_backup_randomsamatch($bf,$preferences,$question->id);
- } else if ($question->qtype == "7") {
- //Description question. Nothing to write.
- }
- //End question
- $status =fwrite ($bf,end_tag("QUESTION",5,true));
- //Do some output
- $counter++;
- if ($counter % 10 == 0) {
- echo ".";
- if ($counter % 200 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("QUESTIONS",4,true));
- }
- return $status;
- }
-
- //This function backups the data in a truefalse question (qtype=2) and its
- //asociated data
- function quiz_backup_truefalse($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $truefalses = get_records("quiz_truefalse","question",$question,"id");
- //If there are truefalses
- if ($truefalses) {
- //Iterate over each truefalse
- foreach ($truefalses as $truefalse) {
- $status =fwrite ($bf,start_tag("TRUEFALSE",6,true));
- //Print truefalse contents
- fwrite ($bf,full_tag("TRUEANSWER",7,false,$truefalse->trueanswer));
- fwrite ($bf,full_tag("FALSEANSWER",7,false,$truefalse->falseanswer));
- $status =fwrite ($bf,end_tag("TRUEFALSE",6,true));
- }
- //Now print quiz_answers
- $status = quiz_backup_answers($bf,$preferences,$question);
- }
- return $status;
- }
-
- //This function backups the data in a shortanswer question (qtype=1) and its
- //asociated data
- function quiz_backup_shortanswer($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $shortanswers = get_records("quiz_shortanswer","question",$question,"id");
- //If there are shortanswers
- if ($shortanswers) {
- //Iterate over each shortanswer
- foreach ($shortanswers as $shortanswer) {
- $status =fwrite ($bf,start_tag("SHORTANSWER",6,true));
- //Print shortanswer contents
- fwrite ($bf,full_tag("ANSWERS",7,false,$shortanswer->answers));
- fwrite ($bf,full_tag("USECASE",7,false,$shortanswer->usecase));
- $status =fwrite ($bf,end_tag("SHORTANSWER",6,true));
- }
- //Now print quiz_answers
- $status = quiz_backup_answers($bf,$preferences,$question);
- }
- return $status;
- }
-
- //This function backups the data in a multichoice question (qtype=3) and its
- //asociated data
- function quiz_backup_multichoice($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $multichoices = get_records("quiz_multichoice","question",$question,"id");
- //If there are multichoices
- if ($multichoices) {
- //Iterate over each multichoice
- foreach ($multichoices as $multichoice) {
- $status =fwrite ($bf,start_tag("MULTICHOICE",6,true));
- //Print multichoice contents
- fwrite ($bf,full_tag("LAYOUT",7,false,$multichoice->layout));
- fwrite ($bf,full_tag("ANSWERS",7,false,$multichoice->answers));
- fwrite ($bf,full_tag("SINGLE",7,false,$multichoice->single));
- $status =fwrite ($bf,end_tag("MULTICHOICE",6,true));
- }
- //Now print quiz_answers
- $status = quiz_backup_answers($bf,$preferences,$question);
- }
- return $status;
- }
-
- //This function backups the data in a randomsamatch question (qtype=6) and its
- //asociated data
- function quiz_backup_randomsamatch($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $randomsamatchs = get_records("quiz_randomsamatch","question",$question,"id");
- //If there are randomsamatchs
- if ($randomsamatchs) {
- //Iterate over each randomsamatch
- foreach ($randomsamatchs as $randomsamatch) {
- $status =fwrite ($bf,start_tag("RANDOMSAMATCH",6,true));
- //Print randomsamatch contents
- fwrite ($bf,full_tag("CHOOSE",7,false,$randomsamatch->choose));
- $status =fwrite ($bf,end_tag("RANDOMSAMATCH",6,true));
- }
- }
- return $status;
- }
-
- //This function backups the data in a match question (qtype=5) and its
- //asociated data
- function quiz_backup_match($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $matchs = get_records("quiz_match_sub","question",$question,"id");
- //If there are matchs
- if ($matchs) {
- $status =fwrite ($bf,start_tag("MATCHS",6,true));
- //Iterate over each match
- foreach ($matchs as $match) {
- $status =fwrite ($bf,start_tag("MATCH",7,true));
- //Print match contents
- fwrite ($bf,full_tag("ID",8,false,$match->id));
- fwrite ($bf,full_tag("QUESTIONTEXT",8,false,$match->questiontext));
- fwrite ($bf,full_tag("ANSWERTEXT",8,false,$match->answertext));
- $status =fwrite ($bf,end_tag("MATCH",7,true));
- }
- $status =fwrite ($bf,end_tag("MATCHS",6,true));
- }
- return $status;
- }
-
- //This function backups the answers data in some question types
- //(truefalse, shortanswer,multichoice)
- function quiz_backup_answers($bf,$preferences,$question) {
-
- global $CFG;
-
- $status = true;
-
- $answers = get_records("quiz_answers","question",$question,"id");
- //If there are answers
- if ($answers) {
- $status =fwrite ($bf,start_tag("ANSWERS",6,true));
- //Iterate over each answer
- foreach ($answers as $answer) {
- $status =fwrite ($bf,start_tag("ANSWER",7,true));
- //Print answer contents
- fwrite ($bf,full_tag("ID",8,false,$answer->id));
- fwrite ($bf,full_tag("ANSWER_TEXT",8,false,$answer->answer));
- fwrite ($bf,full_tag("FRACTION",8,false,$answer->fraction));
- fwrite ($bf,full_tag("FEEDBACK",8,false,$answer->feedback));
- $status =fwrite ($bf,end_tag("ANSWER",7,true));
- }
- $status =fwrite ($bf,end_tag("ANSWERS",6,true));
- }
- return $status;
- }
-
-
-
-
-
- //STEP 2. Backup quizzes and associated structures
- // (course dependent)
- function quiz_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over quiz table
- $quizzes = get_records ("quiz","course",$preferences->backup_course,"id");
- if ($quizzes) {
- foreach ($quizzes as $quiz) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print quiz data
- fwrite ($bf,full_tag("ID",4,false,$quiz->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"quiz"));
- fwrite ($bf,full_tag("NAME",4,false,$quiz->name));
- fwrite ($bf,full_tag("INTRO",4,false,$quiz->intro));
- fwrite ($bf,full_tag("TIMEOPEN",4,false,$quiz->timeopen));
- fwrite ($bf,full_tag("TIMECLOSE",4,false,$quiz->timeclose));
- fwrite ($bf,full_tag("ATTEMPTS_NUMBER",4,false,$quiz->attempts));
- fwrite ($bf,full_tag("FEEDBACK",4,false,$quiz->feedback));
- fwrite ($bf,full_tag("CORRECTANSWERS",4,false,$quiz->correctanswers));
- fwrite ($bf,full_tag("GRADEMETHOD",4,false,$quiz->grademethod));
- fwrite ($bf,full_tag("REVIEW",4,false,$quiz->review));
- fwrite ($bf,full_tag("SHUFFLEQUESTIONS",4,false,$quiz->shufflequestions));
- fwrite ($bf,full_tag("SHUFFLEANSWERS",4,false,$quiz->shuffleanswers));
- fwrite ($bf,full_tag("QUESTIONS",4,false,$quiz->questions));
- fwrite ($bf,full_tag("SUMGRADES",4,false,$quiz->sumgrades));
- fwrite ($bf,full_tag("GRADE",4,false,$quiz->grade));
- fwrite ($bf,full_tag("TIMECREATED",4,false,$quiz->timecreated));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$quiz->timemodified));
- //Now we print to xml question_grades (Course Level)
- $status = backup_quiz_question_grades($bf,$preferences,$quiz->id);
- //if we've selected to backup users info, then execute:
- // - backup_quiz_grades
- // - backup_quiz_attempts
- if ($preferences->mods["quiz"]->userinfo and $status) {
- $status = backup_quiz_grades($bf,$preferences,$quiz->id);
- if ($status) {
- $status = backup_quiz_attempts($bf,$preferences,$quiz->id);
- }
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- return $status;
- }
-
- //Backup quiz_question_grades contents (executed from quiz_backup_mods)
- function backup_quiz_question_grades ($bf,$preferences,$quiz) {
-
- global $CFG;
-
- $status = true;
-
- $quiz_question_grades = get_records("quiz_question_grades","quiz",$quiz,"id");
- //If there are question_grades
- if ($quiz_question_grades) {
- //Write start tag
- $status =fwrite ($bf,start_tag("QUESTION_GRADES",4,true));
- //Iterate over each question_grade
- foreach ($quiz_question_grades as $que_gra) {
- //Start question grade
- $status =fwrite ($bf,start_tag("QUESTION_GRADE",5,true));
- //Print question_grade contents
- fwrite ($bf,full_tag("ID",6,false,$que_gra->id));
- fwrite ($bf,full_tag("QUESTION",6,false,$que_gra->question));
- fwrite ($bf,full_tag("GRADE",6,false,$que_gra->grade));
- //End question grade
- $status =fwrite ($bf,end_tag("QUESTION_GRADE",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("QUESTION_GRADES",4,true));
- }
- return $status;
- }
-
- //Backup quiz_grades contents (executed from quiz_backup_mods)
- function backup_quiz_grades ($bf,$preferences,$quiz) {
-
- global $CFG;
-
- $status = true;
-
- $quiz_grades = get_records("quiz_grades","quiz",$quiz,"id");
- //If there are grades
- if ($quiz_grades) {
- //Write start tag
- $status =fwrite ($bf,start_tag("GRADES",4,true));
- //Iterate over each grade
- foreach ($quiz_grades as $gra) {
- //Start grade
- $status =fwrite ($bf,start_tag("GRADE",5,true));
- //Print grade contents
- fwrite ($bf,full_tag("ID",6,false,$gra->id));
- fwrite ($bf,full_tag("USERID",6,false,$gra->userid));
- fwrite ($bf,full_tag("GRADEVAL",6,false,$gra->grade));
- fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$gra->timemodified));
- //End question grade
- $status =fwrite ($bf,end_tag("GRADE",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("GRADES",4,true));
- }
- return $status;
- }
-
- //Backup quiz_attempts contents (executed from quiz_backup_mods)
- function backup_quiz_attempts ($bf,$preferences,$quiz) {
-
- global $CFG;
-
- $status = true;
-
- $quiz_attempts = get_records("quiz_attempts","quiz",$quiz,"id");
- //If there are attempts
- if ($quiz_attempts) {
- //Write start tag
- $status =fwrite ($bf,start_tag("ATTEMPTS",4,true));
- //Iterate over each attempt
- foreach ($quiz_attempts as $attempt) {
- //Start attempt
- $status =fwrite ($bf,start_tag("ATTEMPT",5,true));
- //Print attempt contents
- fwrite ($bf,full_tag("ID",6,false,$attempt->id));
- fwrite ($bf,full_tag("USERID",6,false,$attempt->userid));
- fwrite ($bf,full_tag("ATTEMPTNUM",6,false,$attempt->attempt));
- fwrite ($bf,full_tag("SUMGRADES",6,false,$attempt->sumgrades));
- fwrite ($bf,full_tag("TIMESTART",6,false,$attempt->timestart));
- fwrite ($bf,full_tag("TIMEFINISH",6,false,$attempt->timefinish));
- fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$attempt->timemodified));
- //Now write to xml the responses (in this attempt)
- $status = backup_quiz_responses ($bf,$preferences,$attempt->id);
- //End attempt
- $status =fwrite ($bf,end_tag("ATTEMPT",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("ATTEMPTS",4,true));
- }
- return $status;
- }
-
- //Backup quiz_responses contents (executed from backup_quiz_attempts)
- function backup_quiz_responses ($bf,$preferences,$attempt) {
-
- global $CFG;
-
- $status = true;
-
- $quiz_responses = get_records("quiz_responses","attempt",$attempt,"id");
- //If there are responses
- if ($quiz_responses) {
- //Write start tag
- $status =fwrite ($bf,start_tag("RESPONSES",6,true));
- //Iterate over each response
- foreach ($quiz_responses as $response) {
- //Start response
- $status =fwrite ($bf,start_tag("RESPONSE",7,true));
- //Print response contents
- fwrite ($bf,full_tag("ID",8,false,$response->id));
- fwrite ($bf,full_tag("QUESTION",8,false,$response->question));
- fwrite ($bf,full_tag("ANSWER",8,false,$response->answer));
- fwrite ($bf,full_tag("GRADE",8,false,$response->grade));
- //End response
- $status =fwrite ($bf,end_tag("RESPONSE",7,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("RESPONSES",6,true));
- }
- return $status;
- }
-
-
-
-
-
-
- ////Return an array of info (name,value)
- function quiz_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //Deletes data from mdl_backup_ids (categories section)
- delete_category_ids ($backup_unique_code);
- //Create date into mdl_backup_ids (categories section)
- insert_category_ids ($course,$backup_unique_code);
- //First the course data
- $info[0][0] = get_string("modulenameplural","quiz");
- if ($ids = quiz_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
- //Categories
- $info[1][0] = get_string("categories","quiz");
- if ($ids = quiz_category_ids_by_backup ($backup_unique_code)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- //Questions
- $info[2][0] = get_string("questions","quiz");
- if ($ids = quiz_question_ids_by_backup ($backup_unique_code)) {
- $info[2][1] = count($ids);
- } else {
- $info[2][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- //Grades
- $info[3][0] = get_string("grades","quiz");
- if ($ids = quiz_grade_ids_by_course ($course)) {
- $info[3][1] = count($ids);
- } else {
- $info[3][1] = 0;
- }
- }
-
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of quiz id
- function quiz_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}quiz a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of categories id
- function quiz_category_ids_by_backup ($backup_unique_code) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.old_id, a.backup_code
- FROM {$CFG->prefix}backup_ids a
- WHERE a.backup_code = '$backup_unique_code' AND
- a.table_name = 'quiz_categories'");
- }
-
- function quiz_question_ids_by_backup ($backup_unique_code) {
-
- global $CFG;
-
- return get_records_sql ("SELECT q.id, q.category
- FROM {$CFG->prefix}backup_ids a,
- {$CFG->prefix}quiz_questions q
- WHERE a.backup_code = '$backup_unique_code' AND
- q.category = a.old_id AND
- a.table_name = 'quiz_categories'");
- }
-
- function quiz_grade_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT g.id, g.quiz
- FROM {$CFG->prefix}quiz a,
- {$CFG->prefix}quiz_grades g
- WHERE a.course = '$course' and
- g.quiz = a.id");
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //quiz mods
-
- //To see, put your terminal to 132cc
-
- //This is the "graphical" structure of the quiz mod:
- //
- // quiz quiz_categories
- // (CL,pk->id) (CL,pk->id)
- // | |
- // ----------------------------------------------- |
- // | | | |
- // | | | |
- // | | | |
- // quiz_attempts quiz_grades quiz_question_grades |
- // (UL,pk->id, fk->quiz) (UL,pk->id,fk->quiz) (CL,pk->id,fk->quiz) |
- // | | |
- // | | |
- // | | |
- // quiz_responses | quiz_questions
- // (UL,pk->id, fk->attempt)----------------------------------------------------(CL,pk->id,fk->category,files)
- // |
- // |
- // |
- // ------------------------------------------------------------------------------------------------------
- // | | | |
- // | | | |
- // | | | | quiz_randomsamatch
- // quiz_truefalse quiz_shortanswer quiz_multichoice |---------(CL,pl->id,fk->question)
- // (CL,pl->id,fk->question) (CL,pl->id,fk->question) (CL,pl->id,fk->question) |
- // . . . |
- // . . . |
- // . . . | quiz_match
- // .................................................... |---------(CL,pl->id,fk->question)
- // . | .
- // . | .
- // . | .
- // quiz_answers | quiz_match_sub
- // (CL,pk->id,fk->question)----------------------------|---------(CL,pl->id,fk->question)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files
- //
- //-----------------------------------------------------------
-
- //This module is special, because we make the restore in two steps:
- // 1.-We restore every category and their questions (complete structure). It includes this tables:
- // - quiz_categories
- // - quiz_questions
- // - quiz_truefalse
- // - quiz_shortanswer
- // - quiz_multichoice
- // - quiz_randomsamatch
- // - quiz_match
- // - quiz_match_sub
- // - quiz_answers
- // All this backup info have its own section in moodle.xml (QUESTION_CATEGORIES) and it's generated
- // before every module backup standard invocation. And only if to restore quizzes has been selected !!
- // It's invoked with quiz_restore_question_categories. (course independent).
-
- // 2.-Standard module restore (Invoked via quiz_restore_mods). It includes this tables:
- // - quiz
- // - quiz_question_grades
- // - quiz_attempts
- // - quiz_grades
- // - quiz_responses
- // This step is the standard mod backup. (course dependent).
-
- //STEP 1. Restore categories/questions and associated structures
- // (course independent)
- function quiz_restore_question_categories($category,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get record from backup_ids
- $data = backup_getid($restore->backup_unique_code,"quiz_categories",$category->id);
-
- if ($data) {
- //Now get completed xmlized object
- $info = $data->info;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ_CATEGORIES record structure
- $quiz_cat->course = $restore->course_id;
- $quiz_cat->name = backup_todb($info['QUESTION_CATEGORY']['#']['NAME']['0']['#']);
- $quiz_cat->info = backup_todb($info['QUESTION_CATEGORY']['#']['INFO']['0']['#']);
- $quiz_cat->publish = backup_todb($info['QUESTION_CATEGORY']['#']['PUBLISH']['0']['#']);
-
- //Now search it that category exists !!
- $cat = get_record("quiz_categories","name",$quiz_cat->name);
- //Create it if doesn't exists
- if (!$cat) {
- //The structure is equal to the db, so insert the quiz_categories
- $newid = insert_record ("quiz_categories",$quiz_cat);
- } else {
- //Exists, so get its id
- $newid = $cat->id;
- }
-
- //Do some output
- echo "<ul><li>Category \"".$quiz_cat->name."\"<br>";
- backup_flush(300);
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_categories",
- $category->id, $newid);
- //Now restore quiz_questions
- $status = quiz_restore_questions ($category->id, $newid,$info,$restore);
- } else {
- $status = false;
- }
-
-
- //Finalize ul
- echo "</ul>";
- }
-
- return $status;
- }
-
- function quiz_restore_questions ($old_category_id,$new_category_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the questions array
- $questions = $info['QUESTION_CATEGORY']['#']['QUESTIONS']['0']['#']['QUESTION'];
-
- //Iterate over questions
- for($i = 0; $i < sizeof($questions); $i++) {
- $que_info = $questions[$i];
- //traverse_xmlize($que_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($que_info['#']['ID']['0']['#']);
-
- //Now, build the QUIZ_QUESTIONS record structure
- $question->category = $new_category_id;
- $question->name = backup_todb($que_info['#']['NAME']['0']['#']);
- $question->questiontext = backup_todb($que_info['#']['QUESTIONTEXT']['0']['#']);
- $question->image = backup_todb($que_info['#']['IMAGE']['0']['#']);
- $question->defaultgrade = backup_todb($que_info['#']['DEFAULTGRADE']['0']['#']);
- $question->qtype = backup_todb($que_info['#']['QTYPE']['0']['#']);
-
- //The structure is equal to the db, so insert the quiz_questions
- $newid = insert_record ("quiz_questions",$question);
-
- //Do some output
- if (($i+1) % 2 == 0) {
- echo ".";
- if (($i+1) % 40 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_questions",$oldid,
- $newid);
- //Now, restore every quiz_answers in this question
- $status = quiz_restore_answers($oldid,$newid,$que_info,$restore);
- //Now, depending of the type of questions, invoke different functions
- if ($question->qtype == "1") {
- $status = quiz_restore_shortanswer($oldid,$newid,$que_info,$restore);
- } else if ($question->qtype == "2") {
- $status = quiz_restore_truefalse($oldid,$newid,$que_info,$restore);
- } else if ($question->qtype == "3") {
- $status = quiz_restore_multichoice($oldid,$newid,$que_info,$restore);
- } else if ($question->qtype == "4") {
- //Random question. Nothing to do.
- } else if ($question->qtype == "5") {
- $status = quiz_restore_match($oldid,$newid,$que_info,$restore);
- } else if ($question->qtype == "6") {
- $status = quiz_restore_randomsamatch($oldid,$newid,$que_info,$restore);
- } else if ($question->qtype == "7") {
- //Description question. Nothing to do.
- }
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- function quiz_restore_answers ($old_question_id,$new_question_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the answers array
- $answers = $info['#']['ANSWERS']['0']['#']['ANSWER'];
-
- //Iterate over answers
- for($i = 0; $i < sizeof($answers); $i++) {
- $ans_info = $answers[$i];
- //traverse_xmlize($ans_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($ans_info['#']['ID']['0']['#']);
-
- //Now, build the QUIZ_ANSWERS record structure
- $answer->question = $new_question_id;
- $answer->answer = backup_todb($ans_info['#']['ANSWER_TEXT']['0']['#']);
- $answer->fraction = backup_todb($ans_info['#']['FRACTION']['0']['#']);
- $answer->feedback = backup_todb($ans_info['#']['FEEDBACK']['0']['#']);
-
- //The structure is equal to the db, so insert the quiz_answers
- $newid = insert_record ("quiz_answers",$answer);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_answers",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- function quiz_restore_shortanswer ($old_question_id,$new_question_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the shortanswers array
- $shortanswers = $info['#']['SHORTANSWER'];
-
- //Iterate over shortanswers
- for($i = 0; $i < sizeof($shortanswers); $i++) {
- $sho_info = $shortanswers[$i];
- //traverse_xmlize($sho_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ_SHORTANSWER record structure
- $shortanswer->question = $new_question_id;
- $shortanswer->answers = backup_todb($sho_info['#']['ANSWERS']['0']['#']);
- $shortanswer->usecase = backup_todb($sho_info['#']['USECASE']['0']['#']);
-
- //We have to recode the answers field (a list of answers id)
- //Extracts answer id from sequence
- $answers_field = "";
- $in_first = true;
- $tok = strtok($shortanswer->answers,",");
- while ($tok) {
- //Get the answer from backup_ids
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$tok);
- if ($answer) {
- if ($in_first) {
- $answers_field .= $answer->new_id;
- $in_first = false;
- } else {
- $answers_field .= ",".$answer->new_id;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- //We have the answers field recoded to its new ids
- $shortanswer->answers = $answers_field;
-
- //The structure is equal to the db, so insert the quiz_shortanswer
- $newid = insert_record ("quiz_shortanswer",$shortanswer);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if (!$newid) {
- $status = false;
- }
- }
-
- return $status;
- }
-
- function quiz_restore_truefalse ($old_question_id,$new_question_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the truefalse array
- $truefalses = $info['#']['TRUEFALSE'];
-
- //Iterate over truefalse
- for($i = 0; $i < sizeof($truefalses); $i++) {
- $tru_info = $truefalses[$i];
- //traverse_xmlize($tru_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ_TRUEFALSE record structure
- $truefalse->question = $new_question_id;
- $truefalse->trueanswer = backup_todb($tru_info['#']['TRUEANSWER']['0']['#']);
- $truefalse->falseanswer = backup_todb($tru_info['#']['FALSEANSWER']['0']['#']);
-
- ////We have to recode the trueanswer field
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$truefalse->trueanswer);
- if ($answer) {
- $truefalse->trueanswer = $answer->new_id;
- }
-
- ////We have to recode the falseanswer field
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$truefalse->falseanswer);
- if ($answer) {
- $truefalse->falseanswer = $answer->new_id;
- }
-
- //The structure is equal to the db, so insert the quiz_truefalse
- $newid = insert_record ("quiz_truefalse",$truefalse);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if (!$newid) {
- $status = false;
- }
- }
-
- return $status;
- }
-
- function quiz_restore_multichoice ($old_question_id,$new_question_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the multichoices array
- $multichoices = $info['#']['MULTICHOICE'];
-
- //Iterate over multichoices
- for($i = 0; $i < sizeof($multichoices); $i++) {
- $mul_info = $multichoices[$i];
- //traverse_xmlize($mul_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ_MULTICHOICE record structure
- $multichoice->question = $new_question_id;
- $multichoice->layout = backup_todb($mul_info['#']['LAYOUT']['0']['#']);
- $multichoice->answers = backup_todb($mul_info['#']['ANSWERS']['0']['#']);
- $multichoice->single = backup_todb($mul_info['#']['SINGLE']['0']['#']);
-
- //We have to recode the answers field (a list of answers id)
- //Extracts answer id from sequence
- $answers_field = "";
- $in_first = true;
- $tok = strtok($multichoice->answers,",");
- while ($tok) {
- //Get the answer from backup_ids
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$tok);
- if ($answer) {
- if ($in_first) {
- $answers_field .= $answer->new_id;
- $in_first = false;
- } else {
- $answers_field .= ",".$answer->new_id;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- //We have the answers field recoded to its new ids
- $multichoice->answers = $answers_field;
-
- //The structure is equal to the db, so insert the quiz_shortanswer
- $newid = insert_record ("quiz_multichoice",$multichoice);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if (!$newid) {
- $status = false;
- }
- }
-
- return $status;
- }
-
- function quiz_restore_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']['#']);
-
- //The structure is equal to the db, so insert the quiz_match_sub
- $newid = insert_record ("quiz_match_sub",$match_sub);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_match_sub",$oldid,
- $newid);
- //We have a new match_sub, append it to subquestions_field
- if ($in_first) {
- $subquestions_field .= $newid;
- $in_first = false;
- } else {
- $subquestions_field .= ",".$newid;
- }
- } else {
- $status = false;
- }
- }
-
- //We have created every match_sub, now create the match
- $match->question = $new_question_id;
- $match->subquestions = $subquestions_field;
-
- //The structure is equal to the db, so insert the quiz_match_sub
- $newid = insert_record ("quiz_match",$match);
-
- if (!$newid) {
- $status = false;
- }
-
- return $status;
- }
-
- function quiz_restore_randomsamatch ($old_question_id,$new_question_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the randomsamatchs array
- $randomsamatchs = $info['#']['RANDOMSAMATCH'];
-
- //Iterate over randomsamatchs
- for($i = 0; $i < sizeof($randomsamatchs); $i++) {
- $ran_info = $randomsamatchs[$i];
- //traverse_xmlize($ran_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ_RANDOMSAMATCH record structure
- $randomsamatch->question = $new_question_id;
- $randomsamatch->choose = backup_todb($ran_info['#']['CHOOSE']['0']['#']);
-
- //The structure is equal to the db, so insert the quiz_randomsamatch
- $newid = insert_record ("quiz_randomsamatch",$randomsamatch);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if (!$newid) {
- $status = false;
- }
- }
-
- return $status;
- }
-
-
-
-
- //STEP 2. Restore quizzes and associated structures
- // (course dependent)
- function quiz_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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the QUIZ record structure
- $quiz->course = $restore->course_id;
- $quiz->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $quiz->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']);
- $quiz->timeopen = backup_todb($info['MOD']['#']['TIMEOPEN']['0']['#']);
- $quiz->timeclose = backup_todb($info['MOD']['#']['TIMECLOSE']['0']['#']);
- $quiz->attempts = backup_todb($info['MOD']['#']['ATTEMPTS_NUMBER']['0']['#']);
- $quiz->feedback = backup_todb($info['MOD']['#']['FEEDBACK']['0']['#']);
- $quiz->correctanswers = backup_todb($info['MOD']['#']['CORRECTANSWERS']['0']['#']);
- $quiz->grademethod = backup_todb($info['MOD']['#']['GRADEMETHOD']['0']['#']);
- $quiz->review = backup_todb($info['MOD']['#']['REVIEW']['0']['#']);
- $quiz->shufflequestions = backup_todb($info['MOD']['#']['SHUFFLEQUESTIONS']['0']['#']);
- $quiz->shuffleanswers = backup_todb($info['MOD']['#']['SHUFFLEANSWERS']['0']['#']);
- $quiz->questions = backup_todb($info['MOD']['#']['QUESTIONS']['0']['#']);
- $quiz->sumgrades = backup_todb($info['MOD']['#']['SUMGRADES']['0']['#']);
- $quiz->grade = backup_todb($info['MOD']['#']['GRADE']['0']['#']);
- $quiz->timecreated = backup_todb($info['MOD']['#']['TIMECREATED']['0']['#']);
- $quiz->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
-
- //We have to recode the questions field (a list of questions id)
- //Extracts question id from sequence
- $questions_field = "";
- $in_first = true;
- $tok = strtok($quiz->questions,",");
- while ($tok) {
- //Get the question from backup_ids
- $question = backup_getid($restore->backup_unique_code,"quiz_questions",$tok);
- if ($question) {
- if ($in_first) {
- $questions_field .= $question->new_id;
- $in_first = false;
- } else {
- $questions_field .= ",".$question->new_id;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- //We have the questions field recoded to its new ids
- $quiz->questions = $questions_field;
-
- //The structure is equal to the db, so insert the quiz
- $newid = insert_record ("quiz",$quiz);
-
- //Do some output
- echo "<ul><li>Quiz \"".$quiz->name."\"<br>";
- backup_flush(300);
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,$mod->modtype,
- $mod->id, $newid);
- //We have to restore the question_grades now (course level table)
- $status = quiz_question_grades_restore_mods($newid,$info,$restore);
- //Now check if want to restore user data and do it.
- if ($restore->mods[quiz]->userinfo) {
- //Restore quiz_attempts
- $status = quiz_attempts_restore_mods ($newid,$info,$restore);
- if ($status) {
- //Restore quiz_grades
- $status = quiz_grades_restore_mods ($newid,$info,$restore);
- }
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
- //This function restores the quiz_question_grades
- function quiz_question_grades_restore_mods($quiz_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the quiz_question_grades array
- $grades = $info['MOD']['#']['QUESTION_GRADES']['0']['#']['QUESTION_GRADE'];
-
- //Iterate over question_grades
- for($i = 0; $i < sizeof($grades); $i++) {
- $gra_info = $grades[$i];
- //traverse_xmlize($gra_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($gra_info['#']['ID']['0']['#']);
-
- //Now, build the QUESTION_GRADES record structure
- $grade->quiz = $quiz_id;
- $grade->question = backup_todb($gra_info['#']['QUESTION']['0']['#']);
- $grade->grade = backup_todb($gra_info['#']['GRADE']['0']['#']);
-
- //We have to recode the question field
- $question = backup_getid($restore->backup_unique_code,"quiz_questions",$grade->question);
- if ($question) {
- $grade->question = $question->new_id;
- }
-
- //The structure is equal to the db, so insert the quiz_question_grades
- $newid = insert_record ("quiz_question_grades",$grade);
-
- //Do some output
- if (($i+1) % 10 == 0) {
- echo ".";
- if (($i+1) % 200 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_question_grades",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the quiz_attempts
- function quiz_attempts_restore_mods($quiz_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the quiz_attempts array
- $attempts = $info['MOD']['#']['ATTEMPTS']['0']['#']['ATTEMPT'];
-
- //Iterate over attempts
- for($i = 0; $i < sizeof($attempts); $i++) {
- $att_info = $attempts[$i];
- //traverse_xmlize($att_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($att_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($att_info['#']['USERID']['0']['#']);
-
- //Now, build the ATTEMPTS record structure
- $attempt->quiz = $quiz_id;
- $attempt->userid = backup_todb($att_info['#']['USERID']['0']['#']);
- $attempt->attempt = backup_todb($att_info['#']['ATTEMPTNUM']['0']['#']);
- $attempt->sumgrades = backup_todb($att_info['#']['SUMGRADES']['0']['#']);
- $attempt->timestart = backup_todb($att_info['#']['TIMESTART']['0']['#']);
- $attempt->timefinish = backup_todb($att_info['#']['TIMEFINISH']['0']['#']);
- $attempt->timemodified = backup_todb($att_info['#']['TIMEMODIFIED']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$attempt->userid);
- if ($user) {
- $attempt->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the quiz_attempts
- $newid = insert_record ("quiz_attempts",$attempt);
-
- //Do some output
- if (($i+1) % 10 == 0) {
- echo ".";
- if (($i+1) % 200 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_attempts",$oldid,
- $newid);
- //Now process quiz_responses
- $status = quiz_responses_restore_mods($newid,$att_info,$restore);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the quiz_responses
- function quiz_responses_restore_mods($attempt_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the quiz_responses array
- $responses = $info['#']['RESPONSES']['0']['#']['RESPONSE'];
- //Iterate over responses
- for($i = 0; $i < sizeof($responses); $i++) {
- $res_info = $responses[$i];
- //traverse_xmlize($res_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($res_info['#']['ID']['0']['#']);
-
- //Now, build the RESPONSES record structure
- $response->attempt = $attempt_id;
- $response->question = backup_todb($res_info['#']['QUESTION']['0']['#']);
- $response->answer = backup_todb($res_info['#']['ANSWER']['0']['#']);
- $response->grade = backup_todb($res_info['#']['GRADE']['0']['#']);
-
- //We have to recode the question field
- $question = backup_getid($restore->backup_unique_code,"quiz_questions",$response->question);
- if ($question) {
- $response->question = $question->new_id;
- }
-
- //We have to recode the answer field
- //It depends of the question type !!
- //We get the question first
- $question = get_record("quiz_questions","id",$response->question);
- //It exists
- if ($question) {
- //Depending of the qtype, we make different recodes
- switch ($question->qtype) {
- case 1: //SHORTANSWER QTYPE
- //Nothing to do. The response is a text.
- break;
- case 2: //TRUEFALSE QTYPE
- //The answer is one answer id. We must recode it
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$response->answer);
- if ($answer) {
- $response->answer = $answer->new_id;
- }
- break;
- case 3: //MULTICHOICE QTYPE
- //The answer is a comma separated list of answers. We must recode them
- $answer_field = "";
- $in_first = true;
- $tok = strtok($response->answer,",");
- while ($tok) {
- //Get the answer from backup_ids
- $answer = backup_getid($restore->backup_unique_code,"quiz_answers",$tok);
- if ($answer) {
- if ($in_first) {
- $answer_field .= $answer->new_id;
- $in_first = false;
- } else {
- $answer_field .= ",".$answer->new_id;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- $response->answer = $answer_field;
- break;
- case 4: //RANDOM QTYPE
- //The answer links to another question id, we must recode it
- $answer_link = backup_getid($restore->backup_unique_code,"quiz_questions",$response->answer);
- if ($answer_link) {
- $response->answer = $answer_link->new_id;
- }
- break;
- case 5: //MATCH QTYPE
- //The answer is a comma separated list of hypen separated math_subs (for question and answer)
- $answer_field = "";
- $in_first = true;
- $tok = strtok($response->answer,",");
- while ($tok) {
- //Extract the match_sub for the question and the answer
- $exploded = explode("-",$tok);
- $match_question_id = $exploded[0];
- $match_answer_id = $exploded[1];
- //Get the match_sub from backup_ids
- $match_que = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_question_id);
- //Get the answer from backup_ids
- $match_ans = backup_getid($restore->backup_unique_code,"quiz_match_sub",$match_answer_id);
- if ($match_que and $match_ans) {
- 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;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- $response->answer = $answer_field;
- break;
- case 6: //RANDOMSAMATCH QTYPE
- //The answer is a comma separated list of hypen separated question_id and answer_id. We must recode them
- $answer_field = "";
- $in_first = true;
- $tok = strtok($response->answer,",");
- while ($tok) {
- //Extract the question_id and the answer_id
- $exploded = explode("-",$tok);
- $question_id = $exploded[0];
- $answer_id = $exploded[1];
- //Get the question from backup_ids
- $que = backup_getid($restore->backup_unique_code,"quiz_questions",$question_id);
- //Get the answer from backup_ids
- $ans = backup_getid($restore->backup_unique_code,"quiz_answers",$answer_id);
- if ($que and $ans) {
- if ($in_first) {
- $answer_field .= $que->new_id."-".$ans->new_id;
- $in_first = false;
- } else {
- $answer_field .= ",".$que->new_id."-".$ans->new_id;
- }
- }
- //check for next
- $tok = strtok(",");
- }
- $response->answer = $answer_field;
- break;
- case 7: //DESCRIPTION QTYPE
- //Nothing to do (there is no awser to this qtype)
- //But this case must exist !!
- break;
- default: //UNMATCHED QTYPE.
- //This is an error (unimplemented qtype)
- $status = false;
- break;
- }
- } else {
- $status = false;
- }
-
- //The structure is equal to the db, so insert the quiz_attempts
- $newid = insert_record ("quiz_responses",$response);
-
- //Do some output
- if (($i+1) % 10 == 0) {
- echo ".";
- if (($i+1) % 200 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_responses",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the quiz_grades
- function quiz_grades_restore_mods($quiz_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the quiz_grades array
- $grades = $info['MOD']['#']['GRADES']['0']['#']['GRADE'];
-
- //Iterate over grades
- for($i = 0; $i < sizeof($grades); $i++) {
- $gra_info = $grades[$i];
- //traverse_xmlize($gra_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($gra_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($gra_info['#']['USERID']['0']['#']);
-
- //Now, build the GRADES record structure
- $grade->quiz = $quiz_id;
- $grade->userid = backup_todb($gra_info['#']['USERID']['0']['#']);
- $grade->grade = backup_todb($gra_info['#']['GRADEVAL']['0']['#']);
- $grade->timemodified = backup_todb($gra_info['#']['TIMEMODIFIED']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$grade->userid);
- if ($user) {
- $grade->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the quiz_grades
- $newid = insert_record ("quiz_grades",$grade);
-
- //Do some output
- if (($i+1) % 10 == 0) {
- echo ".";
- if (($i+1) % 200 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"quiz_grades",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //resource mods
-
- //This is the "graphical" structure of the resource mod:
- //
- // resource
- // (CL,pk->id,files)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the backup procedure about this mod
- function resource_backup_mods($bf,$preferences) {
- global $CFG;
-
- $status = true;
-
- ////Iterate over resource table
- $resources = get_records ("resource","course",$preferences->backup_course,"id");
- if ($resources) {
- foreach ($resources as $resource) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print assignment data
- fwrite ($bf,full_tag("ID",4,false,$resource->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"resource"));
- fwrite ($bf,full_tag("NAME",4,false,$resource->name));
- fwrite ($bf,full_tag("TYPE",4,false,$resource->type));
- fwrite ($bf,full_tag("REFERENCE",4,false,$resource->reference));
- fwrite ($bf,full_tag("SUMMARY",4,false,$resource->summary));
- fwrite ($bf,full_tag("ALLTEXT",4,false,$resource->alltext));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$resource->timemodified));
- //End mod
- $status = fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- return $status;
- }
-
- ////Return an array of info (name,value)
- function resource_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","resource");
- if ($ids = resource_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of resources id
- function resource_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}resource a
- WHERE a.course = '$course'");
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //resource mods
-
- //This is the "graphical" structure of the resource mod:
- //
- // resource
- // (CL,pk->id,files)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- //This function executes all the restore procedure about this mod
- function resource_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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the RESOURCE record structure
- $resource->course = $restore->course_id;
- $resource->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $resource->type = $info['MOD']['#']['TYPE']['0']['#'];
- $resource->reference = backup_todb($info['MOD']['#']['REFERENCE']['0']['#']);
- $resource->summary = backup_todb($info['MOD']['#']['SUMMARY']['0']['#']);
- $resource->alltext = backup_todb($info['MOD']['#']['ALLTEXT']['0']['#']);
- $resource->timemodified = $info['MOD']['#']['TIMEMODIFIED']['0']['#'];
-
- //The structure is equal to the db, so insert the resource
- $newid = insert_record ("resource",$resource);
-
- //Do some output
- echo "<ul><li>Resource \"".$resource->name."\"<br>";
- backup_flush(300);
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,$mod->modtype,
- $mod->id, $newid);
-
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //survey mods
-
- //This is the "graphical" structure of the survey mod:
- // --------------------
- // survey | survey_questions |
- // (CL,pk->id) |(CL,pk->id,?????) |
- // | --------------------
- // |
- // -----------------------------------
- // | |
- // survey_analysis survey_answers
- // (UL,pk->id, fk->survey) (UL,pk->id, fk->survey)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
- function survey_backup_mods($bf,$preferences) {
-
- global $CFG;
-
- $status = true;
-
- //Iterate over survey table
- $surveys = get_records ("survey","course",$preferences->backup_course,"id");
- if ($surveys) {
- foreach ($surveys as $survey) {
- //Start mod
- fwrite ($bf,start_tag("MOD",3,true));
- //Print choice data
- fwrite ($bf,full_tag("ID",4,false,$survey->id));
- fwrite ($bf,full_tag("MODTYPE",4,false,"survey"));
- fwrite ($bf,full_tag("TEMPLATE",4,false,$survey->template));
- fwrite ($bf,full_tag("DAYS",4,false,$survey->days));
- fwrite ($bf,full_tag("TIMECREATED",4,false,$survey->timecreated));
- fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$survey->timemodified));
- fwrite ($bf,full_tag("NAME",4,false,$survey->name));
- fwrite ($bf,full_tag("INTRO",4,false,$survey->intro));
- fwrite ($bf,full_tag("QUESTIONS",4,false,$survey->questions));
-
- //if we've selected to backup users info, then execute backup_survey_answers and
- //backup_survey_analysis
- if ($preferences->mods["survey"]->userinfo) {
- $status = backup_survey_answers($bf,$preferences,$survey->id);
- $status = backup_survey_analysis($bf,$preferences,$survey->id);
- }
- //End mod
- $status =fwrite ($bf,end_tag("MOD",3,true));
- }
- }
- return $status;
- }
-
- //Backup survey_answers contents (executed from survey_backup_mods)
- function backup_survey_answers ($bf,$preferences,$survey) {
-
- global $CFG;
-
- $status = true;
-
- $survey_answers = get_records("survey_answers","survey",$survey,"id");
- //If there is answers
- if ($survey_answers) {
- //Write start tag
- $status =fwrite ($bf,start_tag("ANSWERS",4,true));
- //Iterate over each answer
- foreach ($survey_answers as $sur_ans) {
- //Start answer
- $status =fwrite ($bf,start_tag("ANSWER",5,true));
- //Print survey_answers contents
- fwrite ($bf,full_tag("ID",6,false,$sur_ans->id));
- fwrite ($bf,full_tag("USERID",6,false,$sur_ans->userid));
- fwrite ($bf,full_tag("QUESTION",6,false,$sur_ans->question));
- fwrite ($bf,full_tag("TIME",6,false,$sur_ans->time));
- fwrite ($bf,full_tag("ANSWER1",6,false,$sur_ans->answer1));
- fwrite ($bf,full_tag("ANSWER2",6,false,$sur_ans->answer2));
- //End answer
- $status =fwrite ($bf,end_tag("ANSWER",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("ANSWERS",4,true));
- }
- return $status;
- }
-
- //Backup survey_analysis contents (executed from survey_backup_mods)
- function backup_survey_analysis ($bf,$preferences,$survey) {
-
- global $CFG;
-
- $status = true;
-
- $survey_analysis = get_records("survey_analysis","survey",$survey,"id");
- //If there is analysis
- if ($survey_analysis) {
- //Write start tag
- $status =fwrite ($bf,start_tag("ANALYSIS",4,true));
- //Iterate over each analysis
- foreach ($survey_analysis as $sur_ana) {
- //Start answer
- $status =fwrite ($bf,start_tag("ANALYS",5,true));
- //Print survey_analysis contents
- fwrite ($bf,full_tag("ID",6,false,$sur_ana->id));
- fwrite ($bf,full_tag("USERID",6,false,$sur_ana->userid));
- fwrite ($bf,full_tag("NOTES",6,false,$sur_ana->notes));
- //End answer
- $status =fwrite ($bf,end_tag("ANALYS",5,true));
- }
- //Write end tag
- $status =fwrite ($bf,end_tag("ANALYSIS",4,true));
- }
- return $status;
- }
-
- ////Return an array of info (name,value)
- function survey_check_backup_mods($course,$user_data=false,$backup_unique_code) {
- //First the course data
- $info[0][0] = get_string("modulenameplural","survey");
- if ($ids = survey_ids ($course)) {
- $info[0][1] = count($ids);
- } else {
- $info[0][1] = 0;
- }
-
- //Now, if requested, the user_data
- if ($user_data) {
- //Subscriptions
- $info[1][0] = get_string("answers","survey");
- if ($ids = survey_answer_ids_by_course ($course)) {
- $info[1][1] = count($ids);
- } else {
- $info[1][1] = 0;
- }
- }
- return $info;
- }
-
-
-
-
-
-
- // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE
-
- //Returns an array of surveys id
- function survey_ids ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT a.id, a.course
- FROM {$CFG->prefix}survey a
- WHERE a.course = '$course'");
- }
-
- //Returns an array of survey answer id
- function survey_answer_ids_by_course ($course) {
-
- global $CFG;
-
- return get_records_sql ("SELECT s.id , s.survey
- FROM {$CFG->prefix}survey_answers s,
- {$CFG->prefix}survey a
- WHERE a.course = '$course' AND
- s.survey = a.id");
- }
-
-?>
+++ /dev/null
-<?PHP //$Id$
- //This php script contains all the stuff to backup/restore
- //survey mods
-
- //This is the "graphical" structure of the survey mod:
- // --------------------
- // survey | survey_questions |
- // (CL,pk->id) |(CL,pk->id,?????) |
- // | --------------------
- // |
- // -----------------------------------
- // | |
- // survey_analysis survey_answers
- // (UL,pk->id, fk->survey) (UL,pk->id, fk->survey)
- //
- // Meaning: pk->primary key field of the table
- // fk->foreign key to link with parent
- // nt->nested field (recursive data)
- // CL->course level info
- // UL->user level info
- // files->table may have files)
- //
- //-----------------------------------------------------------
-
-
- function survey_restore_mods($mod,$restore) {
-
- global $CFG,$db;
-
- $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;
- //traverse_xmlize($info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //Now, build the SURVEY record structure
- $survey->course = $restore->course_id;
- $survey->template = backup_todb($info['MOD']['#']['TEMPLATE']['0']['#']);
- $survey->days = backup_todb($info['MOD']['#']['DAYS']['0']['#']);
- $survey->timecreated = backup_todb($info['MOD']['#']['TIMECREATED']['0']['#']);
- $survey->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
- $survey->name = backup_todb($info['MOD']['#']['NAME']['0']['#']);
- $survey->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']);
- $survey->questions = backup_todb($info['MOD']['#']['QUESTIONS']['0']['#']);
-
- //The structure is equal to the db, so insert the survey
- $newid = insert_record ("survey",$survey);
-
- //Do some output
- echo "<ul><li>Survey \"".$survey->name."\"<br>";
- 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->mods[survey]->userinfo) {
- //Restore survey_answers
- $status = survey_answers_restore_mods ($newid,$info,$restore);
- //Restore survey_analysis
- if ($status) {
- $status = survey_analysis_restore_mods ($newid,$info,$restore);
- }
- }
- } else {
- $status = false;
- }
-
- //Finalize ul
- echo "</ul>";
-
- } else {
- $status = false;
- }
-
- return $status;
- }
-
- //This function restores the survey_answers
- function survey_answers_restore_mods($survey_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the answers array
- $answers = $info['MOD']['#']['ANSWERS']['0']['#']['ANSWER'];
-
- //Iterate over answers
- for($i = 0; $i < sizeof($answers); $i++) {
- $sub_info = $answers[$i];
- //traverse_xmlize($sub_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sub_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sub_info['#']['USERID']['0']['#']);
-
- //Now, build the SURVEY_ANSWERS record structure
- $answer->survey = $survey_id;
- $answer->userid = backup_todb($sub_info['#']['USERID']['0']['#']);
- $answer->question = backup_todb($sub_info['#']['QUESTION']['0']['#']);
- $answer->time = backup_todb($sub_info['#']['TIME']['0']['#']);
- $answer->answer1 = backup_todb($sub_info['#']['ANSWER1']['0']['#']);
- $answer->answer2 = backup_todb($sub_info['#']['ANSWER2']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$answer->userid);
- if ($user) {
- $answer->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the survey_answers
- $newid = insert_record ("survey_answers",$answer);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"survey_answers",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-
- //This function restores the survey_analysis
- function survey_analysis_restore_mods($survey_id,$info,$restore) {
-
- global $CFG;
-
- $status = true;
-
- //Get the analysis array
- $analysis = $info['MOD']['#']['ANALYSIS']['0']['#']['ANALYS'];
-
- //Iterate over analysis
- for($i = 0; $i < sizeof($analysis); $i++) {
- $sub_info = $analysis[$i];
- //traverse_xmlize($sub_info); //Debug
- //print_object ($GLOBALS['traverse_array']); //Debug
- //$GLOBALS['traverse_array']=""; //Debug
-
- //We'll need this later!!
- $oldid = backup_todb($sub_info['#']['ID']['0']['#']);
- $olduserid = backup_todb($sub_info['#']['USERID']['0']['#']);
-
- //Now, build the SURVEY_ANALYSIS record structure
- $analys->survey = $survey_id;
- $analys->userid = backup_todb($sub_info['#']['USERID']['0']['#']);
- $analys->notes = backup_todb($sub_info['#']['NOTES']['0']['#']);
-
- //We have to recode the userid field
- $user = backup_getid($restore->backup_unique_code,"user",$analys->userid);
- if ($user) {
- $analys->userid = $user->new_id;
- }
-
- //The structure is equal to the db, so insert the survey_analysis
- $newid = insert_record ("survey_analysis",$analys);
-
- //Do some output
- if (($i+1) % 50 == 0) {
- echo ".";
- if (($i+1) % 1000 == 0) {
- echo "<br>";
- }
- backup_flush(300);
- }
-
- if ($newid) {
- //We have the newid, update backup_ids
- backup_putid($restore->backup_unique_code,"survey_analysis",$oldid,
- $newid);
- } else {
- $status = false;
- }
- }
-
- return $status;
- }
-?>