diff --git a/includes/install.inc b/includes/install.inc index 962f14ed212897fdd0dfcb64600c76771c1c7f03..59437c909ab89b06d842462c24f9e1ca66de7d3b 100644 --- a/includes/install.inc +++ b/includes/install.inc @@ -208,6 +208,11 @@ function drupal_detect_baseurl($file = 'install.php') { function drupal_detect_database_types() { $databases = array(); + // Initialize the database system if it has not been + // initialized yet. We do not initialize it earlier to make + // requirements check during the installation. + require_once DRUPAL_ROOT . '/includes/database/database.inc'; + // We define a driver as a directory in /includes/database that in turn // contains a database.inc file. That allows us to drop in additional drivers // without modifying the installer. diff --git a/includes/theme.inc b/includes/theme.inc index cb4ca3417c248e02599a59e1d9896009e1a59280..328c707d3492ae772eb5a12616ed220c83e54117 100644 --- a/includes/theme.inc +++ b/includes/theme.inc @@ -571,7 +571,7 @@ function list_themes($refresh = FALSE) { $themes = array(); // Extract from the database only when it is available. // Also check that the site is not in the middle of an install or update. - if (db_is_active() && !defined('MAINTENANCE_MODE')) { + if (!defined('MAINTENANCE_MODE') && db_is_active()) { foreach (system_list('theme') as $theme) { if (file_exists($theme->filename)) { $theme->info = unserialize($theme->info); @@ -2266,7 +2266,7 @@ function template_preprocess(&$variables, $hook) { $variables['is_admin'] = FALSE; $variables['is_front'] = FALSE; $variables['logged_in'] = FALSE; - if ($variables['db_is_active'] = db_is_active() && !defined('MAINTENANCE_MODE')) { + if ($variables['db_is_active'] = !defined('MAINTENANCE_MODE') && db_is_active()) { // Check for administrators. if (user_access('access administration pages')) { $variables['is_admin'] = TRUE; diff --git a/includes/theme.maintenance.inc b/includes/theme.maintenance.inc index daccdb13d326640cf36b6a81b45321d0fb501672..14d543f2960f68fa860584018b98fbbb7e3345fa 100644 --- a/includes/theme.maintenance.inc +++ b/includes/theme.maintenance.inc @@ -28,7 +28,6 @@ function _drupal_maintenance_theme() { require_once DRUPAL_ROOT . '/includes/unicode.inc'; require_once DRUPAL_ROOT . '/includes/file.inc'; require_once DRUPAL_ROOT . '/includes/module.inc'; - require_once DRUPAL_ROOT . '/includes/database/database.inc'; unicode_check(); // Install and update pages are treated differently to prevent theming overrides. @@ -39,6 +38,7 @@ function _drupal_maintenance_theme() { if (!db_is_active()) { // Because we are operating in a crippled environment, we need to // bootstrap just enough to allow hook invocations to work. + require_once DRUPAL_ROOT . '/includes/database/database.inc'; $module_list['system']['filename'] = 'modules/system/system.module'; module_list(TRUE, FALSE, FALSE, $module_list); drupal_load('module', 'system'); diff --git a/install.php b/install.php index 9ccb90d23d7fa596ebdc0099cb93acda0fed5a5f..594d1db195187ddb5417743331b916ca2b6f482f 100644 --- a/install.php +++ b/install.php @@ -791,7 +791,7 @@ function install_verify_settings() { global $db_prefix, $databases; // Verify existing settings (if any). - if (!empty($databases)) { + if (!empty($databases) && install_verify_pdo()) { $database = $databases['default']['default']; drupal_static_reset('conf_path'); $settings_file = './' . conf_path(FALSE) . '/settings.php'; @@ -803,6 +803,13 @@ function install_verify_settings() { return FALSE; } +/** + * Verify PDO library. + */ +function install_verify_pdo() { + return extension_loaded('pdo'); +} + /** * Installation task; define a form to configure and rewrite settings.php. * diff --git a/modules/system/system.install b/modules/system/system.install index 47ee14415ac2fd881e160eb770b5b8185f4a4655..9b155b702a6d775c5e23ffd9a5ab8c155ecb2521 100644 --- a/modules/system/system.install +++ b/modules/system/system.install @@ -94,6 +94,19 @@ function system_requirements($phase) { else { $requirements['php_register_globals']['value'] = $t('Disabled'); } + + // Test PDO library availability. + $requirements['pdo'] = array( + 'title' => $t('PDO library'), + ); + if (extension_loaded('pdo')) { + $requirements['pdo']['value'] = $t('Enabled'); + } + else { + $requirements['pdo']['value'] = $t('Disabled'); + $requirements['pdo']['severity'] = REQUIREMENT_ERROR; + $requirements['pdo']['description'] = $t('Your server does not have the PHP PDO extension enabled. See the system requirements page for more information.', array('@system_requirements' => 'http://drupal.org/requirements')); + } // Test PHP memory_limit $memory_limit = ini_get('memory_limit');