MDL-35305 wiki: backup and restore files
[moodle.git] / mod / wiki / backup / moodle2 / restore_wiki_stepslib.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * @package    mod_wiki
20  * @subpackage backup-moodle2
21  * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 /**
26  * Define all the restore steps that will be used by the restore_wiki_activity_task
27  */
29 /**
30  * Structure step to restore one wiki activity
31  */
32 class restore_wiki_activity_structure_step extends restore_activity_structure_step {
34     protected function define_structure() {
36         $paths = array();
37         $userinfo = $this->get_setting_value('userinfo');
39         $paths[] = new restore_path_element('wiki', '/activity/wiki');
40         if ($userinfo) {
41             $paths[] = new restore_path_element('wiki_subwiki', '/activity/wiki/subwikis/subwiki');
42             $paths[] = new restore_path_element('wiki_page', '/activity/wiki/subwikis/subwiki/pages/page');
43             $paths[] = new restore_path_element('wiki_version', '/activity/wiki/subwikis/subwiki/pages/page/versions/version');
44             $paths[] = new restore_path_element('wiki_tag', '/activity/wiki/subwikis/subwiki/pages/page/tags/tag');
45             $paths[] = new restore_path_element('wiki_synonym', '/activity/wiki/subwikis/subwiki/synonyms/synonym');
46             $paths[] = new restore_path_element('wiki_link', '/activity/wiki/subwikis/subwiki/links/link');
47         }
49         // Return the paths wrapped into standard activity structure
50         return $this->prepare_activity_structure($paths);
51     }
53     protected function process_wiki($data) {
54         global $DB;
56         $data = (object)$data;
57         $oldid = $data->id;
58         $data->course = $this->get_courseid();
60         $data->editbegin = $this->apply_date_offset($data->editbegin);
61         $data->editend = $this->apply_date_offset($data->editend);
62         $data->timemodified = $this->apply_date_offset($data->timemodified);
64         // insert the wiki record
65         $newitemid = $DB->insert_record('wiki', $data);
66         // immediately after inserting "activity" record, call this
67         $this->apply_activity_instance($newitemid);
68     }
70     protected function process_wiki_subwiki($data) {
71         global $DB;
73         $data = (object) $data;
74         $oldid = $data->id;
75         $data->wikiid = $this->get_new_parentid('wiki');
77         // If the groupid is not equal to zero, get the mapping for the group.
78         if ((int) $data->groupid !== 0) {
79             $data->groupid = $this->get_mappingid('group', $data->groupid);
80         }
82         // If the userid is not equal to zero, get the mapping for the user.
83         if ((int) $data->userid !== 0) {
84             $data->userid = $this->get_mappingid('user', $data->userid);
85         }
87         // If these values are not equal to false then a mapping was successfully made.
88         if ($data->groupid !== false && $data->userid !== false) {
89             $newitemid = $DB->insert_record('wiki_subwikis', $data);
90         } else {
91             $newitemid = false;
92         }
94         $this->set_mapping('wiki_subwiki', $oldid, $newitemid, true);
95     }
97     protected function process_wiki_page($data) {
98         global $DB;
100         $data = (object) $data;
101         $oldid = $data->id;
102         $data->subwikiid = $this->get_new_parentid('wiki_subwiki');
103         $data->userid = $this->get_mappingid('user', $data->userid);
104         $data->timemodified = $this->apply_date_offset($data->timemodified);
105         $data->timecreated = $this->apply_date_offset($data->timecreated);
106         $data->timerendered = $this->apply_date_offset($data->timerendered);
108         // Check that we were able to get a parentid for this page.
109         if ($data->subwikiid !== false) {
110             $newitemid = $DB->insert_record('wiki_pages', $data);
111         } else {
112             $newitemid = false;
113         }
115         $this->set_mapping('wiki_page', $oldid, $newitemid, true);
116     }
118     protected function process_wiki_version($data) {
119         global $DB;
121         $data = (object)$data;
122         $oldid = $data->id;
123         $data->pageid = $this->get_new_parentid('wiki_page');
124         $data->userid = $this->get_mappingid('user', $data->userid);
125         $data->timecreated = $this->apply_date_offset($data->timecreated);
127         $newitemid = $DB->insert_record('wiki_versions', $data);
128         $this->set_mapping('wiki_version', $oldid, $newitemid);
129     }
130     protected function process_wiki_synonym($data) {
131         global $DB;
133         $data = (object)$data;
134         $oldid = $data->id;
135         $data->subwikiid = $this->get_new_parentid('wiki_subwiki');
136         $data->pageid = $this->get_mappingid('wiki_page', $data->pageid);
138         $newitemid = $DB->insert_record('wiki_synonyms', $data);
139         // No need to save this mapping as far as nothing depend on it
140         // (child paths, file areas nor links decoder)
141     }
142     protected function process_wiki_link($data) {
143         global $DB;
145         $data = (object)$data;
146         $oldid = $data->id;
147         $data->subwikiid = $this->get_new_parentid('wiki_subwiki');
148         $data->frompageid = $this->get_mappingid('wiki_page', $data->frompageid);
149         $data->topageid = $this->get_mappingid('wiki_page', $data->topageid);
151         $newitemid = $DB->insert_record('wiki_links', $data);
152         // No need to save this mapping as far as nothing depend on it
153         // (child paths, file areas nor links decoder)
154     }
156     protected function process_wiki_tag($data) {
157         global $CFG, $DB;
159         $data = (object)$data;
160         $oldid = $data->id;
162         if (empty($CFG->usetags)) { // tags disabled in server, nothing to process
163             return;
164         }
166         $tag = $data->rawname;
167         $itemid = $this->get_new_parentid('wiki_page');
168         $wikiid = $this->get_new_parentid('wiki');
170         $cm = get_coursemodule_from_instance('wiki', $wikiid);
171         tag_set_add('wiki_pages', $itemid, $tag, 'mod_wiki', context_module::instance($cm->id)->id);
172     }
174     protected function after_execute() {
175         // Add wiki related files, no need to match by itemname (just internally handled context)
176         $this->add_related_files('mod_wiki', 'intro', null);
177         $this->add_related_files('mod_wiki', 'attachments', 'wiki_subwiki');
178     }