From a5ea28b32dc2df264aef5a69f8542a946acd451a Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Fri, 13 May 2011 03:09:26 +0200 Subject: [PATCH] Removing relics of the previous plan/tasks/steps based implementation Kudos to Mark Nielsen for his initial work on this project. In his code, Mark described the valuable logic of the conversion using a framework mirroring plan/tasks/steps based architecture of the backup and restore. My attempt to simplify it led to the current handlers-based architecture. --- backup/converter/moodle1/stepslib.php | 830 ------------------ .../helper/convert_file_manager.class.php | 115 --- .../plan/convert_execution_step.class.php | 40 - backup/util/plan/convert_plan.class.php | 85 -- backup/util/plan/convert_step.class.php | 59 -- .../plan/convert_structure_step.class.php | 68 -- backup/util/plan/convert_task.class.php | 57 -- 7 files changed, 1254 deletions(-) delete mode 100644 backup/converter/moodle1/stepslib.php delete mode 100644 backup/util/helper/convert_file_manager.class.php delete mode 100644 backup/util/plan/convert_execution_step.class.php delete mode 100644 backup/util/plan/convert_plan.class.php delete mode 100644 backup/util/plan/convert_step.class.php delete mode 100644 backup/util/plan/convert_structure_step.class.php delete mode 100644 backup/util/plan/convert_task.class.php diff --git a/backup/converter/moodle1/stepslib.php b/backup/converter/moodle1/stepslib.php deleted file mode 100644 index ec7fc96c6cd..00000000000 --- a/backup/converter/moodle1/stepslib.php +++ /dev/null @@ -1,830 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * A general/abstract moodle1 structure step converter - */ -abstract class moodle1_structure_step extends convert_structure_step { - /** - * @var xml_writer - */ - protected $xmlwriter = NULL; - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @abstract - * @return string - */ - abstract public function get_xml_filename(); - - /** - * Opens the XML writer - after calling, one is free - * to use $xmlwriter - * - * @return void - */ - public function open_xml_writer() { - if (!$this->xmlwriter instanceof xml_writer) { - $fullpath = $this->get_basepath() . '/' . $this->get_xml_filename(); - $directory = pathinfo($fullpath, PATHINFO_DIRNAME); - - if (!check_dir_exists($directory)) { - throw new backup_exception('failedtomakeconvertdir'); // @todo Define this string - } - $this->xmlwriter = new xml_writer( - new file_xml_output($fullpath) - ); - $this->xmlwriter->start(); - } - } - - /** - * Close the XML writer - * - * At the moment, must close all tags before calling - * - * @return void - */ - public function close_xml_writer() { - if ($this->xmlwriter instanceof xml_writer) { - $this->xmlwriter->stop(); - unset($this->xmlwriter); - $this->xmlwriter = NULL; - // var_dump(file_get_contents($this->get_basepath().'/'.$this->get_xml_filename())); // DEBUG - } - } - - /** - * Return deprecated fields - * - * @return array - */ - public function get_deprecated() { - return array(); - } - - /** - * Return renamed fields - * - * The key is the old name and the value is the new name. - * - * @return array - */ - public function get_renamed() { - return array(); - } - - /** - * Return new fields and their values - * - * The key is the new field name and the value - * is the value to write to the XML file. - * - * @return array - */ - public function get_new() { - return array(); - } - - /** - * Last chance to modify the datum before - * it is written to the XML file. - * - * @param string $name The tag/field name - * @param mixed $datum The data belonging to $name - * @return mixed - */ - public function mutate_datum($name, $datum) { - return $datum; - } - - /** - * General data converter - * - * Can remove deprecated fields, rename fields, - * and manipulate data values before writing - * to the XML file. - * - * @param array $data The array of data to process - * @return void - */ - public function convert_data(array $data) { - // print_object($data); // DEBUG - - $this->open_xml_writer(); - - $deprecated = $this->get_deprecated(); - $renamed = $this->get_renamed(); - - foreach ($data as $name => $datum) { - $name = strtolower($name); - - if (in_array($name, $deprecated)) { - continue; - } - if (array_key_exists($name, $renamed)) { - $name = $renamed[$name]; - } - $this->xmlwriter->full_tag($name, $this->mutate_datum($name, $datum)); - } - foreach ($this->get_new() as $name => $datum) { - $this->xmlwriter->full_tag($name, $datum); - } - } -} - -class moodle1_info_structure_step extends moodle1_structure_step { - /** - * @var array - */ - protected $info = array(); - - /** - * @var array - */ - protected $details = array(); - - /** - * @var array - */ - protected $mods = array(); - - /** - * @var string - */ - protected $currentmod; - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - protected function define_structure() { - return array( - new convert_path_element('info', '/MOODLE_BACKUP/INFO'), - new convert_path_element('details', '/MOODLE_BACKUP/INFO/DETAILS'), - new convert_path_element('mod', '/MOODLE_BACKUP/INFO/DETAILS/MOD'), - new convert_path_element('instance', '/MOODLE_BACKUP/INFO/DETAILS/MOD/INSTANCES/INSTANCE'), - ); - } - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @return string - */ - public function get_xml_filename() { - return 'moodle_backup.xml'; - } - - public function get_new() { - global $DB; - - $course = $DB->get_record('backup_ids_temp', array('itemname' => 'course'), '*', MUST_EXIST); - $info = unserialize(base64_decode($course->info)); - - return array( - 'mnet_remoteusers' => 0, - 'original_site_identifier_hash' => '?', // @todo What is this? - 'original_course_id' => $course->itemid, - 'original_course_fullname' => $info['fullname'], - 'original_course_shortname' => $info['shortname'], - 'original_course_startdate' => $info['startdate'], - 'original_course_contextid' => $info['contextid'], - 'original_system_contextid' => convert_helper::get_contextid(0, 'system', $this->get_convertid()), - ); - } - - public function get_renamed() { - return parent::get_renamed(); - } - - public function get_deprecated() { - return parent::get_deprecated(); - } - - public function convert_info($data) { - // print_object($data); // DEBUG - $this->info = $data; - } - - public function convert_details($data) { - // print_object($data); // DEBUG - $this->details = $data; - } - - public function convert_mod($data) { - // print_object($data); // DEBUG - $this->currentmod = $data['NAME']; - $this->mods[$this->currentmod] = array(); - } - - public function convert_instance($data) { - // print_object($data); // DEBUG - $this->mods[$this->currentmod][$data['ID']] = $data; - } - - public function execute_after_convert() { - global $DB; - - $rootsettings = array( - 'filename' => $this->info['NAME'], - 'users' => 0, // @todo Add support for users - 'anonymize' => 0, // @todo Correct? - 'role_assignments' => 0, // @todo Add support for users - 'user_files' => 0, // @todo Add support for users - 'activities' => 1, - 'blocks' => 1, - 'filters' => 0, // @todo Add support for filters - 'comments' => 0, - 'userscompletion' => 0, - 'logs' => 0, - 'grade_histories' => 0, // @todo Add support for users - ); - - $settings = array(); - foreach ($rootsettings as $name => $value) { - $settings[] = array( - 'level' => 'root', - 'name' => $name, - 'value' => $value, - ); - } - - $this->open_xml_writer(); - $this->xmlwriter->begin_tag('moodle_backup'); - $this->xmlwriter->begin_tag('information'); - - $this->convert_data($this->info); - - $this->xmlwriter->begin_tag('details'); - $this->xmlwriter->begin_tag('detail', array('backup_id' => $this->get_convertid())); - $this->xmlwriter->full_tag('type', 'course'); - $this->xmlwriter->full_tag('format', 'moodle2'); - $this->xmlwriter->full_tag('interactive', 0); // @todo Correct? - $this->xmlwriter->full_tag('mode', backup::MODE_GENERAL); - $this->xmlwriter->full_tag('execution', 1); // @todo Correct? - $this->xmlwriter->full_tag('executiontime', 0); - $this->xmlwriter->end_tag('detail'); - $this->xmlwriter->end_tag('details'); - - $this->xmlwriter->begin_tag('contents'); - $this->xmlwriter->begin_tag('activities'); - - foreach ($this->mods as $type => $instances) { - $records = $DB->get_records('backup_ids_temp', array('backupid' => $this->get_convertid(), 'itemname' => $type)); - - foreach ($records as $record) { - $info = unserialize(base64_decode($record->info)); - $key = "{$record->itemname}_{$record->parentitemid}"; - - if (array_key_exists($record->itemid, $instances)) { - $title = $instances[$record->itemid]['NAME']; - $included = (int) $instances[$record->itemid]['INCLUDED']; - } else { - $title = 'UNKNOWN'; - $included = 1; - } - $settings[] = array( - 'level' => 'activity', - 'activity' => $key, - 'name' => "{$key}_included", - 'value' => $included, - ); - $this->xmlwriter->begin_tag('activity'); - $this->xmlwriter->full_tag('moduleid', $record->parentitemid); - $this->xmlwriter->full_tag('sectionid', $info['sectionid']); - $this->xmlwriter->full_tag('modulename', $record->itemname); - $this->xmlwriter->full_tag('title', $title); - $this->xmlwriter->full_tag('directory', "activities/$key"); - $this->xmlwriter->end_tag('activity'); - } - } - $this->xmlwriter->end_tag('activities'); - $this->xmlwriter->begin_tag('sections'); - - $records = $DB->get_records('backup_ids_temp', array('backupid' => $this->get_convertid(), 'itemname' => 'section')); - foreach ($records as $record) { - $info = unserialize(base64_decode($record->info)); - - $settings[] = array( - 'level' => 'section', - 'section' => "section_$record->itemid", - 'name' => "section_{$record->itemid}_userinfo", - 'value' => 0, // @todo Add support for user info - ); - - $this->xmlwriter->begin_tag('section'); - $this->xmlwriter->full_tag('sectionid', $record->itemid); - $this->xmlwriter->full_tag('title', $info['title']); - $this->xmlwriter->full_tag('directory', $info['directory']); - $this->xmlwriter->end_tag('section'); - } - $this->xmlwriter->end_tag('sections'); - - $course = $DB->get_record('backup_ids_temp', array('itemname' => 'course'), '*', MUST_EXIST); - $info = unserialize(base64_decode($course->info)); - - $this->xmlwriter->begin_tag('course'); - $this->xmlwriter->full_tag('courseid', $course->itemid); - $this->xmlwriter->full_tag('title', $info['fullname']); - $this->xmlwriter->full_tag('directory', 'course'); - $this->xmlwriter->end_tag('course'); - - $this->xmlwriter->end_tag('contents'); - - $this->xmlwriter->begin_tag('settings'); - foreach ($settings as $setting) { - $this->xmlwriter->begin_tag('setting'); - foreach ($setting as $name => $value) { - $this->xmlwriter->full_tag($name, $value); - } - $this->xmlwriter->end_tag('setting'); - } - $this->xmlwriter->end_tag('settings'); - $this->xmlwriter->end_tag('information'); - $this->xmlwriter->end_tag('moodle_backup'); - $this->close_xml_writer(); - } -} - -class moodle1_course_structure_step extends moodle1_structure_step { - /** - * @var array - */ - protected $course = array(); - - /** - * @var array - */ - protected $category = array(); - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - protected function define_structure() { - return array( - new convert_path_element('course', '/MOODLE_BACKUP/COURSE/HEADER'), - new convert_path_element('category', '/MOODLE_BACKUP/COURSE/HEADER/CATEGORY'), - ); - } - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @return string - */ - public function get_xml_filename() { - return 'course/course.xml'; - } - - public function get_new() { - return array( - 'summaryformat' => 1, - 'legacyfiles' => 1, // @todo I think this is correct - 'requested' => 0, // @todo Not really new, but maybe never backed up? - 'restrictmodules' => 0, - 'enablecompletion' => 0, - 'completionstartonenrol' => 0, - 'completionnotify' => 0, - ); - } - - public function get_deprecated() { - return array( - 'roles_overrides', - 'roles_assignments', - 'cost', - 'currancy', - 'defaultrole', - 'enrol', - 'enrolenddate', - 'enrollable', - 'enrolperiod', - 'enrolstartdate', - 'expirynotify', - 'expirythreshold', - 'guest', - 'notifystudents', - 'password', - 'student', - 'students', - 'teacher', - 'teachers', - 'metacourse', - ); - } - - /** - * This is actually called twice because category is defined - * right after ID in the XML... any way around that? Only - * idea is to patch Moodle 1.9 - * - * @throws backup_exception - * @param $data - * @return void - */ - public function convert_course($data) { - // print_object($data); // DEBUG - $this->course = array_merge($this->course, $data); - } - - public function convert_category($data) { - // print_object($data); // DEBUG - $this->category = $data; - } - - public function execute_after_convert() { - global $DB; - - $this->open_xml_writer(); - - $contextid = convert_helper::get_contextid($this->course['ID'], 'course'); - - $this->xmlwriter->begin_tag('course', array( - 'id' => $this->course['ID'], - 'contextid' => $contextid, - )); - - $this->convert_data($this->course); - - $DB->insert_record('backup_ids_temp', (object) array( - 'backupid' => $this->get_convertid(), - 'itemname' => 'course', - 'itemid' => $this->course['ID'], - 'info' => base64_encode(serialize(array( - 'fullname' => $this->course['FULLNAME'], - 'shortname' => $this->course['SHORTNAME'], - 'startdate' => $this->course['STARTDATE'], - 'contextid' => $contextid, - ))), - )); - - $this->xmlwriter->begin_tag('category', array('id' => $this->category['ID'])); - $this->xmlwriter->full_tag('name', $this->category['NAME']); - $this->xmlwriter->full_tag('description', NULL); - $this->xmlwriter->end_tag('category'); - $this->xmlwriter->full_tag('tags', NULL); - $this->xmlwriter->full_tag('allowed_modules', NULL); - $this->xmlwriter->end_tag('course'); - $this->close_xml_writer(); - } -} - -/** - * Converts all of the sections - */ -class moodle1_section_structure_step extends moodle1_structure_step { - /** - * Section ID - * @var int - */ - protected $id; - - /** - * Module ID sequence - * @var array - */ - protected $sequence = array(); - - /** - * Section data array - * @var array - */ - protected $data = array(); - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @return string - */ - public function get_xml_filename() { - return "sections/section_$this->id/section.xml"; - } - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - protected function define_structure() { - $paths = array(); - $paths[] = new convert_path_element('section', '/MOODLE_BACKUP/COURSE/SECTIONS/SECTION'); - $paths[] = new convert_path_element('mod', '/MOODLE_BACKUP/COURSE/SECTIONS/SECTION/MODS/MOD'); - - return $paths; - } - - /** - * This grabs section ID and stores data. - * We must process the section's modules before - * the section can be written out to XML - * - * @param $data - * @return void - */ - public function convert_section($data) { - if (!empty($this->id)) { - $this->write_section_xml(); - } - // print_object($data); // DEBUG - $this->id = $data['ID']; - $this->data = $data; - } - - /** - * Writes out section XML - * - * @return void - */ - public function write_section_xml() { - global $DB; - - $this->open_xml_writer(); - - $this->xmlwriter->begin_tag('section', array('id' => $this->data['ID'])); - $this->xmlwriter->full_tag('number', $this->data['NUMBER']); - $this->xmlwriter->full_tag('name', NULL); - $this->xmlwriter->full_tag('summary', $this->data['SUMMARY']); - $this->xmlwriter->full_tag('summaryformat', 1); - $this->xmlwriter->full_tag('sequence', implode(',', $this->sequence)); - $this->xmlwriter->full_tag('visible', $this->data['VISIBLE']); - $this->xmlwriter->end_tag('section'); - - $this->close_xml_writer(); - - $DB->insert_record('backup_ids_temp', (object) array( - 'backupid' => $this->get_convertid(), - 'itemname' => 'section', - 'itemid' => $this->data['ID'], - 'info' => base64_encode(serialize(array( - 'title' => $this->data['NUMBER'], // @todo Correct? - 'directory' => pathinfo($this->get_xml_filename(), PATHINFO_DIRNAME), - ))), - )); - - // Reset - $this->id = 0; - $this->sequence = array(); - $this->data = array(); - } - - /** - * Converting section module data - store - * id for section sequence then throw all the - * module data in the database for later use. - * - * @param $data - * @return void - */ - public function convert_mod($data) { - global $DB; - - // print_object($data); // DEBUG - - unset( - $data['ROLES_OVERRIDES'], - $data['ROLES_ASSIGNMENTS'] - ); - - $this->sequence[] = $data['ID']; - - $info = array(); - $info['sectionid'] = $this->id; - $info['sectionnumber'] = $this->data['NUMBER']; - foreach ($data as $name => $value) { - $info[strtolower($name)] = $value; - } - - $temp = new stdClass; - $temp->itemname = $data['TYPE']; - $temp->itemid = $data['INSTANCE']; - $temp->parentitemid = $data['ID']; - $temp->info = base64_encode(serialize($info)); - - $DB->insert_record('backup_ids_temp', $temp); - } - - /** - * Write out any section still left in memory - */ - public function execute_after_convert() { - if (!empty($this->id)) { - $this->write_section_xml(); - } - } -} - -/** - * Writes out an activity's module.xml file - */ -class moodle1_module_structure_step extends moodle1_structure_step { - /** - * Module name - * - * @var string - */ - protected $type; - - /** - * The current Module ID - * - * @var int - */ - protected $moduleid; - - /** - * @param string $type The module name - */ - public function __construct($name, $type, convert_task $task = null) { - $this->type = $type; - parent::__construct($name, $task); - } - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - protected function define_structure() { - return array(); // @todo Hack? - } - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @return string - */ - public function get_xml_filename() { - return "activities/{$this->type}_{$this->moduleid}/module.xml"; - } - - public function get_new() { - return array( - 'visibleold' => 1, - 'completion' => 0, - 'completiongradeitemnumber' => NULL, - 'completionview' => 0, - 'completionexpected' => 0, - 'availablefrom' => 0, - 'availableuntil' => 0, - 'showavailability' => 1, - 'availability_info' => NULL, - ); - } - - public function get_renamed() { - return array( - 'type' => 'modulename', - ); - } - - public function get_deprecated() { - return array('id', 'instance'); - } - - public function execute_after_convert() { - global $DB; - - $records = $DB->get_records('backup_ids_temp', array('backupid' => $this->get_convertid(), 'itemname' => $this->type)); - foreach ($records as $record) { - $this->moduleid = $record->parentitemid; - - $this->open_xml_writer(); - $this->xmlwriter->begin_tag('module', array('id' => $this->moduleid, 'version' => '?')); // @todo What to do for version? - $this->convert_data(unserialize(base64_decode($record->info))); - $this->xmlwriter->end_tag('module'); - $this->close_xml_writer(); - } - } -} - -/** - * Write out a block's block.xml file - */ -class moodle1_block_structure_step extends moodle1_structure_step { - /** - * The block's instance ID - * - * @var int - */ - protected $instanceid; - - /** - * The block's name - * - * @var string - */ - protected $blockname; - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - protected function define_structure() { - return array( - new convert_path_element('block', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK'), - ); - } - - /** - * Return the relative path to the XML file that - * this step writes out to. Example: course/course.xml - * - * @return string - */ - public function get_xml_filename() { - return "course/blocks/{$this->blockname}_{$this->instanceid}/block.xml"; - } - - public function get_new() { - return array( - 'showinsubcontexts' => 0, - 'subpagepattern' => NULL, - 'block_positions' => NULL, - ); - } - - public function get_renamed() { - return array( - 'name' => 'blockname', - 'pageid' => 'parentcontextid', - 'pagetype' => 'pagetypepattern', - 'position' => 'defaultregion', - 'weight' => 'defaultweight', - ); - } - - public function get_deprecated() { - return array( - 'id', - 'visible', - 'roles_overrides', - 'roles_assignments', - ); - } - - public function mutate_datum($name, $datum) { - if ($name == 'pagetypepattern') { - if ($datum == 'course-view') { - $datum = 'course-view-*'; - } - - } else if ($name == 'defaultregion') { - if ($datum == 'r') { - $datum = BLOCK_POS_RIGHT; - } else { - $datum = BLOCK_POS_LEFT; - } - } - return $datum; - } - - public function convert_block($data) { - $this->instanceid = $data['ID']; - $this->blockname = $data['NAME']; - - $contextid = convert_helper::get_contextid($this->instanceid, "block_$this->name", $this->get_convertid()); - - // Map PAGEID to context ID - if ($data['PAGETYPE'] == 'course-view') { - $data['PAGEID'] = convert_helper::get_contextid($data['PAGEID'], 'course', $this->get_convertid()); - } else if (strpos($data['PAGETYPE'], 'mod-') === 0) { // EG: mod-quiz-view - $parts = explode('-', $data['PAGETYPE']); - $data['PAGEID'] = convert_helper::get_contextid($data['PAGEID'], $parts[1], $this->get_convertid()); - } - - $this->open_xml_writer(); - $this->xmlwriter->begin_tag('block', array('id' => $this->instanceid, 'contextid' => $contextid)); - $this->convert_data($data); - $this->xmlwriter->end_tag('block'); - $this->close_xml_writer(); - } -} diff --git a/backup/util/helper/convert_file_manager.class.php b/backup/util/helper/convert_file_manager.class.php deleted file mode 100644 index afa4cce5ddb..00000000000 --- a/backup/util/helper/convert_file_manager.class.php +++ /dev/null @@ -1,115 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -abstract class convert_file_manager { - - public static function convert_course_files() { - } - - public static function convert_file($converter, $filepath, $mod_context) { - global $DB; - - // make a dummy record in the temp tabke to get auto gen FILEID - $backupid = $converter->get_id(); - $dummy = new stdClass; - $dummy->backupid = $backupid; - $dummy->itemname = random_string(32); - if(!$fileid = $DB->insert_record('backup_ids_temp', $dummy)) { - // Replace with a converter_exception? - $info = convert_helper::obj_to_readable($dummy); - throw new Exception(sprintf("Could not insert dummy record with info: (%s)", $info)); - } - - // TODO: make this look at moddata as well - $converter_path = $converter->get_convertdir(); - $oldpath = $converter->get_tempdir(); - $converted_course_files = "$oldpath/course_files"; - - // Start processing the file now - $pathinfo = pathinfo($filepath); - // Try to get the base - $base = str_replace($converted_course_files, '', $pathinfo['dirname']); - // if the $base is the same as before, then it is root - if($base == $pathinfo['dirname']) { - $path = '/'; - } else if(is_dir($filepath)) { - $path = '/'. $pathinfo['basename'] . '/'; - } else { - $path = $base . '/'; - } - - // TODO: Might need to spoof more fields - $file_data = new stdClass; - $file_data->id = $fileid; - $file_data->contenthash = sha1_file($filepath); - $file_data->mod_context = $mod_context; - $file_data->filename = is_dir($filepath) ? '.' : $pathinfo['basename']; - $file_data->filesize = is_dir($filepath) ? '0' : filesize($filepath); - $file_data->mimetype = is_dir($filepath) ? '$@NULL@$' : mimeinfo('type', $pathinfo['basename']); - $file_data->created = time(); - $file_data->modified = time(); - - // Move in-memory file data to the real deal on the server - $hashdir = substr($file_data->contenthash, 0, 2); - $folders = array( - "$converted_path/files", - "$converted_path/files/$hashdir" - ); - if(!array_reduce($folders, function($in, $folder) { - return $in and (file_exists($folder) or mkdir($folder)); - }, true)) { - throw new Exception("Could not create temp dirs for file"); - } - // Move file - $new_path = $folders[1]."/$file_data->contenthash"; - if(!rename($filepath, $new_path) { - throw new Exception(sprintf("Could not move file into %s", $new_path)); - } - - // Time to insert this record now - $fs_record = new stdClass; - $fs_record->id = $fileid; - $fs_record->backupid = $backupid; - $fs_ercord->itemname = 'file'; - $fs_record->itemid = $fileid - $fs_record->info = serialize($file_data); - if(!$DB->update_record('backup_ids_temp', $fs_record)) { - $info = convert_helper::obj_to_readable($fs_record); - throw new Exception(sprintf("Could not update with real info: (%s)", $info)); - } - - // TODO: register inforef - return true; - } - - public static function get_temp_file_info($info) { - global $DB; - - } - - public static function create_files_xml() { - } -} diff --git a/backup/util/plan/convert_execution_step.class.php b/backup/util/plan/convert_execution_step.class.php deleted file mode 100644 index 74a3cd288ca..00000000000 --- a/backup/util/plan/convert_execution_step.class.php +++ /dev/null @@ -1,40 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Executable step for converters - */ -abstract class convert_execution_step extends convert_step { - - public function execute() { - return $this->define_execution(); - } - - /** - * Function that will contain all the code to be executed - */ - abstract protected function define_execution(); -} diff --git a/backup/util/plan/convert_plan.class.php b/backup/util/plan/convert_plan.class.php deleted file mode 100644 index 633bbde8cbd..00000000000 --- a/backup/util/plan/convert_plan.class.php +++ /dev/null @@ -1,85 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Convert plan - */ -class convert_plan extends base_plan implements loggable { - /** - * @var plan_converter - */ - protected $converter; - - public function __construct(plan_converter $converter) { - $this->converter = $converter; - parent::__construct('convert_plan'); - } - - /** - * This function will be responsible for handling the params, and to call - * to the corresponding logger->process() once all modifications in params - * have been performed - */ - public function log($message, $level, $a = null, $depth = null, $display = false) { - // TODO: Implement log() method. - } - - public function get_basepath() { - return $this->converter->get_workdir_path(); - } - - /** - * @return plan_converter - */ - public function get_converter() { - return $this->converter; - } - - public function get_converterid() { - return $this->converter->get_id(); - } - - /** - * Function responsible for building the tasks of any plan - * with their corresponding settings - * (must set the $built property to true) - */ - public function build() { - // This seems circular for no real reason.... - $this->converter->build_plan(); - $this->built = true; - } - - /** - * Execute the after_restore methods of all the executed tasks in the plan - */ - public function execute_after_convert() { - // Simply iterate over each task in the plan and delegate to them the execution - foreach ($this->tasks as $task) { - $task->execute_after_convert(); - } - } -} diff --git a/backup/util/plan/convert_step.class.php b/backup/util/plan/convert_step.class.php deleted file mode 100644 index 74622671098..00000000000 --- a/backup/util/plan/convert_step.class.php +++ /dev/null @@ -1,59 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Convert step - * - * @throws backup_exception - */ -abstract class convert_step extends base_step { - - public function __construct($name, convert_task $task = null) { - parent::__construct($name, $task); - } - - protected function get_convertid() { - if (!$this->task instanceof convert_task) { - throw new backup_exception('not_specified_convert_task'); // @todo Define string - } - return $this->task->get_convertid(); - } - - /** - * @throws backup_exception - * @return plan_converter - */ - protected function get_converter() { - if (!$this->task instanceof convert_task) { - throw new backup_exception('not_specified_convert_task'); // @todo Define string - } - return $this->task->get_converter(); - } - - public function execute_after_convert() { - // Default nothing - } -} diff --git a/backup/util/plan/convert_structure_step.class.php b/backup/util/plan/convert_structure_step.class.php deleted file mode 100644 index 2c1f15aa764..00000000000 --- a/backup/util/plan/convert_structure_step.class.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -abstract class convert_structure_step extends convert_step { - - final public function execute() { - - if (!$this->execute_condition()) { // Check any condition to execute this - return; - } - - // Get restore_path elements array adapting and preparing it for processing - $structure = $this->define_structure(); - if (!is_array($structure)) { - throw new restore_step_exception('restore_step_structure_not_array', $this->get_name()); // @todo Change exception - } - $this->get_converter()->add_structures($this, $structure); - } - - /** - * As far as restore structure steps are implementing restore_plugin stuff, they need to - * have the parent task available for wrapping purposes (get course/context....) - */ - public function get_task() { - return $this->task; - } - - /** - * To conditionally decide if one step will be executed or no - * - * For steps needing to be executed conditionally, based in dynamic - * conditions (at execution time vs at declaration time) you must - * override this function. It will return true if the step must be - * executed and false if not - */ - protected function execute_condition() { - return true; - } - - /** - * Function that will return the structure to be processed by this convert_step. - * Must return one array of @convert_path_element elements - */ - abstract protected function define_structure(); -} diff --git a/backup/util/plan/convert_task.class.php b/backup/util/plan/convert_task.class.php deleted file mode 100644 index cb360900bfa..00000000000 --- a/backup/util/plan/convert_task.class.php +++ /dev/null @@ -1,57 +0,0 @@ -. - -/** - * @package core - * @subpackage backup-convert - * @copyright 2011 Mark Nielsen - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Convert task - */ -abstract class convert_task extends base_task { - public function __construct($name, convert_plan $plan = null) { - parent::__construct($name, $plan); - } - - public function get_convertid() { - return $this->plan->get_converterid(); - } - - /** - * @return plan_converter - */ - public function get_converter() { - return $this->plan->get_converter(); - } - - protected function define_settings() { - // None - } - - public function execute_after_convert() { - if ($this->executed) { - foreach ($this->steps as $step) { - $step->execute_after_convert(); - } - } - } -}