diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 9b3d7a0..2af108e 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -1103,18 +1103,41 @@ function install_settings_form($form, &$form_state, &$install_state) { $conf_path = './' . conf_path(FALSE); $settings_file = $conf_path . '/settings.php'; - $database = isset($databases['default']['default']) ? $databases['default']['default'] : array(); drupal_set_title(t('Database configuration')); $drivers = drupal_get_database_types(); $drivers_keys = array_keys($drivers); + // If database connection settings have been prepared in settings.php already, + // then the existing values need to be taken over. + // Note: The installer even executes this form if there is a valid database + // connection already, since the submit handler of this form is responsible + // for writing all $settings to settings.php (not limited to $databases). + if (isset($databases['default']['default'])) { + $default_driver = $databases['default']['default']['driver']; + $default_options = $databases['default']['default']; + } + // Otherwise, use the database connection settings from the form input. + // For a non-interactive installation, this is derived from the original + // $settings array passed into install_drupal(). + elseif (isset($form_state['input']['driver'])) { + $default_driver = $form_state['input']['driver']; + $default_options = $form_state['input'][$default_driver]; + } + // If there is no database information at all yet, just suggest the first + // available driver as default value, so that its settings form is made + // visible via #states when JavaScript is enabled (see below). + else { + $default_driver = current($drivers_keys); + $default_options = array(); + } + $form['driver'] = array( '#type' => 'radios', '#title' => t('Database type'), '#required' => TRUE, - '#default_value' => !empty($database['driver']) ? $database['driver'] : current($drivers_keys), + '#default_value' => $default_driver, ); if (count($drivers) == 1) { $form['driver']['#disabled'] = TRUE; @@ -1124,7 +1147,7 @@ function install_settings_form($form, &$form_state, &$install_state) { foreach ($drivers as $key => $driver) { $form['driver']['#options'][$key] = $driver->name(); - $form['settings'][$key] = $driver->getFormOptions($database); + $form['settings'][$key] = $driver->getFormOptions($default_options); $form['settings'][$key]['#prefix'] = '

' . t('@driver_name settings', array('@driver_name' => $driver->name())) . '

'; $form['settings'][$key]['#type'] = 'container'; $form['settings'][$key]['#tree'] = TRUE; @@ -1143,7 +1166,7 @@ function install_settings_form($form, &$form_state, &$install_state) { '#button_type' => 'primary', '#limit_validation_errors' => array( array('driver'), - array(isset($form_state['input']['driver']) ? $form_state['input']['driver'] : current($drivers_keys)), + array($default_driver), ), '#submit' => array('install_settings_form_submit'), );