MDL-23479 backup - fix files/tags/comments/links backup & restore

(thanks Pigui for adapting module core so quickly)
This commit is contained in:
Eloy Lafuente
2010-08-02 12:16:16 +00:00
parent dec303ade9
commit 07f7954d1e
3 changed files with 27 additions and 20 deletions
@@ -59,9 +59,9 @@ class backup_wiki_activity_structure_step extends backup_activity_structure_step
$version = new backup_nested_element('version', array('id'), array('content', 'contentformat', 'version', 'timecreated', 'userid'));
$comments = new backup_nested_element('comments');
$tags = new backup_nested_element('tags');
$comment = new backup_nested_element('comment', array('id'), array('contextid', 'commentarea', 'content', 'format', 'userid', 'timecreated'));
$tag = new backup_nested_element('tag', array('id'), array('name', 'rawname'));
// Build the tree
$wiki->add_child($subwikis);
@@ -79,8 +79,8 @@ class backup_wiki_activity_structure_step extends backup_activity_structure_step
$page->add_child($versions);
$versions->add_child($version);
$page->add_child($comments);
$comments->add_child($comment);
$page->add_child($tags);
$tags->add_child($tag);
// Define sources
$wiki->set_source_table('wiki', array('id' => backup::VAR_ACTIVITYID));
@@ -100,7 +100,13 @@ class backup_wiki_activity_structure_step extends backup_activity_structure_step
$version->set_source_table('wiki_versions', array('pageid' => backup::VAR_PARENTID));
$comment->set_source_table('comments', array('itemid' => backup::VAR_PARENTID));
$tag->set_source_sql('SELECT t.id, t.name, t.rawname
FROM {tag} t
JOIN {tag_instance} ti ON ti.tagid = t.id
WHERE ti.itemtype = ?
AND ti.itemid = ?', array(
backup_helper::is_sqlparam('wiki_page'),
backup::VAR_PARENTID));
}
// Define id annotations
@@ -112,11 +118,9 @@ class backup_wiki_activity_structure_step extends backup_activity_structure_step
$version->annotate_ids('user', 'userid');
$comment->annotate_ids('user', 'userid');
// Define file annotations
$wiki->annotate_files('mod_wiki', 'intro', null); // This file area hasn't itemid
//TODO: where are the attachments? (skodak)
$page->annotate_files('mod_wiki', 'attachments', 'id'); // This file area hasn't itemid
// Return the root element (wiki), wrapped into standard activity structure
return $this->prepare_activity_structure($wiki);
@@ -67,8 +67,9 @@ class restore_wiki_activity_task extends restore_activity_task {
static public function define_decode_rules() {
$rules = array();
$rules[] = new restore_decode_rule('WIKIVIEWBYID', '/mod/wiki/view.php?id=$1', 'course_module');
$rules[] = new restore_decode_rule('WIKIINDEX', '/mod/wiki/index.php?id=$1', 'course');
$rules[] = new restore_decode_rule('WIKIVIEWBYID', '/mod/wiki/view.php?id=$1', 'course_module');
$rules[] = new restore_decode_rule('WIKIPAGEBYID', '/mod/wiki/view.php?pageid=$1', 'wiki_page');
return $rules;
@@ -41,9 +41,9 @@ class restore_wiki_activity_structure_step extends restore_activity_structure_st
$paths[] = new restore_path_element('wiki_subwiki', '/activity/wiki/subwikis/subwiki');
$paths[] = new restore_path_element('wiki_page', '/activity/wiki/subwikis/subwiki/pages/page');
$paths[] = new restore_path_element('wiki_version', '/activity/wiki/subwikis/subwiki/pages/page/versions/version');
$paths[] = new restore_path_element('wiki_tag', '/activity/wiki/subwikis/subwiki/pages/page/tags/tag');
$paths[] = new restore_path_element('wiki_synonym', '/activity/wiki/subwikis/subwiki/synonyms/synonym');
$paths[] = new restore_path_element('wiki_link', '/activity/wiki/subwikis/subwiki/links/link');
$paths[] = new restore_path_element('wiki_comment', '/activity/wiki/subwikis/subwiki/pages/page/comments/comment');
}
// Return the paths wrapped into standard activity structure
@@ -92,7 +92,7 @@ class restore_wiki_activity_structure_step extends restore_activity_structure_st
$data->timerendered = $this->apply_date_offset($data->timerendered);
$newitemid = $DB->insert_record('wiki_pages', $data);
$this->set_mapping('wiki_page', $oldid, $newitemid);
$this->set_mapping('wiki_page', $oldid, $newitemid, true); // There are files related to this
}
protected function process_wiki_version($data) {
global $DB;
@@ -126,28 +126,30 @@ class restore_wiki_activity_structure_step extends restore_activity_structure_st
$data->subwikiid = $this->get_new_parentid('wiki_subwiki');
$data->frompageid = $this->get_mappingid('wiki_page', $data->frompageid);
$data->topageid = $this->get_mappingid('wiki_page', $data->topageid);
$newitemid = $DB->insert_record('wiki_links', $data);
// No need to save this mapping as far as nothing depend on it
// (child paths, file areas nor links decoder)
}
protected function process_wiki_comment($data) {
global $DB;
protected function process_wiki_tag($data) {
global $CFG, $DB;
$data = (object)$data;
$oldid = $data->id;
$data->contextid = $this->get_mappingid('context', $data->contextid);
$data->userid = $this->get_mappingid('user', $data->userid);
$newitemid = $DB->insert_record('comments', $data);
// No need to save this mapping as far as nothing depend on it
// (child paths, file areas nor links decoder)
if (empty($CFG->usetags)) { // tags disabled in server, nothing to process
return;
}
$tag = $data->rawname;
$itemid = $this->get_new_parentid('wiki_page');
tag_set_add('wiki_page', $itemid, $tag);
}
protected function after_execute() {
// Add wiki related files, no need to match by itemname (just internally handled context)
$this->add_related_files('mod_wiki', 'intro', null);
$this->add_related_files('mod_wiki', 'attachments', 'wiki_page');
}
}