summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2008-11-03 05:55:57 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2008-11-03 05:55:57 +0000
commitd0f8f90a364fb1ab6253e9e2cfa42ecd57cc6c3b (patch)
treeff72a2b6b625de24c862c63aaab7c143e9a4120d
parent0f956d42022bf6fd1e830b9bcb3fad6fa493a426 (diff)
downloadbrdo-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.inc26
-rw-r--r--includes/database/pgsql/database.inc5
-rw-r--r--includes/theme.inc6
-rw-r--r--modules/node/node.module5
-rw-r--r--modules/system/system.install9
-rw-r--r--update.php38
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);