/** * Upgrade moodle core * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function upgrade_core($version, $verbose) { global $CFG, $SITE, $DB, $COURSE; raise_memory_limit(MEMORY_EXTRA); require_once($CFG->libdir.'/db/upgrade.php'); // Defines upgrades try { // Reset caches before any output. cache_helper::purge_all(true); purge_all_caches(); // Upgrade current language pack if we can upgrade_language_pack(); print_upgrade_part_start('moodle', false, $verbose); // Pre-upgrade scripts for local hack workarounds. $preupgradefile = "$CFG->dirroot/local/preupgrade.php"; if (file_exists($preupgradefile)) { core_php_time_limit::raise(); require($preupgradefile); // Reset upgrade timeout to default. upgrade_set_timeout(); } $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // In case structure of 'course' table has been changed and we forgot to update $SITE, re-read it from db. $SITE = $DB->get_record('course', array('id' => $SITE->id)); $COURSE = clone($SITE); // perform all other component upgrade routines update_capabilities('moodle'); log_update_descriptions('moodle'); external_update_descriptions('moodle'); events_update_definition('moodle'); \core\task\manager::reset_scheduled_tasks_for_component('moodle'); message_update_providers('moodle'); \core\message\inbound\manager::update_handlers_for_component('moodle'); // Update core definitions. cache_helper::update_definitions(true); // Purge caches again, just to be sure we arn't holding onto old stuff now. cache_helper::purge_all(true); purge_all_caches(); // Clean up contexts - more and more stuff depends on existence of paths and contexts context_helper::cleanup_instances(); context_helper::create_instances(null, false); context_helper::build_all_paths(false); $syscontext = context_system::instance(); $syscontext->mark_dirty(); print_upgrade_part_end('moodle', false, $verbose); } catch (Exception $ex) { upgrade_handle_exception($ex); } }
/** * Upgrade moodle core * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function upgrade_core($version, $verbose) { global $CFG; require_once $CFG->libdir . '/db/upgrade.php'; // Defines upgrades try { // Upgrade current language pack if we can if (empty($CFG->skiplangupgrade)) { upgrade_language_pack(false); } print_upgrade_part_start('moodle', false, $verbose); // one time special local migration pre 2.0 upgrade script if ($version < 2007101600) { $pre20upgradefile = "{$CFG->dirrot}/local/upgrade_pre20.php"; if (file_exists($pre20upgradefile)) { set_time_limit(0); require $pre20upgradefile; // reset upgrade timeout to default upgrade_set_timeout(); } } $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // perform all other component upgrade routines update_capabilities('moodle'); events_update_definition('moodle'); message_update_providers('moodle'); remove_dir($CFG->dataroot . '/cache', true); // flush cache print_upgrade_part_end('moodle', false, $verbose); } catch (Exception $ex) { upgrade_handle_exception($ex); } }
/** * Upgrade moodle core * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function upgrade_core($version, $verbose) { global $CFG; raise_memory_limit(MEMORY_EXTRA); require_once($CFG->libdir.'/db/upgrade.php'); // Defines upgrades try { // Reset caches before any output purge_all_caches(); // Upgrade current language pack if we can upgrade_language_pack(); print_upgrade_part_start('moodle', false, $verbose); // one time special local migration pre 2.0 upgrade script if ($CFG->version < 2007101600) { $pre20upgradefile = "$CFG->dirroot/local/upgrade_pre20.php"; if (file_exists($pre20upgradefile)) { set_time_limit(0); require($pre20upgradefile); // reset upgrade timeout to default upgrade_set_timeout(); } } $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // perform all other component upgrade routines update_capabilities('moodle'); log_update_descriptions('moodle'); external_update_descriptions('moodle'); events_update_definition('moodle'); message_update_providers('moodle'); // Reset caches again, just to be sure purge_all_caches(); // Clean up contexts - more and more stuff depends on existence of paths and contexts context_helper::cleanup_instances(); context_helper::create_instances(null, false); context_helper::build_all_paths(false); $syscontext = context_system::instance(); $syscontext->mark_dirty(); print_upgrade_part_end('moodle', false, $verbose); } catch (Exception $ex) { upgrade_handle_exception($ex); } }
try { // Upgrade current language pack if we can if (empty($CFG->skiplangupgrade)) { upgrade_language_pack(false); } print_upgrade_part_start('moodle', false); $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // perform all other component upgrade routines update_capabilities('moodle'); events_update_definition('moodle'); message_update_providers('moodle'); message_update_providers('message'); remove_dir($CFG->dataroot . '/cache', true); // flush cache print_upgrade_part_end('moodle', false); } catch (Exception $ex) { upgrade_handle_exception($ex); } } } } else { if ($version < $CFG->version) { notify("WARNING!!! The code you are using is OLDER than the version that made these databases!"); } } /// Updated human-readable release version if necessary if ($release != $CFG->release) {
/** * Find and check all submodules and load them up or upgrade them if necessary * * @global object * @global object */ function vmoodle_upgrade_subplugins_modules($startcallback, $endcallback, $verbose = true) { global $CFG, $DB; include $CFG->dirroot . '/local/vmoodle/db/subplugins.php'; foreach ($subplugins as $type => $subpluginpath) { $plugindirs = glob($CFG->dirroot . '/' . $subpluginpath . '/*'); foreach ($plugindirs as $dir) { $plug = basename($dir); $fullplug = $dir; if ($plug === 'CVS') { // Someone has unzipped the template, ignore it. continue; } if ($plug === 'NEWMODULE') { // Someone has unzipped the template, ignore it. continue; } // Reset time so that it works when installing a large number of plugins. set_time_limit(600); $component = clean_param($type . '_' . $plug, PARAM_COMPONENT); // standardised plugin name // Check plugin dir is valid name. if (empty($component)) { throw new plugin_defective_exception($type . '_' . $plug, 'Invalid plugin directory name.'); } if (!is_readable($fullplug . '/version.php')) { continue; } $plugin = new stdClass(); require $fullplug . '/version.php'; // Defines $plugin with version etc. // If plugin tells us it's full name we may check the location. if (isset($plugin->component)) { if ($plugin->component !== $component) { throw new plugin_defective_exception($component, 'Plugin installed in wrong folder.'); } } if (empty($plugin->version)) { throw new plugin_defective_exception($component, 'Missing version value in version.php'); } $plugin->name = $plug; $plugin->fullname = $component; if (!empty($plugin->requires)) { if ($plugin->requires > $CFG->version) { throw new upgrade_requires_exception($component, $plugin->version, $CFG->version, $plugin->requires); } else { if ($plugin->requires < 2010000000) { throw new plugin_defective_exception($component, 'Plugin is not compatible with Moodle 2.x or later.'); } } } // Try to recover from interrupted install.php if needed. if (file_exists($fullplug . '/db/install.php')) { if (get_config($plugin->fullname, 'installrunning')) { require_once $fullplug . '/db/install.php'; $recover_install_function = 'xmldb_' . $plugin->fullname . '_install_recovery'; if (function_exists($recover_install_function)) { $startcallback($component, true, $verbose); $recover_install_function(); unset_config('installrunning', $plugin->fullname); update_capabilities($component); log_update_descriptions($component); external_update_descriptions($component); events_update_definition($component); message_update_providers($component); if ($type === 'message') { message_update_processors($plug); } vmoodle_upgrade_plugin_mnet_functions($component, $fullplug); // Fix wrongly twicked paths. if ($rpc_shifted_defines = $DB->get_records_select('mnet_rpc', " xmlrpcpath LIKE 'vmoodleadminset' ", array())) { foreach ($rpc_shifted_defines as $rpc) { $rpc->xmlrpcpath = str_replace('vmoocleadminset', 'local/vmoodle/plugins'); $DB->update_record('mnet_rpc', $rpc); } } $endcallback($component, true, $verbose); } } } $installedversion = get_config($plugin->fullname, 'version'); if (empty($installedversion)) { // New installation. $startcallback($component, true, $verbose); // Install tables if defined. if (file_exists($fullplug . '/db/install.xml')) { $DB->get_manager()->install_from_xmldb_file($fullplug . '/db/install.xml'); } // Store version. upgrade_plugin_savepoint(true, $plugin->version, $type, $plug, false); // Execute post install file. if (file_exists($fullplug . '/db/install.php')) { require_once $fullplug . '/db/install.php'; set_config('installrunning', 1, $plugin->fullname); $post_install_function = 'xmldb_' . $plugin->fullname . '_install'; $post_install_function(); unset_config('installrunning', $plugin->fullname); } // Install various components. update_capabilities($component); log_update_descriptions($component); external_update_descriptions($component); events_update_definition($component); message_update_providers($component); if ($type === 'message') { message_update_processors($plug); } vmoodle_upgrade_plugin_mnet_functions($component, $fullplug); // Fix wrongly twicked paths. if ($rpc_shifted_defines = $DB->get_records_select('mnet_rpc', " xmlrpcpath LIKE 'vmoodleadminset' ", array())) { foreach ($rpc_shifted_defines as $rpc) { $rpc->xmlrpcpath = str_replace('vmoocleadminset', 'local/vmoodle/plugins'); $DB->update_record('mnet_rpc', $rpc); } } purge_all_caches(); $endcallback($component, true, $verbose); } else { if ($installedversion < $plugin->version) { // Upgrade // Run the upgrade function for the plugin. $startcallback($component, false, $verbose); if (is_readable($fullplug . '/db/upgrade.php')) { require_once $fullplug . '/db/upgrade.php'; // Defines upgrading function $newupgrade_function = 'xmldb_' . $plugin->fullname . '_upgrade'; $result = $newupgrade_function($installedversion); } else { $result = true; } $installedversion = get_config($plugin->fullname, 'version'); if ($installedversion < $plugin->version) { // store version if not already there. upgrade_plugin_savepoint($result, $plugin->version, $type, $plug, false); } // Upgrade various components. update_capabilities($component); log_update_descriptions($component); external_update_descriptions($component); events_update_definition($component); message_update_providers($component); if ($type === 'message') { message_update_processors($plug); } vmoodle_upgrade_plugin_mnet_functions($component, $fullplug); purge_all_caches(); $endcallback($component, false, $verbose); } else { if ($installedversion > $plugin->version) { throw new downgrade_exception($component, $installedversion, $plugin->version); } } } } } }
/** * This function checks to see whether local database customisations are up-to-date * by comparing $CFG->local_version to the variable $local_version defined in * local/version.php. If not, it looks for a function called 'xmldb_local_upgrade' * in a file called 'local/db/upgrade.php', and if it's there calls it with the * appropiate $oldversion parameter. Then it updates $CFG->local_version. * * @uses $CFG */ function upgrade_local_db($startcallback, $endcallback) { global $CFG, $DB; // if we don't have code version, just return false if (!file_exists($CFG->dirroot . '/local/version.php')) { return; } $local_version = null; require $CFG->dirroot . '/local/version.php'; // Get code versions if (empty($CFG->local_version)) { // install $startcallback('local', true); if (file_exists($CFG->dirroot . '/local/db/install.php')) { require_once $CFG->dirroot . '/local/db/install.php'; xmldb_local_install(); } set_config('local_version', $local_version); /// Install various components events_update_definition('local'); update_capabilities('local'); message_update_providers('local'); $endcallback('local', true); } else { if ($local_version > $CFG->local_version) { // upgrade! $startcallback('local', false); if (file_exists($CFG->dirroot . '/local/db/upgrade.php')) { require_once $CFG->dirroot . '/local/db/upgrade.php'; xmldb_local_upgrade($CFG->local_version); } set_config('local_version', $local_version); /// Upgrade various components events_update_definition('local'); update_capabilities('local'); message_update_providers('local'); $endcallback('local', false); } else { if ($local_version < $CFG->local_version) { throw new downgrade_exception('local', $CFG->local_version, $local_version); } } } }
/** * Upgrade moodle core * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function upgrade_core($version, $verbose) { global $CFG; raise_memory_limit(MEMORY_EXTRA); require_once $CFG->libdir . '/db/upgrade.php'; // Defines upgrades try { // Reset caches before any output. cache_helper::purge_all(true); purge_all_caches(); // Upgrade current language pack if we can upgrade_language_pack(); print_upgrade_part_start('moodle', false, $verbose); // Pre-upgrade scripts for local hack workarounds. $preupgradefile = "{$CFG->dirroot}/local/preupgrade.php"; if (file_exists($preupgradefile)) { core_php_time_limit::raise(); require $preupgradefile; // Reset upgrade timeout to default. upgrade_set_timeout(); } $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // perform all other component upgrade routines update_capabilities('moodle'); log_update_descriptions('moodle'); external_update_descriptions('moodle'); events_update_definition('moodle'); message_update_providers('moodle'); // Update core definitions. cache_helper::update_definitions(true); // Purge caches again, just to be sure we arn't holding onto old stuff now. cache_helper::purge_all(true); purge_all_caches(); // Clean up contexts - more and more stuff depends on existence of paths and contexts context_helper::cleanup_instances(); context_helper::create_instances(null, false); context_helper::build_all_paths(false); $syscontext = context_system::instance(); $syscontext->mark_dirty(); print_upgrade_part_end('moodle', false, $verbose); } catch (Exception $ex) { upgrade_handle_exception($ex); } }
/** * Upgrade moodle core * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function upgrade_core($version, $verbose) { global $CFG; raise_memory_limit(MEMORY_EXTRA); require_once $CFG->libdir . '/db/upgrade.php'; // Defines upgrades try { // Reset caches before any output purge_all_caches(); // Disable the use of cache stores here. We will reset the factory after we've performed the installation. // This ensures that we don't permanently cache anything during installation. cache_factory::disable_stores(); // Upgrade current language pack if we can upgrade_language_pack(); print_upgrade_part_start('moodle', false, $verbose); // one time special local migration pre 2.0 upgrade script if ($CFG->version < 2007101600) { $pre20upgradefile = "{$CFG->dirroot}/local/upgrade_pre20.php"; if (file_exists($pre20upgradefile)) { set_time_limit(0); require $pre20upgradefile; // reset upgrade timeout to default upgrade_set_timeout(); } } $result = xmldb_main_upgrade($CFG->version); if ($version > $CFG->version) { // store version if not already there upgrade_main_savepoint($result, $version, false); } // perform all other component upgrade routines update_capabilities('moodle'); log_update_descriptions('moodle'); external_update_descriptions('moodle'); events_update_definition('moodle'); message_update_providers('moodle'); // Update core definitions. cache_helper::update_definitions(true); // Reset the cache, this returns it to a normal operation state. cache_factory::reset(); // Purge caches again, just to be sure we arn't holding onto old stuff now. purge_all_caches(); // Clean up contexts - more and more stuff depends on existence of paths and contexts context_helper::cleanup_instances(); context_helper::create_instances(null, false); context_helper::build_all_paths(false); $syscontext = context_system::instance(); $syscontext->mark_dirty(); print_upgrade_part_end('moodle', false, $verbose); } catch (Exception $ex) { upgrade_handle_exception($ex); } }