MDL-24177 backup - delete some lines causing mess in source lesson because of some...
[moodle.git] / mod / lesson / backup / moodle2 / restore_lesson_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 moodlecore
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_lesson_activity_task
27  */
29 /**
30  * Structure step to restore one lesson activity
31  */
32 class restore_lesson_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('lesson', '/activity/lesson');
40         $paths[] = new restore_path_element('lesson_page', '/activity/lesson/pages/page');
41         $paths[] = new restore_path_element('lesson_answer', '/activity/lesson/pages/page/answers/answer');
42         if ($userinfo) {
43             $paths[] = new restore_path_element('lesson_attempt', '/activity/lesson/pages/page/answers/answer/attempts/attempt');
44             $paths[] = new restore_path_element('lesson_grade', '/activity/lesson/grades/grade');
45             $paths[] = new restore_path_element('lesson_branch', '/activity/lesson/pages/page/branches/branch');
46             $paths[] = new restore_path_element('lesson_highscore', '/activity/lesson/highscores/highscore');
47             $paths[] = new restore_path_element('lesson_timer', '/activity/lesson/timers/timer');
48         }
50         // Return the paths wrapped into standard activity structure
51         return $this->prepare_activity_structure($paths);
52     }
54     protected function process_lesson($data) {
55         global $DB;
57         $data = (object)$data;
58         $oldid = $data->id;
59         $data->course = $this->get_courseid();
61         $data->available = $this->apply_date_offset($data->available);
62         $data->deadline = $this->apply_date_offset($data->deadline);
63         $data->timemodified = $this->apply_date_offset($data->timemodified);
65         // insert the lesson record
66         $newitemid = $DB->insert_record('lesson', $data);
67         // inmediately after inserting "activity" record, call this
68         $this->apply_activity_instance($newitemid);
69     }
71     protected function process_lesson_page($data) {
72         global $DB;
74         $data = (object)$data;
75         $oldid = $data->id;
76         $data->lessonid = $this->get_new_parentid('lesson');
78         // We'll remap all the prevpageid and nextpageid at the end, once all pages have been created
79         $data->timemodified = $this->apply_date_offset($data->timemodified);
80         $data->timecreated = $this->apply_date_offset($data->timecreated);
82         $newitemid = $DB->insert_record('lesson_pages', $data);
83         $this->set_mapping('lesson_page', $oldid, $newitemid, true); // Has related fileareas
84     }
86     protected function process_lesson_answer($data) {
87         global $DB;
89         $data = (object)$data;
90         $oldid = $data->id;
91         $data->lessonid = $this->get_new_parentid('lesson');
92         $data->pageid = $this->get_new_parentid('lesson_page');
93         $data->answer = $data->answer_text;
94         $data->timemodified = $this->apply_date_offset($data->timemodified);
95         $data->timecreated = $this->apply_date_offset($data->timecreated);
97         $newitemid = $DB->insert_record('lesson_answers', $data);
98         $this->set_mapping('lesson_answer', $oldid, $newitemid);
99     }
101     protected function process_lesson_attempt($data) {
102         global $DB;
104         $data = (object)$data;
105         $oldid = $data->id;
106         $data->lessonid = $this->get_new_parentid('lesson');
107         $data->pageid = $this->get_new_parentid('lesson_page');
108         $data->answerid = $this->get_new_parentid('lesson_answer');
109         $data->userid = $this->get_mappingid('user', $data->userid);
110         $data->timeseen = $this->apply_date_offset($data->timeseen);
112         $newitemid = $DB->insert_record('lesson_attempts', $data);
113     }
115     protected function process_lesson_grade($data) {
116         global $DB;
118         $data = (object)$data;
119         $oldid = $data->id;
120         $data->lessonid = $this->get_new_parentid('lesson');
121         $data->userid = $this->get_mappingid('user', $data->userid);
122         $data->completed = $this->apply_date_offset($data->completed);
124         $newitemid = $DB->insert_record('lesson_grades', $data);
125         $this->set_mapping('lesson_grade', $oldid, $newitemid);
126     }
128     protected function process_lesson_branch($data) {
129         global $DB;
131         $data = (object)$data;
132         $oldid = $data->id;
133         $data->lessonid = $this->get_new_parentid('lesson');
134         $data->pageid = $this->get_new_parentid('lesson_page');
135         $data->userid = $this->get_mappingid('user', $data->userid);
136         $data->timeseen = $this->apply_date_offset($data->timeseen);
138         $newitemid = $DB->insert_record('lesson_branch', $data);
139     }
141     protected function process_lesson_highscore($data) {
142         global $DB;
144         $data = (object)$data;
145         $oldid = $data->id;
146         $data->lessonid = $this->get_new_parentid('lesson');
147         $data->userid = $this->get_mappingid('user', $data->userid);
148         $data->gradeid = $this->get_mappingid('lesson_grade', $data->gradeid);
150         $newitemid = $DB->insert_record('lesson_high_scores', $data);
151     }
153     protected function process_lesson_timer($data) {
154         global $DB;
156         $data = (object)$data;
157         $oldid = $data->id;
158         $data->lessonid = $this->get_new_parentid('lesson');
159         $data->userid = $this->get_mappingid('user', $data->userid);
160         $data->starttime = $this->apply_date_offset($data->starttime);
161         $data->lessontime = $this->apply_date_offset($data->lessontime);
163         $newitemid = $DB->insert_record('lesson_timer', $data);
164     }
166     protected function after_execute() {
167         global $DB;
169         // Add lesson mediafile, no need to match by itemname (just internally handled context)
170         $this->add_related_files('mod_lesson', 'mediafile', null);
171         // Add lesson page files, by lesson_page itemname
172         $this->add_related_files('mod_lesson', 'page_contents', 'lesson_page');
174         // Remap all the restored prevpageid and nextpageid now that we have all the pages and their mappings
175         $rs = $DB->get_recordset('lesson_pages', array('lessonid' => $this->task->get_activityid()),
176                                  '', 'id, prevpageid, nextpageid');
177         foreach ($rs as $page) {
178             $page->prevpageid = (empty($page->prevpageid)) ? 0 : $this->get_mappingid('lesson_page', $page->prevpageid);
179             $page->nextpageid = (empty($page->nextpageid)) ? 0 : $this->get_mappingid('lesson_page', $page->nextpageid);
180             $DB->update_record('lesson_pages', $page);
181         }
182         $rs->close();
184         // TODO: somewhere at the end of the restore... when all the activities have been restored
185         // TODO: we need to decode the lesson->activitylink that points to another activity in the course
186         // TODO: great functionality that breaks self-contained principles, grrr
187     }