MDL-20015 a way to recover from problems in db/install.php

This commit is contained in:
skodak
2009-08-06 19:59:16 +00:00
parent 45440ceb61
commit 9b683d130a
+68 -9
View File
@@ -322,8 +322,24 @@ function upgrade_plugins($type, $startcallback, $endcallback, $verbose) {
}
}
$installedversion = get_config($plugin->fullname, 'version');
// 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', 'block_'.$plugin->fullname);
update_capabilities($component);
events_update_definition($component);
message_update_providers($component);
$endcallback($component, true, $verbose);
}
}
}
$installedversion = get_config($plugin->fullname, 'version');
if (empty($installedversion)) { // new installation
$startcallback($component, true, $verbose);
@@ -331,16 +347,19 @@ function upgrade_plugins($type, $startcallback, $endcallback, $verbose) {
if (file_exists($fullplug.'/db/install.xml')) {
$DB->get_manager()->install_from_xmldb_file($fullplug.'/db/install.xml');
}
/// execute post install file
if (file_exists($fullplug.'/db/install.php')) {
require_once($fullplug.'/db/install.php');
$post_install_function = 'xmldb_'.$plugin->fullname.'_install';;
$post_install_function();
}
/// 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, 'block_'.$plugin->fullname);
$post_install_function = 'xmldb_'.$plugin->fullname.'_install';;
$post_install_function();
unset_config('installrunning', 'block_'.$plugin->fullname);
}
/// Install various components
update_capabilities($component);
events_update_definition($component);
@@ -425,6 +444,23 @@ function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
$currmodule = $DB->get_record('modules', array('name'=>$module->name));
if (file_exists($fullmod.'/db/install.php')) {
if (get_config($module->name, 'installrunning')) {
require_once($fullmod.'/db/install.php');
$recover_install_function = 'xmldb_'.$module->name.'_install_recovery';
if (function_exists($recover_install_function)) {
$startcallback($component, true, $verbose);
$recover_install_function();
unset_config('installrunning', $module->name);
// Install various components too
update_capabilities($component);
events_update_definition($component);
message_update_providers($component);
$endcallback($component, true, $verbose);
}
}
}
if (empty($currmodule->version)) {
$startcallback($component, true, $verbose);
@@ -437,8 +473,11 @@ function upgrade_plugins_modules($startcallback, $endcallback, $verbose) {
/// Post installation hook - optional
if (file_exists("$fullmod/db/install.php")) {
require_once("$fullmod/db/install.php");
// Set installation running flag, we need to recover after exception or error
set_config('installrunning', 1, $module->name);
$post_install_function = 'xmldb_'.$module->name.'_install';;
$post_install_function();
unset_config('installrunning', $module->name);
}
/// Install various components
@@ -544,6 +583,23 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
$currblock = $DB->get_record('block', array('name'=>$block->name));
if (file_exists($fullblock.'/db/install.php')) {
if (get_config('block_'.$blockname, 'installrunning')) {
require_once($fullblock.'/db/install.php');
$recover_install_function = 'xmldb_block_'.$blockname.'_install_recovery';
if (function_exists($recover_install_function)) {
$startcallback($component, true, $verbose);
$recover_install_function();
unset_config('installrunning', 'block_'.$blockname);
// Install various components
update_capabilities($component);
events_update_definition($component);
message_update_providers($component);
$endcallback($component, true, $verbose);
}
}
}
if (empty($currblock->version)) { // block not installed yet, so install it
// If it allows multiples, start with it enabled
@@ -562,8 +618,11 @@ function upgrade_plugins_blocks($startcallback, $endcallback, $verbose) {
if (file_exists($fullblock.'/db/install.php')) {
require_once($fullblock.'/db/install.php');
// Set installation running flag, we need to recover after exception or error
set_config('installrunning', 1, 'block_'.$blockname);
$post_install_function = 'xmldb_block_'.$blockname.'_install';;
$post_install_function();
unset_config('installrunning', 'block_'.$blockname);
}
$blocktitles[$block->name] = $blocktitle;
@@ -1044,7 +1103,7 @@ function core_tables_exist() {
if (!$tables = $DB->get_tables() ) { // No tables yet at all.
return false;
} else { // Check for missing main tables
$mtables = array('config', 'course', 'groupings'); // some tables used in 1.9 and 2.0, preferable something from the start and end of install.xml
foreach ($mtables as $mtable) {
@@ -1053,5 +1112,5 @@ function core_tables_exist() {
}
}
return true;
}
}
}