Example #1
0
/**
 * 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);
}
Example #3
0
/**
 * 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;
}
Example #6
0
/**
 * 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);
}
Example #7
0
/**
 * 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);
}