From a6f349434fcfd8cb8bf5b9e907af370f491fb326 Mon Sep 17 00:00:00 2001 From: Dan Marsden Date: Thu, 29 Jul 2010 04:46:01 +0000 Subject: [PATCH] MDL-23479 lesson Restore Code --- .../restore_lesson_activity_task.class.php | 75 ++++++++ .../moodle2/restore_lesson_stepslib.php | 171 ++++++++++++++++++ 2 files changed, 246 insertions(+) create mode 100644 mod/lesson/backup/moodle2/restore_lesson_activity_task.class.php create mode 100644 mod/lesson/backup/moodle2/restore_lesson_stepslib.php diff --git a/mod/lesson/backup/moodle2/restore_lesson_activity_task.class.php b/mod/lesson/backup/moodle2/restore_lesson_activity_task.class.php new file mode 100644 index 00000000000..047965080de --- /dev/null +++ b/mod/lesson/backup/moodle2/restore_lesson_activity_task.class.php @@ -0,0 +1,75 @@ +. + +/** + * @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/lesson/backup/moodle2/restore_lesson_stepslib.php'); // Because it exists (must) + +/** + * lesson restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_lesson_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() { + // lesson only has one structure step + $this->add_step(new restore_lesson_activity_structure_step('lesson_structure', 'lesson.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('lesson_pages', array('contents'), 'lesson'); + + 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('LESSONVIEWBYID', '/mod/lesson/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('LESSONINDEX', '/mod/lesson/index.php?id=$1', 'course'); + + return $rules; + + } +} diff --git a/mod/lesson/backup/moodle2/restore_lesson_stepslib.php b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php new file mode 100644 index 00000000000..720a24eb24e --- /dev/null +++ b/mod/lesson/backup/moodle2/restore_lesson_stepslib.php @@ -0,0 +1,171 @@ +. + +/** + * @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_lesson_activity_task + */ + +/** + * Structure step to restore one lesson activity + */ +class restore_lesson_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('lesson', '/activity/lesson'); + $paths[] = new restore_path_element('lesson_page', '/activity/lesson/pages/page'); + $paths[] = new restore_path_element('lesson_answer', '/activity/lesson/pages/page/answers/answer'); + if ($userinfo) { + $paths[] = new restore_path_element('lesson_attempt', '/activity/lesson/pages/page/answers/answer/attempts/attempt'); + $paths[] = new restore_path_element('lesson_grade', '/activity/lesson/grades/grade'); + $paths[] = new restore_path_element('lesson_branch', '/activity/lesson/pages/page/branches/branch'); + $paths[] = new restore_path_element('lesson_highscore', '/activity/lesson/highscores/highscore'); + $paths[] = new restore_path_element('lesson_timer', '/activity/lesson/timers/timer'); + } + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_lesson($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->available = $this->apply_date_offset($data->available); + $data->deadline = $this->apply_date_offset($data->deadline); + + // insert the lesson record + $newitemid = $DB->insert_record('lesson', $data); + // inmediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function process_lesson_page($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->prevpageid = (empty($data->prevpageid)) ? 0 : $this->get_mappingid('lesson_page', $data->prevpageid); + $data->nextpageid = 0; //we don't know the id of the next page as it hasn't been created yet. + + $newitemid = $DB->insert_record('lesson_pages', $data); + $this->set_mapping('lesson_page', $oldid, $newitemid); + + //now update previous page with newid as the nextpageid + if (!empty($data->prevpageid)) { + $prevpage = $DB->get_record('lesson_pages', array('lessonid'=>$data->lessonid, 'id'=>$data->prevpageid)); + if (!empty($prevpage)) { + $prevpage->nextpageid = $newitemid; + $DB->update_record('lesson_pages', $prevpage); + } + } + } + + protected function process_lesson_answer($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->pageid = $this->get_new_parentid('lesson_page'); + $data->answer = $data->answer_text; + + $newitemid = $DB->insert_record('lesson_answers', $data); + $this->set_mapping('lesson_answer', $oldid, $newitemid); + } + + protected function process_lesson_attempt($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->pageid = $this->get_new_parentid('lesson_page'); + $data->answerid = $this->get_new_parentid('lesson_answer'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $newitemid = $DB->insert_record('lesson_attempts', $data); + } + + protected function process_lesson_grade($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $newitemid = $DB->insert_record('lesson_grades', $data); + $this->set_mapping('lesson_grade', $oldid, $newitemid); + } + + protected function process_lesson_branch($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->pageid = $this->get_new_parentid('lesson_page'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $newitemid = $DB->insert_record('lesson_branch', $data); + $this->set_mapping('lesson_branch', $oldid, $newitemid); + } + + protected function process_lesson_highscore($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->userid = $this->get_mappingid('user', $data->userid); + $data->gradeid = $this->get_mappingid('lesson_grade', $data->gradeid); + + $newitemid = $DB->insert_record('lesson_high_scores', $data); + } + + protected function process_lesson_timer($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->lessonid = $this->get_new_parentid('lesson'); + $data->userid = $this->get_mappingid('user', $data->userid); + + $newitemid = $DB->insert_record('lesson_timer', $data); + } + + protected function after_execute() { + // Add lesson related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_lesson', 'mediafile', 'id'); + $this->add_related_files('mod_lesson', 'page_contents', 'id'); + } +} -- 2.43.0