From b3d2aa67f4ed8bf8a1ba8665e0791b2546c776a5 Mon Sep 17 00:00:00 2001 From: Eloy Lafuente Date: Sat, 31 Jul 2010 22:33:41 +0000 Subject: [PATCH] MDL-23479 backup - glossary restore & old code deleted (but restore logs) --- .../restore_glossary_activity_task.class.php | 76 ++ .../moodle2/restore_glossary_stepslib.php | 152 ++++ mod/glossary/backuplib.php | 426 ----------- mod/glossary/restorelib.php | 723 ------------------ 4 files changed, 228 insertions(+), 1149 deletions(-) create mode 100644 mod/glossary/backup/moodle2/restore_glossary_activity_task.class.php create mode 100644 mod/glossary/backup/moodle2/restore_glossary_stepslib.php delete mode 100644 mod/glossary/backuplib.php diff --git a/mod/glossary/backup/moodle2/restore_glossary_activity_task.class.php b/mod/glossary/backup/moodle2/restore_glossary_activity_task.class.php new file mode 100644 index 00000000000..36675bb47d0 --- /dev/null +++ b/mod/glossary/backup/moodle2/restore_glossary_activity_task.class.php @@ -0,0 +1,76 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot . '/mod/glossary/backup/moodle2/restore_glossary_stepslib.php'); // Because it exists (must) + +/** + * glossary restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_glossary_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new restore_glossary_activity_structure_step('glossary_structure', 'glossary.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('glossary', array('intro'), 'glossary'); + $contents[] = new restore_decode_content('glossary_entries', array('definition'), 'glossary_entry'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('GLOSSARYVIEWBYID', '/mod/glossary/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('GLOSSARYINDEX', '/mod/glossary/index.php?id=$1', 'course'); + + return $rules; + + } +} diff --git a/mod/glossary/backup/moodle2/restore_glossary_stepslib.php b/mod/glossary/backup/moodle2/restore_glossary_stepslib.php new file mode 100644 index 00000000000..74e9f8c5d28 --- /dev/null +++ b/mod/glossary/backup/moodle2/restore_glossary_stepslib.php @@ -0,0 +1,152 @@ +. + +/** + * @package moodlecore + * @subpackage backup-moodle2 + * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Define all the restore steps that will be used by the restore_glossary_activity_task + */ + +/** + * Structure step to restore one glossary activity + */ +class restore_glossary_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + $userinfo = $this->get_setting_value('userinfo'); + + $paths[] = new restore_path_element('glossary', '/activity/glossary'); + $paths[] = new restore_path_element('glossary_category', '/activity/glossary/categories/category'); + if ($userinfo) { + $paths[] = new restore_path_element('glossary_entry', '/activity/glossary/entries/entry'); + $paths[] = new restore_path_element('glossary_alias', '/activity/glossary/entries/entry/aliases/alias'); + $paths[] = new restore_path_element('glossary_rating', '/activity/glossary/entries/entry/ratings/rating'); + $paths[] = new restore_path_element('glossary_category_entry', + '/activity/glossary/categories/category/category_entries/category_entry'); + } + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_glossary($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->assesstimestart = $this->apply_date_offset($data->assesstimestart); + $data->assesstimefinish = $this->apply_date_offset($data->assesstimefinish); + if ($data->scale < 0) { // scale found, get mapping + $data->scale = -($this->get_mappingid('scale', abs($data->scale))); + } + $formats = get_list_of_plugins('mod/glossary/formats'); // Check format + if (!in_array($data->displayformat, $formats)) { + $data->displayformat = 'dictionary'; + } + + // insert the glossary record + $newitemid = $DB->insert_record('glossary', $data); + $this->apply_activity_instance($newitemid); + } + + protected function process_glossary_entry($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->glossaryid = $this->get_new_parentid('glossary'); + $data->userid = $this->get_mappingid('user', $data->userid); + $data->sourceglossaryid = $this->get_mappingid('glossary', $data->sourceglossaryid); + + $data->timecreated = $this->apply_date_offset($data->timecreated); + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the entry record + $newitemid = $DB->insert_record('glossary_entries', $data); + $this->set_mapping('glossary_entry', $oldid, $newitemid, true); // childs and files by itemname + } + + protected function process_glossary_alias($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->entryid = $this->get_new_parentid('glossary_entry'); + $data->alias = $data->alias_text; + $newitemid = $DB->insert_record('glossary_alias', $data); + } + + protected function process_glossary_rating($data) { + global $DB; + + $data = (object)$data; + + // Cannot use ratings API, cause, it's missing the ability to specify times (modified/created) + $data->contextid = $this->task->get_contextid(); + $data->itemid = $this->get_new_parentid('glossary_entry'); + if ($data->scaleid < 0) { // scale found, get mapping + $data->scaleid = -($this->get_mappingid('scale', abs($data->scaleid))); + } + $data->rating = $data->value; + $data->userid = $this->get_mappingid('user', $data->userid); + $data->timecreated = $this->apply_date_offset($data->timecreated); + $data->timemodified = $this->apply_date_offset($data->timemodified); + + $newitemid = $DB->insert_record('rating', $data); + } + + protected function process_glossary_category($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->glossaryid = $this->get_new_parentid('glossary'); + $newitemid = $DB->insert_record('glossary_categories', $data); + $this->set_mapping('glossary_category', $oldid, $newitemid); + } + + protected function process_glossary_category_entry($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->categoryid = $this->get_new_parentid('glossary_category'); + $data->entryid = $this->get_mappingid('glossary_entry', $data->entryid); + $newitemid = $DB->insert_record('glossary_entries_categories', $data); + } + + protected function after_execute() { + // Add glossary related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_glossary', 'intro', null); + // Add entries related files, matching by itemname (glossary_entry) + $this->add_related_files('mod_glossary', 'entry', 'glossary_entry'); + $this->add_related_files('mod_glossary', 'attachment', 'glossary_entry'); + } +} diff --git a/mod/glossary/backuplib.php b/mod/glossary/backuplib.php deleted file mode 100644 index 45e2376aefe..00000000000 --- a/mod/glossary/backuplib.php +++ /dev/null @@ -1,426 +0,0 @@ -id) (CL,pk->id,fk->glossaryid) - // | | - // | | - // | | - // glossary_entries --------------------------------glossary_entries_categories - // (UL,pk->id, fk->glossaryid, files) | (UL, pk->categoryid,entryid) - // | | - // | |--------------------glossary_ratings - // | | (UL, pk->id, pk->entryid) - // glossary_comments | - // (UL,pk->id, fk->entryid) |---------------------glossary_alias - // (UL, pk->id, pk->entryid) - // - // - // 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 glossary_backup_mods($bf,$preferences) { - global $CFG, $DB; - - $status = true; - - //Iterate over glossary table - $glossaries = $DB->get_records ("glossary", array("course"=>$preferences->backup_course), "mainglossary"); - if ($glossaries) { - foreach ($glossaries as $glossary) { - if (backup_mod_selected($preferences,'glossary',$glossary->id)) { - $status = glossary_backup_one_mod($bf,$preferences,$glossary); - } - } - } - return $status; - } - - function glossary_backup_one_mod($bf,$preferences,$glossary) { - global $CFG, $DB; - - if (is_numeric($glossary)) { - $glossary = $DB->get_record('glossary', array('id'=>$glossary)); - } - - $status = true; - - //Start mod - fwrite ($bf,start_tag("MOD",3,true)); - //Print glossary data - fwrite ($bf,full_tag("ID",4,false,$glossary->id)); - fwrite ($bf,full_tag("MODTYPE",4,false,"glossary")); - fwrite ($bf,full_tag("NAME",4,false,$glossary->name)); - fwrite ($bf,full_tag("INTRO",4,false,$glossary->intro)); - fwrite ($bf,full_tag("ALLOWDUPLICATEDENTRIES",4,false,$glossary->allowduplicatedentries)); - fwrite ($bf,full_tag("DISPLAYFORMAT",4,false,$glossary->displayformat)); - fwrite ($bf,full_tag("MAINGLOSSARY",4,false,$glossary->mainglossary)); - fwrite ($bf,full_tag("SHOWSPECIAL",4,false,$glossary->showspecial)); - fwrite ($bf,full_tag("SHOWALPHABET",4,false,$glossary->showalphabet)); - fwrite ($bf,full_tag("SHOWALL",4,false,$glossary->showall)); - fwrite ($bf,full_tag("ALLOWCOMMENTS",4,false,$glossary->allowcomments)); - fwrite ($bf,full_tag("ALLOWPRINTVIEW",4,false,$glossary->allowprintview)); - fwrite ($bf,full_tag("USEDYNALINK",4,false,$glossary->usedynalink)); - fwrite ($bf,full_tag("DEFAULTAPPROVAL",4,false,$glossary->defaultapproval)); - fwrite ($bf,full_tag("GLOBALGLOSSARY",4,false,$glossary->globalglossary)); - fwrite ($bf,full_tag("ENTBYPAGE",4,false,$glossary->entbypage)); - fwrite ($bf,full_tag("EDITALWAYS",4,false,$glossary->editalways)); - fwrite ($bf,full_tag("RSSTYPE",4,false,$glossary->rsstype)); - fwrite ($bf,full_tag("RSSARTICLES",4,false,$glossary->rssarticles)); - fwrite ($bf,full_tag("TIMECREATED",4,false,$glossary->timecreated)); - fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$glossary->timemodified)); - fwrite ($bf,full_tag("ASSESSED",4,false,$glossary->assessed)); - fwrite ($bf,full_tag("ASSESSTIMESTART",4,false,$glossary->assesstimestart)); - fwrite ($bf,full_tag("ASSESSTIMEFINISH",4,false,$glossary->assesstimefinish)); - fwrite ($bf,full_tag("SCALE",4,false,$glossary->scale)); - - //Only if preferences->backup_users != 2 (none users). Else, teachers entries will be included. - if ($preferences->backup_users != 2) { - backup_glossary_entries($bf,$preferences,$glossary->id, $preferences->mods["glossary"]->userinfo); - } - - backup_glossary_categories($bf,$preferences,$glossary->id, $preferences->mods["glossary"]->userinfo); - - //End mod - $status =fwrite ($bf,end_tag("MOD",3,true)); - - return $status; - } - - //Backup glossary_categories and entries_categories contents (executed from glossary_backup_mods) - function backup_glossary_categories ($bf,$preferences,$glossary, $userinfo) { - global $CFG, $DB; - - $status = true; - - $glossary_categories = $DB->get_records("glossary_categories", array("glossaryid"=>$glossary),"id"); - //If there is categories - if ($glossary_categories) { - $status =fwrite ($bf,start_tag("CATEGORIES",4,true)); - - //Iterate over each category - foreach ($glossary_categories as $glo_cat) { - //Start category - //Print category contents - $status =fwrite ($bf,start_tag("CATEGORY",5,true)); - - fwrite ($bf,full_tag("ID",6,false,$glo_cat->id)); - fwrite ($bf,full_tag("GLOSSARYID",6,false,$glo_cat->glossaryid)); - fwrite ($bf,full_tag("NAME",6,false,$glo_cat->name)); - fwrite ($bf,full_tag("USEDYNALINK",6,false,$glo_cat->usedynalink)); - - //Only if preferences->backup_users != 2 (none users). Else, teachers entries will be included. - if ($preferences->backup_users != 2) { - $status = backup_glossary_entries_categories ($bf,$preferences,$glo_cat->id); - } - - $status =fwrite ($bf,end_tag("CATEGORY",5,true)); - - } - //Write end tag - $status =fwrite ($bf,end_tag("CATEGORIES",4,true)); - } - return $status; - } - - //Backup entries_categories contents (executed from backup_glossary_categories) - function backup_glossary_entries_categories ($bf,$preferences,$categoryid) { - global $CFG, $DB; - - $status = true; - - $entries = $DB->get_records("glossary_entries_categories", array("categoryid"=>$categoryid)); - if ($entries) { - $status =fwrite ($bf,start_tag("ENTRIES",6,true)); - foreach ($entries as $entry) { - fwrite ($bf,start_tag("ENTRY",7,true)); - fwrite ($bf,full_tag("ENTRYID",8,false,$entry->entryid)); - $status =fwrite ($bf,end_tag("ENTRY",7,true)); - } - $status =fwrite ($bf,end_tag("ENTRIES",6,true)); - } - return $status; - } - - //Backup glossary_entries contents (executed from glossary_backup_mods) - function backup_glossary_entries ($bf,$preferences,$glossary, $userinfo) { - global $CFG, $DB; - - $status = true; - - $glossary_entries = $DB->get_records("glossary_entries", array("glossaryid"=>$glossary),"id"); - //If there is entries - if ($glossary_entries) { - $dumped_entries = 0; - - //Iterate over each entry - foreach ($glossary_entries as $glo_ent) { - //Start entry - //Print submission contents - if ($glo_ent->teacherentry or $userinfo) { - $dumped_entries++; - if ($dumped_entries == 1) { - //Write start tag - $status =fwrite ($bf,start_tag("ENTRIES",4,true)); - } - $status =fwrite ($bf,start_tag("ENTRY",5,true)); - - fwrite ($bf,full_tag("ID",6,false,$glo_ent->id)); - fwrite ($bf,full_tag("USERID",6,false,$glo_ent->userid)); - fwrite ($bf,full_tag("CONCEPT",6,false,trim($glo_ent->concept))); - fwrite ($bf,full_tag("DEFINITION",6,false,$glo_ent->definition)); - fwrite ($bf,full_tag("FORMAT",6,false,$glo_ent->definitionformat)); - fwrite ($bf,full_tag("ATTACHMENT",6,false,$glo_ent->attachment)); - fwrite ($bf,full_tag("SOURCEGLOSSARYID",6,false,$glo_ent->sourceglossaryid)); - fwrite ($bf,full_tag("USEDYNALINK",6,false,$glo_ent->usedynalink)); - fwrite ($bf,full_tag("CASESENSITIVE",6,false,$glo_ent->casesensitive)); - fwrite ($bf,full_tag("FULLMATCH",6,false,$glo_ent->fullmatch)); - fwrite ($bf,full_tag("APPROVED",6,false,$glo_ent->approved)); - fwrite ($bf,full_tag("TIMECREATED",6,false,$glo_ent->timecreated)); - fwrite ($bf,full_tag("TIMEMODIFIED",6,false,$glo_ent->timemodified)); - fwrite ($bf,full_tag("TEACHERENTRY",6,false,$glo_ent->teacherentry)); - - $status = backup_glossary_aliases ($bf,$preferences,$glo_ent->id); - - if ( $userinfo ) { - $status = backup_glossary_comments ($bf,$preferences,$glo_ent->id); - $status = backup_glossary_ratings ($bf,$preferences,$glo_ent->id); - } - - $status =fwrite ($bf,end_tag("ENTRY",5,true)); - - //Now include entry attachment in backup (if it exists) - if ($glo_ent->attachment) { - $status = backup_glossary_files($bf,$preferences,$glossary,$glo_ent->id); - } - } - } - if ( $dumped_entries > 0 ) { - //Write end tag - $status =fwrite ($bf,end_tag("ENTRIES",4,true)); - } - } - return $status; - } - - //Backup glossary_comments contents (executed from backup_glossary_entries) - function backup_glossary_comments ($bf,$preferences,$entryid) { - global $CFG, $DB; - - $status = true; - $params = array(); - $params[] = $entryid; - $sql = 'SELECT g.id AS glossaryid, g.course as courseid FROM {glossary_entries} e, {glossary} g WHERE e.glossaryid = g.id AND e.id=?'; - $result = $DB->get_record_sql($sql, $params); - if ($cm = get_coursemodule_from_instance('glossary', $result->glossaryid, $result->courseid)) { - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - } - - $comments = $DB->get_records('comments', array('itemid'=>$entryid, 'commentarea'=>'glossary_entry', 'contextid'=>$context->id)); - if ($comments) { - $status =fwrite ($bf,start_tag("COMMENTS",6,true)); - foreach ($comments as $comment) { - $status =fwrite ($bf,start_tag("COMMENT",7,true)); - - fwrite ($bf,full_tag("ID",8,false,$comment->id)); - fwrite ($bf,full_tag("USERID",8,false,$comment->userid)); - fwrite ($bf,full_tag("CONTENT",8,false,$comment->content)); - fwrite ($bf,full_tag("COMMENTAREA",8,false,$comment->commentarea)); - fwrite ($bf,full_tag("FORMAT",8,false,$comment->format)); - fwrite ($bf,full_tag("TIMECREATED",8,false,$comment->timecreated)); - - $status =fwrite ($bf,end_tag("COMMENT",7,true)); - } - $status =fwrite ($bf,end_tag("COMMENTS",6,true)); - } - return $status; - } - - //Backup glossary_ratings contents (executed from backup_glossary_entries) - //todo andrew can this be removed? - /*function backup_glossary_ratings ($bf,$preferences,$entryid) { - global $CFG, $DB; - - $status = true; - - $ratings = $DB->get_records("glossary_ratings", array("entryid"=>$entryid)); - if ($ratings) { - $status =fwrite ($bf,start_tag("RATINGS",6,true)); - foreach ($ratings as $rating) { - $status =fwrite ($bf,start_tag("RATING",7,true)); - - fwrite ($bf,full_tag("ID",8,false,$rating->id)); - fwrite ($bf,full_tag("USERID",8,false,$rating->userid)); - fwrite ($bf,full_tag("TIME",8,false,$rating->time)); - fwrite ($bf,full_tag("RATING",8,false,$rating->rating)); - - $status =fwrite ($bf,end_tag("RATING",7,true)); - } - $status =fwrite ($bf,end_tag("RATINGS",6,true)); - } - return $status; - }*/ - - //Backup glossary_alias contents (executed from backup_glossary_entries) - function backup_glossary_aliases ($bf,$preferences,$entryid) { - global $CFG, $DB; - - $status = true; - - $aliases = $DB->get_records("glossary_alias", array("entryid"=>$entryid)); - if ($aliases) { - $status =fwrite ($bf,start_tag("ALIASES",6,true)); - foreach ($aliases as $alias) { - $status =fwrite ($bf,start_tag("ALIAS",7,true)); - - fwrite ($bf,full_tag("ALIAS_TEXT",8,false,trim($alias->alias))); - - $status =fwrite ($bf,end_tag("ALIAS",7,true)); - } - $status =fwrite ($bf,end_tag("ALIASES",6,true)); - } - return $status; - } - - //Backup glossary files because we've selected to backup user info - //or current entry is a teacher entry - function backup_glossary_files($bf,$preferences,$glossary,$entry) { - 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 we check that moddata/glossary dir exists and create it as necessary - //in temp/backup/$backup_code/moddata dir - $glo_dir_to = $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code. - "/".$CFG->moddata."/glossary"; - //Let's create it as necessary - $status = check_dir_exists($glo_dir_to,true); - - //Now we check that the moddata/glossary/$glossary dir exists and create it as necessary - //in temp/backup/$backup_code/moddata/glossary - $status = check_dir_exists($glo_dir_to."/".$glossary,true); - - //Now copy the moddata/glossary/$glossary/$entry to - //temp/backup/$backup_code/moddata/glossary/$glossary/$entry - if ($status) { - //Calculate moddata/glossary dir - $glo_dir_from = $CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/glossary"; - //Only if it exists !! - if (is_dir($glo_dir_from."/".$glossary."/".$entry)) { - $status = backup_copy_file($glo_dir_from."/".$glossary."/".$entry, - $glo_dir_to."/".$glossary."/".$entry); - } - } - - return $status; - - } - - ////Return an array of info (name,value) - function glossary_check_backup_mods($course,$user_data=false,$backup_unique_code,$instances=null) { - if (!empty($instances) && is_array($instances) && count($instances)) { - $info = array(); - foreach ($instances as $id => $instance) { - $info += glossary_check_backup_mods_instances($instance,$backup_unique_code); - } - return $info; - } - //First the course data - $info[0][0] = get_string("modulenameplural","glossary"); - if ($ids = glossary_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("concepts","glossary"); - if ($ids = glossary_entries_ids_by_course ($course)) { - $info[1][1] = count($ids); - } else { - $info[1][1] = 0; - } - } - return $info; - } - - ////Return an array of info (name,value) - function glossary_check_backup_mods_instances($instance,$backup_unique_code) { - //First the course data - $info[$instance->id.'0'][0] = ''.$instance->name.''; - $info[$instance->id.'0'][1] = ''; - - //Now, if requested, the user_data - if (!empty($instance->userdata)) { - $info[$instance->id.'1'][0] = get_string("concepts","glossary"); - if ($ids = glossary_entries_ids_by_instance ($instance->id)) { - $info[$instance->id.'1'][1] = count($ids); - } else { - $info[$instance->id.'1'][1] = 0; - } - } - return $info; - } - - //Return a content encoded to support interactivities linking. Every module - //should have its own. They are called automatically from the backup procedure. - function glossary_encode_content_links ($content,$preferences) { - - global $CFG; - - $base = preg_quote($CFG->wwwroot,"/"); - - //Link to the list of glossarys - $buscar="/(".$base."\/mod\/glossary\/index.php\?id\=)([0-9]+)/"; - $result= preg_replace($buscar,'$@GLOSSARYINDEX*$2@$',$content); - - //Link to glossary view by moduleid - $buscar="/(".$base."\/mod\/glossary\/view.php\?id\=)([0-9]+)/"; - $result= preg_replace($buscar,'$@GLOSSARYVIEWBYID*$2@$',$result); - - return $result; - } - - // INTERNAL FUNCTIONS. BASED IN THE MOD STRUCTURE - - //Returns an array of glossaries id - function glossary_ids ($course) { - global $DB; - - return $DB->get_records_sql ("SELECT a.id, a.course - FROM {glossary} a - WHERE a.course = ?", array($course)); - } - - //Returns an array of glossary_answers id - function glossary_entries_ids_by_course ($course) { - global $DB; - - return $DB->get_records_sql ("SELECT s.id , s.glossaryid - FROM {glossary_entries} s, {glossary} a - WHERE a.course = ? AND s.glossaryid = a.id", array($course)); - } - - //Returns an array of glossary_answers id - function glossary_entries_ids_by_instance ($instanceid) { - global $DB; - - return $DB->get_records_sql ("SELECT s.id , s.glossaryid - FROM {glossary_entries} s - WHERE s.glossaryid = ?", array($instanceid)); - } - diff --git a/mod/glossary/restorelib.php b/mod/glossary/restorelib.php index ac9c065d3d4..e9c295220ae 100644 --- a/mod/glossary/restorelib.php +++ b/mod/glossary/restorelib.php @@ -28,729 +28,6 @@ // //----------------------------------------------------------- - //This function executes all the restore procedure about this mod - function glossary_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; - // if necessary, write to restorelog and adjust date/time fields - if ($restore->course_startdateoffset) { - restore_log_date_changes('Glossary', $restore, $info['MOD']['#'], array('ASSESSTIMESTART', 'ASSESSTIMEFINISH')); - } - //traverse_xmlize($info); //Debug - //print_object ($GLOBALS['traverse_array']); //Debug - //$GLOBALS['traverse_array']=""; //Debug - - //Now, build the glossary record structure - $glossary->course = $restore->course_id; - $glossary->name = backup_todb($info['MOD']['#']['NAME']['0']['#']); - $glossary->intro = backup_todb($info['MOD']['#']['INTRO']['0']['#']); - $glossary->allowduplicatedentries = backup_todb($info['MOD']['#']['ALLOWDUPLICATEDENTRIES']['0']['#']); - $glossary->displayformat = backup_todb($info['MOD']['#']['DISPLAYFORMAT']['0']['#']); - $glossary->mainglossary = backup_todb($info['MOD']['#']['MAINGLOSSARY']['0']['#']); - $glossary->showspecial = backup_todb($info['MOD']['#']['SHOWSPECIAL']['0']['#']); - $glossary->showalphabet = backup_todb($info['MOD']['#']['SHOWALPHABET']['0']['#']); - $glossary->showall = backup_todb($info['MOD']['#']['SHOWALL']['0']['#']); - $glossary->allowcomments = backup_todb($info['MOD']['#']['ALLOWCOMMENTS']['0']['#']); - $glossary->allowprintview = backup_todb($info['MOD']['#']['ALLOWPRINTVIEW']['0']['#']); - $glossary->usedynalink = backup_todb($info['MOD']['#']['USEDYNALINK']['0']['#']); - $glossary->defaultapproval = backup_todb($info['MOD']['#']['DEFAULTAPPROVAL']['0']['#']); - $glossary->globalglossary = backup_todb($info['MOD']['#']['GLOBALGLOSSARY']['0']['#']); - $glossary->entbypage = backup_todb($info['MOD']['#']['ENTBYPAGE']['0']['#']); - $glossary->editalways = backup_todb($info['MOD']['#']['EDITALWAYS']['0']['#']); - $glossary->rsstype = backup_todb($info['MOD']['#']['RSSTYPE']['0']['#']); - $glossary->rssarticles = backup_todb($info['MOD']['#']['RSSARTICLES']['0']['#']); - $glossary->timecreated = backup_todb($info['MOD']['#']['TIMECREATED']['0']['#']); - $glossary->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']); - - $glossary->assessed = backup_todb($info['MOD']['#']['ASSESSED']['0']['#']); - $glossary->assesstimestart = backup_todb($info['MOD']['#']['ASSESSTIMESTART']['0']['#']); - $glossary->assesstimefinish = backup_todb($info['MOD']['#']['ASSESSTIMEFINISH']['0']['#']); - $glossary->scale = backup_todb($info['MOD']['#']['SCALE']['0']['#']); - - //We have to recode the scale field if it's <0 (positive is a grade, not a scale) - if ($glossary->scale < 0) { - $scale = backup_getid($restore->backup_unique_code,"scale",abs($glossary->scale)); - if ($scale) { - $glossary->scale = -($scale->new_id); - } - } - - //To mantain upwards compatibility (pre 1.4) we have to check the displayformat field - //If it's numeric (0-6) we have to convert it to its new formatname. - //Define current 0-6 format names - $formatnames = array('dictionary','continuous','fullwithauthor','encyclopedia', - 'faq','fullwithoutauthor','entrylist'); - //If it's numeric, we are restoring a pre 1.4 course, do the conversion - if (is_numeric($glossary->displayformat)) { - $displayformat = 'dictionary'; //Default format - if ($glossary->displayformat >= 0 && $glossary->displayformat <= 6) { - $displayformat = $formatnames[$glossary->displayformat]; - } - $glossary->displayformat = $displayformat; - } - - //Now check that the displayformat exists in the server, else default to dictionary - $formats = get_list_of_plugins('mod/glossary/formats'); - if (!in_array($glossary->displayformat,$formats)) { - $glossary->displayformat = 'dictionary'; - } - - //If the backup file doesn't include the editalways field, activate it - //in secondary glossaries (old behaviour, pre 1.4) - if (! isset($info['MOD']['#']['EDITALWAYS']['0']['#'])) { //It's a pre-14 backup file - if ($glossary->mainglossary == '0') { - $glossary->editalways = '1'; - } - } - - //The structure is equal to the db, so insert the glossary - $newid = $DB->insert_record ("glossary",$glossary); - - //Do some output - if (!defined('RESTORE_SILENTLY')) { - echo "
  • ".get_string("modulename","glossary")." \"".format_string($glossary->name,true)."\"
  • "; - } - backup_flush(300); - - if ($newid) { - //We have the newid, update backup_ids - backup_putid($restore->backup_unique_code,$mod->modtype, - $mod->id, $newid); - //Restore glossary_entries - $status = glossary_entries_restore_mods($mod->id,$newid,$info,$restore); - //Restore glossary_categories and glossary_category_entries - $status = glossary_categories_restore_mods($mod->id,$newid,$info,$restore); - } else { - $status = false; - } - } else { - $status = false; - } - - return $status; - } - - //This function restores the glossary_entries - function glossary_entries_restore_mods($old_glossary_id,$new_glossary_id,$info,$restore) { - global $CFG, $DB; - - $status = true; - - //Get the entries array - $entries = isset($info['MOD']['#']['ENTRIES']['0']['#']['ENTRY'])?$info['MOD']['#']['ENTRIES']['0']['#']['ENTRY']:array(); - - //Iterate over entries - for($i = 0; $i < sizeof($entries); $i++) { - $ent_info = $entries[$i]; - //traverse_xmlize($ent_info); //Debug - //print_object ($GLOBALS['traverse_array']); //Debug - //$GLOBALS['traverse_array']=""; //Debug - - //We'll need this later!! - $oldid = backup_todb($ent_info['#']['ID']['0']['#']); - $olduserid = backup_todb($ent_info['#']['USERID']['0']['#']); - - //Now, build the GLOSSARY_ENTRIES record structure - $entry->glossaryid = $new_glossary_id; - $entry->userid = backup_todb($ent_info['#']['USERID']['0']['#']); - $entry->concept = backup_todb(trim($ent_info['#']['CONCEPT']['0']['#'])); - $entry->definition = backup_todb($ent_info['#']['DEFINITION']['0']['#']); - $entry->definitionformat = backup_todb($ent_info['#']['FORMAT']['0']['#']); - $entry->attachment = backup_todb($ent_info['#']['ATTACHMENT']['0']['#']); - $entry->sourceglossaryid = backup_todb($ent_info['#']['SOURCEGLOSSARYID']['0']['#']); - $entry->usedynalink = backup_todb($ent_info['#']['USEDYNALINK']['0']['#']); - $entry->casesensitive = backup_todb($ent_info['#']['CASESENSITIVE']['0']['#']); - $entry->fullmatch = backup_todb($ent_info['#']['FULLMATCH']['0']['#']); - $entry->approved = backup_todb($ent_info['#']['APPROVED']['0']['#']); - $entry->timecreated = backup_todb($ent_info['#']['TIMECREATED']['0']['#']); - $entry->timemodified = backup_todb($ent_info['#']['TIMEMODIFIED']['0']['#']); - $entry->teacherentry = backup_todb($ent_info['#']['TEACHERENTRY']['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 sourceglossaryid field - $source = backup_getid($restore->backup_unique_code,"glossary",$entry->sourceglossaryid); - if ($source) { - $entry->sourceglossaryid = $source->new_id; - } - //If it's a teacher entry or userinfo was selected, restore the entry - if ($entry->teacherentry or restore_userdata_selected($restore,'glossary',$old_glossary_id)) { - //The structure is equal to the db, so insert the glossary_entries - $newid = $DB->insert_record ("glossary_entries",$entry); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - if ($newid) { - //We have the newid, update backup_ids - backup_putid($restore->backup_unique_code,"glossary_entries",$oldid,$newid); - //Restore glossary_alias - $status = glossary_alias_restore_mods($oldid,$newid,$ent_info,$restore); - //Now restore glossary_comments - $status = glossary_comments_restore_mods($oldid,$newid,$old_glossary_id,$new_glossary_id,$ent_info,$restore); - //Now restore glossary_ratings - $status = glossary_ratings_restore_mods($oldid,$newid,$ent_info,$restore); - //Now copy moddata associated files if needed - if ($entry->attachment) { - $status = glossary_restore_files ($old_glossary_id, $new_glossary_id, - $oldid, $newid, $restore); - } - } else { - $status = false; - } - } - } - - return $status; - } - - //This function restores the glossary_comments - function glossary_comments_restore_mods($old_entry_id,$new_entry_id,$old_gid,$new_gid,$info,$restore) { - global $CFG, $DB; - - $status = true; - - $newmodcontext = restore_get_new_context($restore, 'course_modules', CONTEXT_MODULE, $old_gid); - - - //Get the comments array - $comments = isset($info['#']['COMMENTS']['0']['#']['COMMENT'])?$info['#']['COMMENTS']['0']['#']['COMMENT']:array(); - - //Iterate over comments - for($i = 0; $i < sizeof($comments); $i++) { - $com_info = $comments[$i]; - //traverse_xmlize($com_info); //Debug - //print_object ($GLOBALS['traverse_array']); //Debug - //$GLOBALS['traverse_array']=""; //Debug - - //We'll need this later!! - $oldid = backup_todb($com_info['#']['ID']['0']['#']); - - //Now, build the GLOSSARY_COMMENTS record structure - $comment->itemid = $new_entry_id; - if (isset($com_info['#']['COMMENT']['0']['#'])) { - $comment->content = backup_todb($com_info['#']['COMMENT']['0']['#']); - } else { - $comment->content = backup_todb($com_info['#']['ENTRYCOMMENT']['0']['#']); - } - $comment->userid = backup_todb($com_info['#']['USERID']['0']['#']); - $comment->timecreated = backup_todb($com_info['#']['TIMECREATED']['0']['#']); - $comment->format = backup_todb($com_info['#']['FORMAT']['0']['#']); - $comment->commentarea = backup_todb($com_info['#']['COMMENTAREA']['0']['#']); - $comment->contextid = $newmodcontext->id; - - //We have to recode the userid field - $user = backup_getid($restore->backup_unique_code,"user",$comment->userid); - if ($user) { - $comment->userid = $user->new_id; - } - - //The structure is equal to the db, so insert the glossary_comments - $newid = $DB->insert_record ("comments", $comment); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - if ($newid) { - //We have the newid, update backup_ids - backup_putid($restore->backup_unique_code,"glossary_comments",$oldid,$newid); - } else { - $status = false; - } - } - - return $status; - } - - //This function restores the glossary_ratings - //todo andrew can remove this - /*function glossary_ratings_restore_mods($old_entry_id,$new_entry_id,$info,$restore) { - global $CFG, $DB; - - $status = true; - - //Get the ratings array - $ratings = isset($info['#']['RATINGS']['0']['#']['RATING'])?$info['#']['RATINGS']['0']['#']['RATING']:array(); - - //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 - - //Now, build the GLOSSARY_RATINGS record structure - $rating->entryid = $new_entry_id; - $rating->userid = backup_todb($rat_info['#']['USERID']['0']['#']); - $rating->time = backup_todb($rat_info['#']['TIME']['0']['#']); - $rating->rating = backup_todb($rat_info['#']['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 glossary_ratings - $newid = $DB->insert_record ("glossary_ratings",$rating); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - - if (!$newid) { - $status = false; - } - } - - return $status; - }*/ - - //This function restores the glossary_alias table - function glossary_alias_restore_mods($old_entry_id,$new_entry_id,$info,$restore) { - global $CFG, $DB; - - $status = true; - - //Get the comments array - $aliases = isset($info['#']['ALIASES']['0']['#']['ALIAS'])?$info['#']['ALIASES']['0']['#']['ALIAS']:array(); - - //Iterate over comments - for($i = 0; $i < sizeof($aliases); $i++) { - $alias_info = $aliases[$i]; - - //Now, build the GLOSSARY_ALIAS record structure - $alias->entryid = $new_entry_id; - $alias->alias = backup_todb(trim($alias_info['#']['ALIAS_TEXT']['0']['#'])); - - //The structure is equal to the db, so insert the glossary_comments - $newid = $DB->insert_record ("glossary_alias",$alias); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - - if (!$newid) { - $status = false; - } - } - - return $status; - } - - //This function restores the glossary_categories - function glossary_categories_restore_mods($old_glossary_id,$new_glossary_id,$info,$restore) { - global $CFG, $DB; - - $status = true; - - //Get the categories array - $categories = isset($info['MOD']['#']['CATEGORIES']['0']['#']['CATEGORY'])?$info['MOD']['#']['CATEGORIES']['0']['#']['CATEGORY']:array(); - - //Iterate over categories - for($i = 0; $i < sizeof($categories); $i++) { - $cat_info = $categories[$i]; - //traverse_xmlize($cat_info); //Debug - //print_object ($GLOBALS['traverse_array']); //Debug - //$GLOBALS['traverse_array']=""; //Debug - - //We'll need this later!! - $oldid = backup_todb($cat_info['#']['ID']['0']['#']); - - //Now, build the GLOSSARY_CATEGORIES record structure - $category->glossaryid = $new_glossary_id; - $category->name = backup_todb($cat_info['#']['NAME']['0']['#']); - $category->usedynalink = backup_todb($cat_info['#']['USEDYNALINK']['0']['#']); - - $newid = $DB->insert_record ("glossary_categories",$category); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - - if ($newid) { - //We have the newid, update backup_ids - backup_putid($restore->backup_unique_code,"glossary_categories",$oldid,$newid); - //Now restore glossary_entries_categories - $status = glossary_entries_categories_restore_mods($oldid,$newid,$cat_info,$restore); - } else { - $status = false; - } - } - - return $status; - } - - - //This function restores the glossary_entries_categories - function glossary_entries_categories_restore_mods($old_category_id,$new_category_id,$info,$restore) { - global $CFG, $DB; - - $status = true; - - //Get the entryids array - $entryids = isset($info['#']['ENTRIES']['0']['#']['ENTRY'])?$info['#']['ENTRIES']['0']['#']['ENTRY']:array(); - - //Iterate over entryids - for($i = 0; $i < sizeof($entryids); $i++) { - $ent_info = $entryids[$i]; - //traverse_xmlize($ent_info); //Debug - //print_object ($GLOBALS['traverse_array']); //Debug - //$GLOBALS['traverse_array']=""; //Debug - - //Now, build the GLOSSARY_ENTRIES_CATEGORIES record structure - $entry_category->categoryid = $new_category_id; - $entry_category->entryid = backup_todb($ent_info['#']['ENTRYID']['0']['#']); - - //We have to recode the entryid field - $entry = backup_getid($restore->backup_unique_code,"glossary_entries",$entry_category->entryid); - if ($entry) { - $entry_category->entryid = $entry->new_id; - } - - $newid = $DB->insert_record ("glossary_entries_categories",$entry_category); - - //Do some output - if (($i+1) % 50 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 1000 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - - if (!$newid) { - $status = false; - } - } - - return $status; - } - - //This function copies the glossary related info from backup temp dir to course moddata folder, - //creating it if needed and recoding everything (glossary id and entry id) - function glossary_restore_files ($oldgloid, $newgloid, $oldentryid, $newentryid, $restore) { - global $CFG; - - $status = true; - $todo = false; - $moddata_path = ""; - $glossary_path = ""; - $temp_path = ""; - - //First, we check to "course_id" exists and create is as necessary - //in CFG->dataroot - $dest_dir = $CFG->dataroot."/".$restore->course_id; - $status = check_dir_exists($dest_dir,true); - - //Now, 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 glossary directory - if ($status) { - $glossary_path = $moddata_path."/glossary"; - //Check it exists and create it - $status = check_dir_exists($glossary_path,true); - } - - //Now locate the temp dir we are restoring from - if ($status) { - $temp_path = $CFG->dataroot."/temp/backup/".$restore->backup_unique_code. - "/moddata/glossary/".$oldgloid."/".$oldentryid; - //Check it exists - if (is_dir($temp_path)) { - $todo = true; - } - } - - //If todo, we create the neccesary dirs in course moddata/glossary - if ($status and $todo) { - //First this glossary id - $this_glossary_path = $glossary_path."/".$newgloid; - $status = check_dir_exists($this_glossary_path,true); - //Now this entry id - $entry_glossary_path = $this_glossary_path."/".$newentryid; - //And now, copy temp_path to entry_glossary_path - $status = backup_copy_file($temp_path, $entry_glossary_path); - } - - return $status; - } - - //Return a content decoded to support interactivities linking. Every module - //should have its own. They are called automatically from - //glossary_decode_content_links_caller() function in each module - //in the restore process - function glossary_decode_content_links ($content,$restore) { - - global $CFG; - - $result = $content; - - //Link to the list of glossarys - - $searchstring='/\$@(GLOSSARYINDEX)\*([0-9]+)@\$/'; - //We look for it - preg_match_all($searchstring,$content,$foundset); - //If found, then we are going to look for its new id (in backup tables) - if ($foundset[0]) { - //print_object($foundset); //Debug - //Iterate over foundset[2]. They are the old_ids - foreach($foundset[2] as $old_id) { - //We get the needed variables here (course id) - $rec = backup_getid($restore->backup_unique_code,"course",$old_id); - //Personalize the searchstring - $searchstring='/\$@(GLOSSARYINDEX)\*('.$old_id.')@\$/'; - //If it is a link to this course, update the link to its new location - if($rec->new_id) { - //Now replace it - $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/glossary/index.php?id='.$rec->new_id,$result); - } else { - //It's a foreign link so leave it as original - $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/glossary/index.php?id='.$old_id,$result); - } - } - } - - //Link to glossary view by moduleid - - $searchstring='/\$@(GLOSSARYVIEWBYID)\*([0-9]+)@\$/'; - //We look for it - preg_match_all($searchstring,$result,$foundset); - //If found, then we are going to look for its new id (in backup tables) - if ($foundset[0]) { - //print_object($foundset); //Debug - //Iterate over foundset[2]. They are the old_ids - foreach($foundset[2] as $old_id) { - //We get the needed variables here (course_modules id) - $rec = backup_getid($restore->backup_unique_code,"course_modules",$old_id); - //Personalize the searchstring - $searchstring='/\$@(GLOSSARYVIEWBYID)\*('.$old_id.')@\$/'; - //If it is a link to this course, update the link to its new location - if($rec->new_id) { - //Now replace it - $result= preg_replace($searchstring,$CFG->wwwroot.'/mod/glossary/view.php?id='.$rec->new_id,$result); - } else { - //It's a foreign link so leave it as original - $result= preg_replace($searchstring,$restore->original_wwwroot.'/mod/glossary/view.php?id='.$old_id,$result); - } - } - } - - return $result; - } - - //This function makes all the necessary calls to xxxx_decode_content_links() - //function in each module, passing them the desired contents to be decoded - //from backup format to destination site/course in order to mantain inter-activities - //working in the backup/restore process. It's called from restore_decode_content_links() - //function in restore process - function glossary_decode_content_links_caller($restore) { - global $CFG, $DB; - $status = true; - - //Process every glossary ENTRY in the course - if ($entries = $DB->get_records_sql("SELECT e.id, e.definition - FROM {glossary_entries} e, - {glossary} g - WHERE g.course = ? AND - e.glossaryid = g.id", array($restore->course_id))) { - //Iterate over each post->message - $i = 0; //Counter to send some output to the browser to avoid timeouts - foreach ($entries as $entry) { - //Increment counter - $i++; - $content = $entry->definition; - $result = restore_decode_content_links_worker($content,$restore); - if ($result != $content) { - //Update record - $entry->definition = $result; - $status = $DB->update_record("glossary_entries",$entry); - if (debugging()) { - if (!defined('RESTORE_SILENTLY')) { - echo '

    '.s($content).'
    changed to
    '.s($result).'

    '; - } - } - } - //Do some output - if (($i+1) % 5 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 100 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - } - } - - //Process every glossary (intro) in the course - if ($glossarys = $DB->get_records('glossary', array('course'=>$restore->course_id), '', "id,intro")) { - //Iterate over each glossary->intro - $i = 0; //Counter to send some output to the browser to avoid timeouts - foreach ($glossarys as $glossary) { - //Increment counter - $i++; - $content = $glossary->intro; - $result = restore_decode_content_links_worker($content,$restore); - if ($result != $content) { - //Update record - $glossary->intro = $result; - $status = $DB->update_record("glossary",$glossary); - if (debugging()) { - if (!defined('RESTORE_SILENTLY')) { - echo '

    '.s($content).'
    changed to
    '.s($result).'

    '; - } - } - } - //Do some output - if (($i+1) % 5 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 100 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - } - } - - return $status; - } - - //This function converts texts in FORMAT_WIKI to FORMAT_MARKDOWN for - //some texts in the module - function glossary_restore_wiki2markdown ($restore) { - global $CFG, $DB; - - $status = true; - - //Convert glossary_comments->entrycomment - if ($records = $DB->get_records_sql("SELECT c.id, c.entrycomment, c.entrycommentformat - FROM {glossary_comments} c, - {glossary_entries} e, - {glossary} g, - {backup_ids} b - WHERE e.id = c.entryid AND - g.id = e.glossaryid AND - g.course = ? AND - c.entrycommentformat = ".FORMAT_WIKI. " AND - b.backup_code = ? AND - b.table_name = 'glossary_comments' AND - b.new_id = c.id", array($restore->course_id, $restore->backup_unique_code))) { - foreach ($records as $record) { - //Rebuild wiki links - $record->entrycomment = restore_decode_wiki_content($record->entrycomment, $restore); - //Convert to Markdown - $wtm = new WikiToMarkdown(); - $record->entrycomment = $wtm->convert($record->entrycomment, $restore->course_id); - $record->entrycommentformat = FORMAT_MARKDOWN; - $status = $DB->update_record('glossary_comments', $record); - //Do some output - $i++; - if (($i+1) % 1 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 20 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - } - - } - - //Convert glossary_entries->definition - if ($records = $DB->get_records_sql("SELECT e.id, e.definition, e.definitionformat - FROM {glossary_entries} e, - {glossary} g, - {backup_ids} b - WHERE g.id = e.glossaryid AND - g.course = ? AND - e.definitionformat = ".FORMAT_WIKI. " AND - b.backup_code = ? AND - b.table_name = 'glossary_entries' AND - b.new_id = e.id", array($restore->course_id, $restore->backup_unique_code))) { - foreach ($records as $record) { - //Rebuild wiki links - $record->definition = restore_decode_wiki_content($record->definition, $restore); - //Convert to Markdown - $wtm = new WikiToMarkdown(); - $record->definition = $wtm->convert($record->definition, $restore->course_id); - $record->definitionformat = FORMAT_MARKDOWN; - $status = $DB->update_record('glossary_entries', $record); - //Do some output - $i++; - if (($i+1) % 1 == 0) { - if (!defined('RESTORE_SILENTLY')) { - echo "."; - if (($i+1) % 20 == 0) { - echo "
    "; - } - } - backup_flush(300); - } - } - - } - - return $status; - } - //This function returns a log record with all the necessay transformations //done. It's used by restore_log_module() to restore modules log. function glossary_restore_logs($restore,$log) {