summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2009-03-01 09:32:17 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2009-03-01 09:32:17 +0000
commit27369e8b96226dc92496a04560ab4561be5a10d3 (patch)
tree523cf3dedf2ec1bdc7aedd1e6d77fa068308a2b0
parent7cc7e080a097169f8578e4680c535ea6e06ab151 (diff)
downloadbrdo-27369e8b96226dc92496a04560ab4561be5a10d3.tar.gz
brdo-27369e8b96226dc92496a04560ab4561be5a10d3.tar.bz2
#304163 by chx: Allow update.php to re-generate settings.php. Now possible to upgrade Drupal 6 to Drupal 7. Oh, yeah.
-rw-r--r--includes/bootstrap.inc4
-rw-r--r--includes/install.inc58
-rw-r--r--install.php58
-rw-r--r--modules/system/system.install11
-rw-r--r--update.php44
5 files changed, 111 insertions, 64 deletions
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index c9cd71486..a73a969b4 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -457,7 +457,7 @@ function conf_init() {
global $base_url, $base_path, $base_root;
// Export the following settings.php variables to the global namespace
- global $databases, $db_prefix, $cookie_domain, $conf, $installed_profile, $update_free_access;
+ global $databases, $db_prefix, $cookie_domain, $conf, $installed_profile, $update_free_access, $db_url;
$conf = array();
if (file_exists(DRUPAL_ROOT . '/' . conf_path() . '/settings.php')) {
@@ -979,7 +979,7 @@ function watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NO
*/
function drupal_set_message($message = NULL, $type = 'status', $repeat = TRUE) {
if ($message) {
- if (!isset($_SESSION['messages'])) {
+ if (!isset($_SESSION['messages']) && function_exists('drupal_set_session')) {
drupal_set_session('messages', array());
}
diff --git a/includes/install.inc b/includes/install.inc
index 125989679..6eaf8db2c 100644
--- a/includes/install.inc
+++ b/includes/install.inc
@@ -994,3 +994,61 @@ function drupal_check_module($module) {
}
return TRUE;
}
+
+/**
+ * Check installation requirements and report any errors.
+ */
+function install_check_requirements($profile, $verify) {
+ // Check the profile requirements.
+ $requirements = $profile ? drupal_check_profile($profile) : array();
+
+ // If Drupal is not set up already, we need to create a settings file.
+ if (!$verify) {
+ $writable = FALSE;
+ $conf_path = './' . conf_path(FALSE, TRUE);
+ $settings_file = $conf_path . '/settings.php';
+ $file = $conf_path;
+ $exists = FALSE;
+ // Verify that the directory exists.
+ if (drupal_verify_install_file($conf_path, FILE_EXIST, 'dir')) {
+ // Check to make sure a settings.php already exists.
+ $file = $settings_file;
+ if (drupal_verify_install_file($settings_file, FILE_EXIST)) {
+ $exists = TRUE;
+ // If it does, make sure it is writable.
+ $writable = drupal_verify_install_file($settings_file, FILE_READABLE|FILE_WRITABLE);
+ $exists = TRUE;
+ }
+ }
+
+ if (!$exists) {
+ $requirements['settings file exists'] = array(
+ 'title' => st('Settings file'),
+ 'value' => st('The settings file does not exist.'),
+ 'severity' => REQUIREMENT_ERROR,
+ 'description' => st('The @drupal installer requires that you create a settings file as part of the installation process. Copy the %default_file file to %file. More details about installing Drupal are available in <a href="@install_txt">INSTALL.txt</a>.', array('@drupal' => drupal_install_profile_name(), '%file' => $file, '%default_file' => $conf_path .'/default.settings.php', '@install_txt' => base_path() .'INSTALL.txt')),
+ );
+ }
+ else {
+ $requirements['settings file exists'] = array(
+ 'title' => st('Settings file'),
+ 'value' => st('The %file file exists.', array('%file' => $file)),
+ );
+ if (!$writable) {
+ $requirements['settings file writable'] = array(
+ 'title' => st('Settings file'),
+ 'value' => st('The settings file is not writable.'),
+ 'severity' => REQUIREMENT_ERROR,
+ 'description' => st('The @drupal installer requires write permissions to %file during the installation process. If you are unsure how to grant file permissions, please consult the <a href="@handbook_url">online handbook</a>.', array('@drupal' => drupal_install_profile_name(), '%file' => $file, '@handbook_url' => 'http://drupal.org/server-permissions')),
+ );
+ }
+ else {
+ $requirements['settings file'] = array(
+ 'title' => st('Settings file'),
+ 'value' => st('Settings file is writable.'),
+ );
+ }
+ }
+ }
+ return $requirements;
+}
diff --git a/install.php b/install.php
index ec3bcf507..17b02e119 100644
--- a/install.php
+++ b/install.php
@@ -891,64 +891,6 @@ function install_reserved_tasks() {
}
/**
- * Check installation requirements and report any errors.
- */
-function install_check_requirements($profile, $verify) {
- // Check the profile requirements.
- $requirements = drupal_check_profile($profile);
-
- // If Drupal is not set up already, we need to create a settings file.
- if (!$verify) {
- $writable = FALSE;
- $conf_path = './' . conf_path(FALSE, TRUE);
- $settings_file = $conf_path . '/settings.php';
- $file = $conf_path;
- $exists = FALSE;
- // Verify that the directory exists.
- if (drupal_verify_install_file($conf_path, FILE_EXIST, 'dir')) {
- // Check to make sure a settings.php already exists.
- $file = $settings_file;
- if (drupal_verify_install_file($settings_file, FILE_EXIST)) {
- $exists = TRUE;
- // If it does, make sure it is writable.
- $writable = drupal_verify_install_file($settings_file, FILE_READABLE|FILE_WRITABLE);
- $exists = TRUE;
- }
- }
-
- if (!$exists) {
- $requirements['settings file exists'] = array(
- 'title' => st('Settings file'),
- 'value' => st('The settings file does not exist.'),
- 'severity' => REQUIREMENT_ERROR,
- 'description' => st('The @drupal installer requires that you create a settings file as part of the installation process. Copy the %default_file file to %file. More details about installing Drupal are available in <a href="@install_txt">INSTALL.txt</a>.', array('@drupal' => drupal_install_profile_name(), '%file' => $file, '%default_file' => $conf_path .'/default.settings.php', '@install_txt' => base_path() .'INSTALL.txt')),
- );
- }
- else {
- $requirements['settings file exists'] = array(
- 'title' => st('Settings file'),
- 'value' => st('The %file file exists.', array('%file' => $file)),
- );
- if (!$writable) {
- $requirements['settings file writable'] = array(
- 'title' => st('Settings file'),
- 'value' => st('The settings file is not writable.'),
- 'severity' => REQUIREMENT_ERROR,
- 'description' => st('The @drupal installer requires write permissions to %file during the installation process. If you are unsure how to grant file permissions, please consult the <a href="@handbook_url">online handbook</a>.', array('@drupal' => drupal_install_profile_name(), '%file' => $file, '@handbook_url' => 'http://drupal.org/server-permissions')),
- );
- }
- else {
- $requirements['settings file'] = array(
- 'title' => st('Settings file'),
- 'value' => st('Settings file is writable.'),
- );
- }
- }
- }
- return $requirements;
-}
-
-/**
* Add the installation task list to the current page.
*/
function install_task_list($active = NULL) {
diff --git a/modules/system/system.install b/modules/system/system.install
index 460836948..faef5d4ad 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -3226,6 +3226,17 @@ function system_update_7019() {
}
/**
+ * Enable field module.
+ */
+function system_update_7020() {
+ $ret = array();
+ $module_list = array('field_sql_storage', 'field');
+ drupal_install_modules($module_list);
+ module_enable($module_list);
+ return $ret;
+}
+
+/**
* @} End of "defgroup updates-6.x-to-7.x"
* The next series of updates should start at 8000.
*/
diff --git a/update.php b/update.php
index 5181b5b46..c8668fdfc 100644
--- a/update.php
+++ b/update.php
@@ -625,8 +625,18 @@ function update_task_list($active = NULL) {
* Check update requirements and report any errors.
*/
function update_check_requirements() {
+ global $db_url, $databases;
+ $requirements = array();
+
+ // If we will rewrite the settings.php then we need to make sure it is
+ // writeable.
+ if (empty($databases) && !empty($db_url) && is_string($db_url)) {
+ $requirements = install_check_requirements('', FALSE);
+ }
+ $warnings = FALSE;
+
// Check the system module requirements only.
- $requirements = module_invoke('system', 'requirements', 'update');
+ $requirements += module_invoke('system', 'requirements', 'update');
$severity = drupal_requirements_severity($requirements);
// If there are issues, report them.
@@ -637,10 +647,34 @@ function update_check_requirements() {
if (isset($requirement['value']) && $requirement['value']) {
$message .= ' (Currently using ' . $requirement['title'] . ' ' . $requirement['value'] . ')';
}
+ $warnings = TRUE;
drupal_set_message($message, 'warning');
}
}
}
+ return $warnings;
+}
+
+/**
+ * Converts Drupal 6 $db_url to Drupal 7 $databases array.
+ */
+function update_check_d7_settings() {
+ global $db_url, $databases;
+
+ if (empty($databases) && !empty($db_url) && is_string($db_url)) {
+ $url = parse_url($db_url);
+ $driver = substr($db_url, 0, strpos($db_url, '://'));
+ if ($driver == 'mysqli') {
+ $driver = 'mysql';
+ }
+ $databases['default']['default']['driver'] = $driver;
+ $databases['default']['default']['database'] = substr($url['path'], 1);
+ foreach (array('user' => 'username', 'pass' => 'password', 'host' => 'host', 'port' => 'port') as $old_key => $new_key) {
+ $databases['default']['default'][$new_key] = isset($url[$old_key]) ? urldecode($url[$old_key]) : '';
+ }
+ $conf_path = conf_path();
+ file_put_contents($conf_path .'/settings.php', "\n" . '$databases = '. var_export($databases, TRUE) . ';', FILE_APPEND);
+ }
}
// Some unavoidable errors happen because the database is not yet up-to-date.
@@ -675,16 +709,18 @@ if (empty($op)) {
drupal_maintenance_theme();
// Check the update requirements for Drupal.
- update_check_requirements();
+ $warnings = update_check_requirements();
// Display the warning messages (if any) in a dedicated maintenance page,
// or redirect to the update information page if no message.
- $messages = drupal_set_message();
- if (!empty($messages['warning'])) {
+ if ($warnings) {
drupal_maintenance_theme();
print theme('update_page', '<form method="post" action="update.php?op=info"><input type="submit" value="Continue" /></form>', FALSE);
exit;
}
+ // Write D7 settings file.
+ update_check_d7_settings();
+
install_goto('update.php?op=info');
}