diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2008-11-03 05:55:57 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2008-11-03 05:55:57 +0000 |
commit | d0f8f90a364fb1ab6253e9e2cfa42ecd57cc6c3b (patch) | |
tree | ff72a2b6b625de24c862c63aaab7c143e9a4120d | |
parent | 0f956d42022bf6fd1e830b9bcb3fad6fa493a426 (diff) | |
download | brdo-d0f8f90a364fb1ab6253e9e2cfa42ecd57cc6c3b.tar.gz brdo-d0f8f90a364fb1ab6253e9e2cfa42ecd57cc6c3b.tar.bz2 |
#303889 by David_Rothstein, kbahey, and chx: Make it possible to update D6 -> D7.
-rw-r--r-- | includes/database/database.inc | 26 | ||||
-rw-r--r-- | includes/database/pgsql/database.inc | 5 | ||||
-rw-r--r-- | includes/theme.inc | 6 | ||||
-rw-r--r-- | modules/node/node.module | 5 | ||||
-rw-r--r-- | modules/system/system.install | 9 | ||||
-rw-r--r-- | update.php | 38 |
6 files changed, 59 insertions, 30 deletions
diff --git a/includes/database/database.inc b/includes/database/database.inc index 31d98b4b3..bb5338631 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -414,9 +414,7 @@ abstract class DatabaseConnection extends PDO { } } catch (PDOException $e) { - if (!function_exists('module_implements')) { - _db_need_install(); - } + _db_check_install_needed(); if ($options['throw_exception']) { if ($query instanceof DatabaseStatement) { $query_string = $stmt->queryString; @@ -892,11 +890,9 @@ abstract class Database { final protected static function parseConnectionInfo() { global $databases; - if (empty($databases)) { - _db_need_install(); - } - $databaseInfo = $databases; + _db_check_install_needed(); + $databaseInfo = $databases; foreach ($databaseInfo as $index => $info) { foreach ($databaseInfo[$index] as $target => $value) { // If there is no "driver" property, then we assume it's an array of @@ -1016,7 +1012,7 @@ abstract class Database { // It is extremely rare that an exception will be generated here other // than when installing. We therefore intercept it and try the installer, // passing on the exception otherwise. - _db_need_install(); + _db_check_install_needed(); throw $e; } } @@ -1851,7 +1847,7 @@ function db_field_set_no_default(&$ret, $table, $field) { * Fields for the primary key. */ function db_add_primary_key(&$ret, $table, $fields) { - return Database::getActiveConnection()->schema()->addPrimaryKey($ret, $table, $field); + return Database::getActiveConnection()->schema()->addPrimaryKey($ret, $table, $fields); } /** @@ -1923,7 +1919,7 @@ function db_add_index(&$ret, $table, $name, $fields) { * The name of the index. */ function db_drop_index(&$ret, $table, $name) { - return Database::getActiveConnection()->schema()->addIndex($ret, $table, $name); + return Database::getActiveConnection()->schema()->dropIndex($ret, $table, $name); } /** @@ -2032,8 +2028,14 @@ function db_result(DatabaseStatement $statement) { return $statement->fetchField(); } -function _db_need_install() { - if (!function_exists('install_goto')) { +/** + * Redirect the user to the installation script if Drupal has not been + * installed yet (i.e., if no $databases array has been defined in the + * settings file) and we are not already there. Otherwise, do nothing. + */ +function _db_check_install_needed() { + global $databases; + if (empty($databases) && !function_exists('install_main')) { include_once DRUPAL_ROOT . '/includes/install.inc'; install_goto('install.php'); } diff --git a/includes/database/pgsql/database.inc b/includes/database/pgsql/database.inc index 25cec5528..793e97c74 100644 --- a/includes/database/pgsql/database.inc +++ b/includes/database/pgsql/database.inc @@ -61,10 +61,7 @@ class DatabaseConnection_pgsql extends DatabaseConnection { } } catch (PDOException $e) { - if (!function_exists('module_implements')) { - _db_need_install(); - } - //watchdog('database', var_export($e, TRUE) . $e->getMessage(), NULL, WATCHDOG_ERROR); + _db_check_install_needed(); if ($options['throw_exception']) { if ($query instanceof DatabaseStatement) { $query_string = $stmt->queryString; diff --git a/includes/theme.inc b/includes/theme.inc index 5a5c4d3fa..29d9aa5e0 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -898,7 +898,7 @@ function theme_get_settings($key = NULL) { 'toggle_logo' => 1, 'toggle_favicon' => 1, 'toggle_name' => 1, - 'toggle_search' => 1, + 'toggle_search' => 0, 'toggle_slogan' => 0, 'toggle_mission' => 1, 'toggle_node_user_picture' => 0, @@ -919,8 +919,8 @@ function theme_get_settings($key = NULL) { } // Only offer search box if search.module is enabled. - if (!module_exists('search') || !user_access('search content')) { - $settings['toggle_search'] = 0; + if (!defined('MAINTENANCE_MODE') && module_exists('search') && user_access('search content')) { + $settings['toggle_search'] = 1; } return $settings; diff --git a/modules/node/node.module b/modules/node/node.module index 473eb857d..eed4cf34a 100644 --- a/modules/node/node.module +++ b/modules/node/node.module @@ -594,8 +594,9 @@ function _node_types_build() { while ($type_object = db_fetch_object($type_result)) { // Check for node types from disabled modules and mark their types for removal. // Types defined by the node module in the database (rather than by a separate - // module using hook_node_info) have a base value of 'node_content'. - if ($type_object->base != 'node_content' && empty($info_array[$type_object->type])) { + // module using hook_node_info) have a base value of 'node_content'. The isset() + // check prevents errors on old (pre-Drupal 7) databases. + if (isset($type_object->base) && $type_object->base != 'node_content' && empty($info_array[$type_object->type])) { $type_object->disabled = TRUE; } if (!isset($_node_types[$type_object->type]) || $type_object->modified) { diff --git a/modules/system/system.install b/modules/system/system.install index a1c353aa9..af0140121 100644 --- a/modules/system/system.install +++ b/modules/system/system.install @@ -2955,7 +2955,7 @@ function system_update_7006() { 'type' => array('type' => 'varchar', 'length' => 9, 'not null' => TRUE, 'default' => ''), 'filename' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''), 'module' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''), - 'suffix' => array('type' => 'varchar', 'length' => 69, 'not null' => TRUE, 'default' => ''), + 'suffix' => array('type' => 'varchar', 'length' => 68, 'not null' => TRUE, 'default' => ''), 'weight' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), ), 'primary key' => array('name', 'type'), @@ -3071,8 +3071,8 @@ function system_update_7009() { */ function system_update_7010() { $ret = array(); - db_change_field($ret, 'menu_router', 'load_functions', 'load_functions', array('type' => 'text', 'not null' => TRUE, 'default' => '')); - db_change_field($ret, 'menu_router', 'to_arg_functions', 'to_arg_functions', array('type' => 'text', 'not null' => TRUE, 'default' => '',)); + db_change_field($ret, 'menu_router', 'load_functions', 'load_functions', array('type' => 'text', 'not null' => TRUE)); + db_change_field($ret, 'menu_router', 'to_arg_functions', 'to_arg_functions', array('type' => 'text', 'not null' => TRUE)); return $ret; } @@ -3107,10 +3107,11 @@ function system_update_7012() { $ret = array(); db_drop_unique_key($ret, 'search_dataset', 'sid_type'); db_add_primary_key($ret, 'search_dataset', array('sid', 'type')); - + db_drop_index($ret, 'search_index', 'word'); db_drop_unique_key($ret, 'search_index', 'word_sid_type'); db_add_primary_key($ret, 'search_index', array('word', 'sid', 'type')); + return $ret; } diff --git a/update.php b/update.php index 0a0dc2f35..d5917d3b3 100644 --- a/update.php +++ b/update.php @@ -330,7 +330,7 @@ function update_finished($success, $results, $operations) { $_SESSION['update_results'] = $results; $_SESSION['update_success'] = $success; $_SESSION['updates_remaining'] = $operations; - + // Now that the update is done, we can disable site maintenance if it was // previously turned off. if (isset($_SESSION['site_offline']) && $_SESSION['site_offline'] == FALSE) { @@ -574,6 +574,37 @@ function update_fix_d6_requirements() { } /** + * Users who still have a Drupal 6 database (and are in the process of + * updating to Drupal 7) need extra help before a full bootstrap can be + * achieved. This function does the necessary preliminary work that allows + * the bootstrap to be successful. + * + * No access check has been performed when this function is called, so no + * changes to the database should be made here. + */ +function update_prepare_d7_bootstrap() { + // Allow the database system to work even though the registry has not + // been created yet. + drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE); + include_once DRUPAL_ROOT . '/includes/install.inc'; + drupal_install_init_database(); + spl_autoload_unregister('drupal_autoload_class'); + spl_autoload_unregister('drupal_autoload_interface'); + // The new {blocked_ips} table is used in Drupal 7 to store a list of + // banned IP addresses. If this table doesn't exist then we are still + // running on a Drupal 6 database, so suppress the unavoidable errors + // that occur. + try { + drupal_bootstrap(DRUPAL_BOOTSTRAP_ACCESS); + } + catch (Exception $e) { + if (db_table_exists('blocked_ips')) { + throw $e; + } + } +} + +/** * Add the update task list to the current page. */ function update_task_list($active = NULL) { @@ -655,13 +686,10 @@ if (empty($op)) { install_goto('update.php?op=info'); } +update_prepare_d7_bootstrap(); drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); drupal_maintenance_theme(); -// This must happen *after* drupal_bootstrap(), since it calls -// variable_(get|set), which only works after a full bootstrap. -update_create_batch_table(); - // Turn error reporting back on. From now on, only fatal errors (which are // not passed through the error handler) will cause a message to be printed. ini_set('display_errors', TRUE); |