Permalink
Browse files

Merge branch 'MDL-32880_23_3' of git://github.com/pauln/moodle into M…

…OODLE_23_STABLE
  • Loading branch information...
2 parents 27f4a33 + d09fffb commit 106c4841a71ab7d11d0795a0a0b0801b455bfb69 @stronk7 stronk7 committed Dec 11, 2012
@@ -88,10 +88,13 @@ protected static function get_plugin_handlers($type, moodle1_converter $converte
foreach ($plugins as $name => $dir) {
$handlerfile = $dir . '/backup/moodle1/lib.php';
$handlerclass = "moodle1_{$type}_{$name}_handler";
- if (!file_exists($handlerfile)) {
+ if (file_exists($handlerfile)) {
+ require_once($handlerfile);
+ } elseif ($type == 'block') {
+ $handlerclass = "moodle1_block_generic_handler";
+ } else {
continue;
}
- require_once($handlerfile);
if (!class_exists($handlerclass)) {
throw new moodle1_convert_exception('missing_handler_class', $handlerclass);
@@ -1989,10 +1992,94 @@ public function on_legacy_resource_end(array $data) {
*/
abstract class moodle1_block_handler extends moodle1_plugin_handler {
+ public function get_paths() {
+ $blockname = strtoupper($this->pluginname);
+ return array(
+ new convert_path('block', "/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/{$blockname}"),
+ );
+ }
+
+ public function process_block(array $data) {
+ $newdata = $this->convert_common_block_data($data);
+
+ $this->write_block_xml($newdata, $data);
+ $this->write_inforef_xml($newdata, $data);
+ $this->write_roles_xml($newdata, $data);
+
+ return $data;
+ }
+
+ protected function convert_common_block_data(array $olddata) {
+ $newdata = array();
+
+ $newdata['blockname'] = $olddata['name'];
+ $newdata['parentcontextid'] = $this->converter->get_contextid(CONTEXT_COURSE, 0);
+ $newdata['showinsubcontexts'] = 0;
+ $newdata['pagetypepattern'] = $olddata['pagetype'].='-*';
+ $newdata['subpagepattern'] = null;
+ $newdata['defaultregion'] = ($olddata['position']=='l')?'side-pre':'side-post';
+ $newdata['defaultweight'] = $olddata['weight'];
+ $newdata['configdata'] = $this->convert_configdata($olddata);
+
+ return $newdata;
+ }
+
+ protected function convert_configdata(array $olddata) {
+ return $olddata['configdata'];
+ }
+
+ protected function write_block_xml($newdata, $data) {
+ $contextid = $this->converter->get_contextid(CONTEXT_BLOCK, $data['id']);
+
+ $this->open_xml_writer("course/blocks/{$data['name']}_{$data['id']}/block.xml");
+ $this->xmlwriter->begin_tag('block', array('id' => $data['id'], 'contextid' => $contextid));
+
+ foreach ($newdata as $field => $value) {
+ $this->xmlwriter->full_tag($field, $value);
+ }
+
+ $this->xmlwriter->begin_tag('block_positions');
+ $this->xmlwriter->begin_tag('block_position', array('id' => 1));
+ $this->xmlwriter->full_tag('contextid', $newdata['parentcontextid']);
+ $this->xmlwriter->full_tag('pagetype', $data['pagetype']);
+ $this->xmlwriter->full_tag('subpage', '');
+ $this->xmlwriter->full_tag('visible', $data['visible']);
+ $this->xmlwriter->full_tag('region', $newdata['defaultregion']);
+ $this->xmlwriter->full_tag('weight', $newdata['defaultweight']);
+ $this->xmlwriter->end_tag('block_position');
+ $this->xmlwriter->end_tag('block_positions');
+ $this->xmlwriter->end_tag('block');
+ $this->close_xml_writer();
+ }
+
+ protected function write_inforef_xml($newdata, $data) {
+ $this->open_xml_writer("course/blocks/{$data['name']}_{$data['id']}/inforef.xml");
+ $this->xmlwriter->begin_tag('inforef');
+ // Subclasses may provide inforef contents if needed
+ $this->xmlwriter->end_tag('inforef');
+ $this->close_xml_writer();
+ }
+
+ protected function write_roles_xml($newdata, $data) {
+ // This is an empty shell, as the moodle1 converter doesn't handle user data.
+ $this->open_xml_writer("course/blocks/{$data['name']}_{$data['id']}/roles.xml");
+ $this->xmlwriter->begin_tag('roles');
+ $this->xmlwriter->full_tag('role_overrides', '');
+ $this->xmlwriter->full_tag('role_assignments', '');
+ $this->xmlwriter->end_tag('roles');
+ $this->close_xml_writer();
+ }
}
/**
+ * Base class for block generic handler
+ */
+class moodle1_block_generic_handler extends moodle1_block_handler {
+
+}
+
+/**
* Base class for the activity modules' subplugins
*/
abstract class moodle1_submod_handler extends moodle1_plugin_handler {
@@ -254,7 +254,7 @@ public function process_chunk($data) {
$path = '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentblock;
} else if (strpos($path, '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK') === 0) {
- $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentmod, $path);
+ $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentblock, $path);
}
if ($path !== $data['path']) {
@@ -350,12 +350,12 @@ public function path_start_reached($path) {
}
if ($path === '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK') {
- $this->currentmod = null;
+ $this->currentblock = null;
$forbidden = true;
} else if (strpos($path, '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK') === 0) {
// expand the BLOCK paths so that they contain the module name
- $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentmod, $path);
+ $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentblock, $path);
}
if (empty($this->pathelements[$path])) {
@@ -397,7 +397,7 @@ public function path_end_reached($path) {
$path = '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentblock;
} else if (strpos($path, '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK') === 0) {
- $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentmod, $path);
+ $path = str_replace('/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK', '/MOODLE_BACKUP/COURSE/BLOCKS/BLOCK/' . $this->currentblock, $path);
}
if (empty($this->pathelements[$path])) {
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Provides support for the conversion of moodle1 backup to the moodle2 format
+ *
+ * @package block_html
+ * @copyright 2012 Paul Nicholls
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Block conversion handler for html
+ */
+class moodle1_block_html_handler extends moodle1_block_handler {
+ private $fileman = null;
+ protected function convert_configdata(array $olddata) {
+ $instanceid = $olddata['id'];
+ $contextid = $this->converter->get_contextid(CONTEXT_BLOCK, $olddata['id']);
+ $configdata = unserialize(base64_decode($olddata['configdata']));
+
+ // get a fresh new file manager for this instance
+ $this->fileman = $this->converter->get_file_manager($contextid, 'block_html');
+
+ // convert course files embedded in the block content
+ $this->fileman->filearea = 'content';
+ $this->fileman->itemid = 0;
+ $configdata->text = moodle1_converter::migrate_referenced_files($configdata->text, $this->fileman);
+ $configdata->format = FORMAT_HTML;
+
+ return base64_encode(serialize($configdata));
+ }
+
+ protected function write_inforef_xml($newdata, $data) {
+ $this->open_xml_writer("course/blocks/{$data['name']}_{$data['id']}/inforef.xml");
+ $this->xmlwriter->begin_tag('inforef');
+ $this->xmlwriter->begin_tag('fileref');
+ foreach ($this->fileman->get_fileids() as $fileid) {
+ $this->write_xml('file', array('id' => $fileid));
+ }
+ $this->xmlwriter->end_tag('fileref');
+ $this->xmlwriter->end_tag('inforef');
+ $this->close_xml_writer();
+ }
+}
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * Provides support for the conversion of moodle1 backup to the moodle2 format
+ *
+ * @package block_rss_client
+ * @copyright 2012 Paul Nicholls
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * Block conversion handler for rss_client
+ */
+class moodle1_block_rss_client_handler extends moodle1_block_handler {
+ public function process_block(array $data) {
+ parent::process_block($data);
+ $instanceid = $data['id'];
+ $contextid = $this->converter->get_contextid(CONTEXT_BLOCK, $data['id']);
+
+ // Moodle 1.9 backups do not include sufficient data to restore feeds, so we need an empty shell rss_client.xml
+ // for the restore process to find
+ $this->open_xml_writer("course/blocks/{$data['name']}_{$instanceid}/rss_client.xml");
+ $this->xmlwriter->begin_tag('block', array('id' => $instanceid, 'contextid' => $contextid, 'blockname' => 'rss_client'));
+ $this->xmlwriter->begin_tag('rss_client', array('id' => $instanceid));
+ $this->xmlwriter->full_tag('feeds', '');
+ $this->xmlwriter->end_tag('rss_client');
+ $this->xmlwriter->end_tag('block');
+ $this->close_xml_writer();
+
+ return $data;
+ }
+}

0 comments on commit 106c484

Please sign in to comment.