/** * Migrate page module data from 1.9 resource_old table to new page table * @return void */ function page_20_migrate() { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->libdir}/resourcelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { // bad luck, somebody deleted resource module return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } $fs = get_file_storage(); if ($candidates = $DB->get_recordset('resource_old', array('type' => 'html', 'migrated' => 0))) { foreach ($candidates as $candidate) { page_20_migrate_candidate($candidate, $fs, FORMAT_HTML); } $candidates->close(); } if ($candidates = $DB->get_recordset('resource_old', array('type' => 'text', 'migrated' => 0))) { foreach ($candidates as $candidate) { page_20_migrate_candidate($candidate, $fs, $candidate->reference); } $candidates->close(); } // clear all course modinfo caches rebuild_course_cache(0, true); }
/** * Migrate widgetspace module data from 1.9 resource_old table to new widgetspace table * @return void */ function widgetspace_20_migrate() { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->libdir}/resourcelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { // bad luck, somebody deleted resource module return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } $fs = get_file_storage(); $candidates = $DB->get_recordset('resource_old', array('type' => 'html', 'migrated' => 0)); foreach ($candidates as $candidate) { widgetspace_20_migrate_candidate($candidate, $fs, FORMAT_HTML); } $candidates->close(); $candidates = $DB->get_recordset('resource_old', array('type' => 'text', 'migrated' => 0)); foreach ($candidates as $candidate) { //there might be some rubbish instead of format int value $format = (int) $candidate->reference; if ($format < 0 or $format > 4) { $format = FORMAT_MOODLE; } widgetspace_20_migrate_candidate($candidate, $fs, $format); } $candidates->close(); // clear all course modinfo caches rebuild_course_cache(0, true); }
/** * Migrate folder module data from 1.9 resource_old table to new older table * @return void */ function folder_20_migrate() { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { // bad luck, somebody deleted resource module return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } if (!($candidates = $DB->get_recordset('resource_old', array('type' => 'directory', 'migrated' => 0)))) { return; } $fs = get_file_storage(); foreach ($candidates as $candidate) { upgrade_set_timeout(); $directory = '/' . trim($candidate->reference, '/') . '/'; $directory = str_replace('//', '/', $directory); $folder = new object(); $folder->course = $candidate->course; $folder->name = $candidate->name; $folder->intro = $candidate->intro; $folder->introformat = $candidate->introformat; $folder->revision = 1; $folder->timemodified = time(); if (!($folder = resource_migrate_to_module('folder', $candidate, $folder))) { continue; } // copy files in given directory, skip moddata and backups! $context = get_context_instance(CONTEXT_MODULE, $candidate->cmid); $coursecontext = get_context_instance(CONTEXT_COURSE, $candidate->course); $files = $fs->get_directory_files($coursecontext->id, 'course_content', 0, $directory, true, true); $file_record = array('contextid' => $context->id, 'filearea' => 'folder_content', 'itemid' => 0); foreach ($files as $file) { $path = $file->get_filepath(); if (stripos($path, '/backupdata/') === 0 or stripos($path, '/moddata/') === 0) { // do not publish protected data! continue; } $relpath = substr($path, strlen($directory) - 1); // keep only subfolder paths $file_record['filepath'] = $relpath; $fs->create_file_from_storedfile($file_record, $file); } } $candidates->close(); // clear all course modinfo caches rebuild_course_cache(0, true); }
/** * Migrate url module data from 1.9 resource_old table to new url table * @return void */ function url_20_migrate() { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->libdir}/resourcelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { // bad luck, somebody deleted resource module return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } $candidates = $DB->get_recordset('resource_old', array('type' => 'file', 'migrated' => 0)); if (!$candidates->valid()) { $candidates->close(); // Not going to iterate (but exit), close rs return; } foreach ($candidates as $candidate) { $path = $candidate->reference; $siteid = get_site()->id; if (strpos($path, 'LOCALPATH') === 0) { // ignore not maintained local files - sorry continue; } else { if (!strpos($path, '://')) { // not URL continue; } else { if (preg_match("|{$CFG->wwwroot}/file.php(\\?file=)?/{$siteid}(/[^\\s'\"&\\?#]+)|", $path, $matches)) { // handled by resource module continue; } else { if (preg_match("|{$CFG->wwwroot}/file.php(\\?file=)?/{$candidate->course}(/[^\\s'\"&\\?#]+)|", $path, $matches)) { // handled by resource module continue; } } } } upgrade_set_timeout(); if ($CFG->texteditors !== 'textarea') { $intro = text_to_html($candidate->intro, false, false, true); $introformat = FORMAT_HTML; } else { $intro = $candidate->intro; $introformat = FORMAT_MOODLE; } $url = new stdClass(); $url->course = $candidate->course; $url->name = $candidate->name; $url->intro = $intro; $url->introformat = $introformat; $url->externalurl = $path; $url->timemodified = time(); $options = array('printheading' => 0, 'printintro' => 1); $parameters = array(); if ($candidate->options == 'frame') { $url->display = RESOURCELIB_DISPLAY_FRAME; } else { if ($candidate->options == 'objectframe') { $url->display = RESOURCELIB_DISPLAY_EMBED; } else { if ($candidate->popup) { $url->display = RESOURCELIB_DISPLAY_POPUP; if ($candidate->popup) { $rawoptions = explode(',', $candidate->popup); foreach ($rawoptions as $rawoption) { list($name, $value) = explode('=', trim($rawoption), 2); if ($value > 0 and ($name == 'width' or $name == 'height')) { $options['popup' . $name] = $value; continue; } } } } else { $url->display = RESOURCELIB_DISPLAY_AUTO; } } } $url->displayoptions = serialize($options); if ($candidate->alltext) { $rawoptions = explode(',', $candidate->alltext); foreach ($rawoptions as $rawoption) { list($variable, $parameter) = explode('=', trim($rawoption), 2); $parameters[$parameter] = $variable; } } $url->parameters = serialize($parameters); if (!($url = resource_migrate_to_module('url', $candidate, $url))) { continue; } } $candidates->close(); // clear all course modinfo caches rebuild_course_cache(0, true); }
function xmldb_resource_upgrade($oldversion) { global $CFG, $DB; require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; $dbman = $DB->get_manager(); //===== 1.9.0 upgrade line ======// if ($oldversion < 2009041900) { resource_20_prepare_migration(); // resource savepoint reached upgrade_mod_savepoint(true, 2009041900, 'resource'); } if ($oldversion < 2009042000) { // Rename field summary on table resource to intro $table = new xmldb_table('resource'); $field = new xmldb_field('summary', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'reference'); // Launch rename field summary $dbman->rename_field($table, $field, 'intro'); // resource savepoint reached upgrade_mod_savepoint(true, 2009042000, 'resource'); } if ($oldversion < 2009042001) { // Define field introformat to be added to resource $table = new xmldb_table('resource'); $field = new xmldb_field('introformat', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'intro'); // Launch add field introformat if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // conditionally migrate to html format in intro if ($CFG->texteditors !== 'textarea') { $rs = $DB->get_recordset('resource', array('introformat' => FORMAT_MOODLE), '', 'id,intro,introformat'); foreach ($rs as $r) { $r->intro = text_to_html($r->intro, false, false, true); $r->introformat = FORMAT_HTML; $DB->update_record('resource', $r); upgrade_set_timeout(); } $rs->close(); } // resource savepoint reached upgrade_mod_savepoint(true, 2009042001, 'resource'); } if ($oldversion < 2009062600) { $res_count = $DB->count_records('resource'); $old_count = $DB->count_records('resource_old', array('migrated' => 0)); if ($res_count != $old_count) { //we can not continue, something is very wrong!! upgrade_log(UPGRADE_LOG_ERROR, null, 'Resource migration failed.'); upgrade_mod_savepoint(false, 2009062600, 'resource'); } // Drop obsoleted fields from resource table $table = new xmldb_table('resource'); $fields = array('type', 'reference', 'alltext', 'popup', 'options'); foreach ($fields as $fname) { $field = new xmldb_field($fname); $dbman->drop_field($table, $field); } // resource savepoint reached upgrade_mod_savepoint(true, 2009062600, 'resource'); } if ($oldversion < 2009062601) { $table = new xmldb_table('resource'); // Define field tobemigrated to be added to resource $field = new xmldb_field('tobemigrated', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'introformat'); // Conditionally launch add field tobemigrated if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field mainfile to be added to resource $field = new xmldb_field('mainfile', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'tobemigrated'); // Conditionally launch add field mainfile if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field legacyfiles to be added to resource $field = new xmldb_field('legacyfiles', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'mainfile'); // Conditionally launch add field legacyfiles if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field legacyfileslast to be added to resource $field = new xmldb_field('legacyfileslast', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'legacyfiles'); // Conditionally launch add field legacyfileslast if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field display to be added to resource $field = new xmldb_field('display', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'legacyfileslast'); // Conditionally launch add field display if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field displayoptions to be added to resource $field = new xmldb_field('displayoptions', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'display'); // Conditionally launch add field displayoptions if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field filterfiles to be added to resource $field = new xmldb_field('filterfiles', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'displayoptions'); // Conditionally launch add field filterfiles if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field revision to be added to resource $field = new xmldb_field('revision', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'filterfiles'); // Conditionally launch add field revision if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } //mark all records as awaiting migration $DB->set_field('resource', 'tobemigrated', 1, array()); // resource savepoint reached upgrade_mod_savepoint(true, 2009062601, 'resource'); } if ($oldversion < 2009062603) { resource_20_migrate(); upgrade_mod_savepoint(true, 2009062603, 'resource'); } if ($oldversion < 2009063000) { //migrate and prune old settings - admins need to review and set up all module settings anyway if (!empty($CFG->resource_framesize)) { set_config('framesize', $CFG->resource_framesize, 'resource'); } if (!empty($CFG->resource_popupheight)) { set_config('popupheight', $CFG->resource_popupheight, 'resource'); } if (!empty($CFG->resource_popupwidth)) { set_config('popupwidth', $CFG->resource_popupwidth, 'resource'); } $cleanupsettings = array('resource_framesize', 'resource_popupheight', 'resource_popupwidth', 'resource_popupmenubar', 'resource_websearch', 'resource_defaulturl', 'resource_allowlocalfiles', 'resource_popup', 'resource_popupresizable', 'resource_popupscrollbars', 'resource_popupdirectories', 'resource_popuplocation', 'resource_popuptoolbar', 'resource_popupstatus'); foreach ($cleanupsettings as $setting) { unset_config($setting); } upgrade_mod_savepoint(true, 2009063000, 'resource'); } if ($oldversion < 2009080501) { require_once "{$CFG->libdir}/filelib.php"; $sql = "SELECT r.id,\n r.mainfile,\n cm.id AS cmid\n FROM {resource} r\n JOIN {modules} m ON m.name='resource'\n JOIN {course_modules} cm ON (cm.module = m.id AND cm.instance = r.id)"; $instances = $DB->get_recordset_sql($sql); foreach ($instances as $instance) { if (empty($instance->mainfile)) { // weird continue; } $context = get_context_instance(CONTEXT_MODULE, $instance->cmid, MUST_EXIST); $parts = explode('/', $instance->mainfile); $filename = array_pop($parts); $filepath = implode('/', $parts); file_set_sortorder($context->id, 'mod_resource', 'content', 0, $filepath, $filename, 1); } $instances->close(); /// Define field mainfile to be dropped from resource $table = new xmldb_table('resource'); $field = new xmldb_field('mainfile'); $dbman->drop_field($table, $field); /// resource savepoint reached upgrade_mod_savepoint(true, 2009080501, 'resource'); } // MDL-10906. Removing resource_allowlocalfiles setting. if ($oldversion < 2010083000) { unset_config('resource_allowlocalfiles'); upgrade_mod_savepoint(true, 2010083000, 'resource'); } if ($oldversion < 2011022700) { // refresh resource links breakage caused by invalid sortorder require_once $CFG->dirroot . '/course/lib.php'; rebuild_course_cache(0, true); upgrade_mod_savepoint(true, 2011022700, 'resource'); } // Moodle v2.1.0 release upgrade line // Put any upgrade step following this return true; }
/** * Migrate ubikc module data from 1.9 resource_old table to new older table * @return void */ function ubikc_20_migrate() { global $CFG, $DB; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } $candidates = $DB->get_recordset('resource_old', array('type' => 'directory', 'migrated' => 0)); if (!$candidates->valid()) { $candidates->close(); // Not going to iterate (but exit), close rs return; } $fs = get_file_storage(); foreach ($candidates as $candidate) { upgrade_set_timeout(); $directory = '/' . trim($candidate->reference, '/') . '/'; $directory = str_replace('//', '/', $directory); if ($CFG->texteditors !== 'textarea') { $intro = text_to_html($candidate->intro, false, false, true); $introformat = FORMAT_HTML; } else { $intro = $candidate->intro; $introformat = FORMAT_MOODLE; } $ubikc = new stdClass(); $ubikc->course = $candidate->course; $ubikc->name = $candidate->name; $ubikc->intro = $intro; $ubikc->introformat = $introformat; $ubikc->timemodified = time(); $ubikc->kcrevision = 1; if (!($ubikc = resource_migrate_to_module('ubikc', $candidate, $ubikc))) { continue; } // copy files in given directory, skip moddata and backups! $context = get_context_instance(CONTEXT_MODULE, $candidate->cmid); $coursecontext = get_context_instance(CONTEXT_COURSE, $candidate->course); $files = $fs->get_directory_files($coursecontext->id, 'course', 'legacy', 0, $directory, true, true); $file_record = array('contextid' => $context->id, 'component' => 'mod_ubikc', 'filearea' => 'content', 'itemid' => 0); foreach ($files as $file) { $path = $file->get_filepath(); if (stripos($path, '/backupdata/') === 0 or stripos($path, '/moddata/') === 0) { // do not publish protected data! continue; } $relpath = substr($path, strlen($directory) - 1); $file_record['filepath'] = $relpath; $fs->create_file_from_storedfile($file_record, $file); } } $candidates->close(); // clear all course modinfo caches rebuild_course_cache(0, true); }
/** * Resource module upgrade code * * This file keeps track of upgrades to * the resource module * * Sometimes, changes between versions involve * alterations to database structures and other * major things that may break installations. * * The upgrade function in this file will attempt * to perform all the necessary actions to upgrade * your older installtion to the current version. * * If there's something it cannot do itself, it * will tell you what you need to do. * * The commands in here will all be database-neutral, * using the methods of database_manager class * * Please do not forget to use upgrade_set_timeout() * before any action that may take longer time to finish. * * @package mod-resource * @copyright 2009 Petr Skoda (http://skodak.org) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ function xmldb_resource_upgrade($oldversion) { global $CFG, $DB; require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; $dbman = $DB->get_manager(); $result = true; //===== 1.9.0 upgrade line ======// if ($result && $oldversion < 2009042000) { // Rename field summary on table resource to intro $table = new xmldb_table('resource'); $field = new xmldb_field('summary', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'reference'); // Launch rename field summary $dbman->rename_field($table, $field, 'intro'); // resource savepoint reached upgrade_mod_savepoint($result, 2009042000, 'resource'); } if ($result && $oldversion < 2009042001) { // Define field introformat to be added to resource $table = new xmldb_table('resource'); $field = new xmldb_field('introformat', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'intro'); // Launch add field introformat $dbman->add_field($table, $field); // set format to current $DB->set_field('resource', 'introformat', FORMAT_MOODLE, array()); // resource savepoint reached upgrade_mod_savepoint($result, 2009042001, 'resource'); } if ($result && $oldversion < 2009062500) { // fix log actions update_log_display_entry('resource', 'view all', 'resource', 'name'); // resource savepoint reached upgrade_mod_savepoint($result, 2009062500, 'resource'); } if ($result && $oldversion < 2009062501) { resource_20_prepare_migration(); // resource savepoint reached upgrade_mod_savepoint($result, 2009062501, 'resource'); } if ($result && $oldversion < 2009062600) { $res_count = $DB->count_records('resource'); $old_count = $DB->count_records('resource_old', array('migrated' => 0)); if ($res_count != $old_count) { //we can not continue, something is very wrong!! upgrade_log(UPGRADE_LOG_ERROR, null, 'Resource migration failed.'); upgrade_mod_savepoint(false, 2009062600, 'resource'); } // Drop obsoleted fields from resource table $table = new xmldb_table('resource'); $fields = array('type', 'reference', 'alltext', 'popup', 'options'); foreach ($fields as $fname) { $field = new xmldb_field($fname); $dbman->drop_field($table, $field); } // resource savepoint reached upgrade_mod_savepoint($result, 2009062600, 'resource'); } if ($result && $oldversion < 2009062601) { $table = new xmldb_table('resource'); // Define field tobemigrated to be added to resource $field = new xmldb_field('tobemigrated', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'introformat'); // Conditionally launch add field tobemigrated if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field mainfile to be added to resource $field = new xmldb_field('mainfile', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'tobemigrated'); // Conditionally launch add field mainfile if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field legacyfiles to be added to resource $field = new xmldb_field('legacyfiles', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'mainfile'); // Conditionally launch add field legacyfiles if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field legacyfileslast to be added to resource $field = new xmldb_field('legacyfileslast', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'legacyfiles'); // Conditionally launch add field legacyfileslast if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field display to be added to resource $field = new xmldb_field('display', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'legacyfileslast'); // Conditionally launch add field display if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field displayoptions to be added to resource $field = new xmldb_field('displayoptions', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'display'); // Conditionally launch add field displayoptions if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field filterfiles to be added to resource $field = new xmldb_field('filterfiles', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'displayoptions'); // Conditionally launch add field filterfiles if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } // Define field revision to be added to resource $field = new xmldb_field('revision', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'filterfiles'); // Conditionally launch add field revision if (!$dbman->field_exists($table, $field)) { $dbman->add_field($table, $field); } //mark all records as awaiting migration $DB->set_field('resource', 'tobemigrated', 1, array()); // resource savepoint reached upgrade_mod_savepoint($result, 2009062601, 'resource'); } if ($result && $oldversion < 2009062603) { resource_20_migrate(); upgrade_mod_savepoint($result, 2009062603, 'resource'); } if ($result && $oldversion < 2009063000) { //migrate and prune old settings - admins need to review and set up all module settings anyway if (!empty($CFG->resource_framesize)) { set_config('framesize', $CFG->resource_framesize, 'resource'); } if (!empty($CFG->resource_popupheight)) { set_config('popupheight', $CFG->resource_popupheight, 'resource'); } if (!empty($CFG->resource_popupwidth)) { set_config('popupwidth', $CFG->resource_popupwidth, 'resource'); } $cleanupsettings = array('resource_framesize', 'resource_popupheight', 'resource_popupwidth', 'resource_popupmenubar', 'resource_websearch', 'resource_defaulturl', 'resource_allowlocalfiles', 'resource_popup', 'resource_popupresizable', 'resource_popupscrollbars', 'resource_popupdirectories', 'resource_popuplocation', 'resource_popuptoolbar', 'resource_popupstatus'); foreach ($cleanupsettings as $setting) { unset_config($setting); } upgrade_mod_savepoint($result, 2009063000, 'resource'); } return $result; }
/** * Migrate imscp module data from 1.9 resource_old table to new imscp table * @return void */ function imscp_20_migrate() { global $CFG, $DB, $OUTPUT; require_once "{$CFG->libdir}/filelib.php"; require_once "{$CFG->dirroot}/course/lib.php"; require_once "{$CFG->dirroot}/mod/imscp/locallib.php"; if (!file_exists("{$CFG->dirroot}/mod/resource/db/upgradelib.php")) { // bad luck, somebody deleted resource module return; } require_once "{$CFG->dirroot}/mod/resource/db/upgradelib.php"; // create resource_old table and copy resource table there if needed if (!resource_20_prepare_migration()) { // no modules or fresh install return; } $candidates = $DB->get_recordset('resource_old', array('type' => 'ims', 'migrated' => 0)); if (!$candidates->valid()) { $candidates->close(); // Not going to iterate (but exit), close rs return; } $fs = get_file_storage(); foreach ($candidates as $candidate) { upgrade_set_timeout(60); if ($CFG->texteditors !== 'textarea') { $intro = text_to_html($candidate->intro, false, false, true); $introformat = FORMAT_HTML; } else { $intro = $candidate->intro; $introformat = FORMAT_MOODLE; } $imscp = new stdClass(); $imscp->course = $candidate->course; $imscp->name = $candidate->name; $imscp->intro = $intro; $imscp->introformat = $introformat; $imscp->revision = 1; $imscp->keepold = 1; $imscp->timemodified = time(); if (!($imscp = resource_migrate_to_module('imscp', $candidate, $imscp))) { continue; } $context = get_context_instance(CONTEXT_MODULE, $candidate->cmid); $root = "{$CFG->dataroot}/{$candidate->course}/{$CFG->moddata}/resource/{$candidate->oldid}"; // migrate package backup file if ($candidate->reference) { $package = basename($candidate->reference); $fullpath = $root . '/' . $package; if (file_exists($fullpath)) { $file_record = array('contextid' => $context->id, 'component' => 'mod_imscp', 'filearea' => 'backup', 'itemid' => 1, 'filepath' => '/', 'filename' => $package); $fs->create_file_from_pathname($file_record, $fullpath); } } // migrate extracted package data $files = imsc_migrate_get_old_files($root, ''); if (empty($files)) { // if ims package doesn't exist, continue loop echo $OUTPUT->notification("IMS package data cannot be found, failed migrating activity: \"{$candidate->name}\", please fix it manually"); continue; } $file_record = array('contextid' => $context->id, 'component' => 'mod_imscp', 'filearea' => 'content', 'itemid' => 1); $error = false; foreach ($files as $relname => $fullpath) { $parts = explode('/', $relname); $file_record['filename'] = array_pop($parts); $parts[] = ''; // keep trailing slash $file_record['filepath'] = implode('/', $parts); try { $fs->create_file_from_pathname($file_record, $fullpath); } catch (Exception $e) { //continue on error, we can not recover anyway $error = true; echo $OUTPUT->notification("IMSCP: failed migrating file: {$relname}"); } } unset($files); // parse manifest $structure = imscp_parse_structure($imscp, $context); $imscp->structure = is_array($structure) ? serialize($structure) : null; $DB->update_record('imscp', $imscp); // remove old moddata dir only if no error and manifest ok if (!$error and is_array($structure)) { fulldelete($root); } } $candidates->close(); // clear all course modinfo caches rebuild_course_cache(0, true); }