diff options
Diffstat (limited to 'includes/install.inc')
-rw-r--r-- | includes/install.inc | 81 |
1 files changed, 75 insertions, 6 deletions
diff --git a/includes/install.inc b/includes/install.inc index 9b19cf665..1c0608a63 100644 --- a/includes/install.inc +++ b/includes/install.inc @@ -4,11 +4,9 @@ define('SCHEMA_UNINSTALLED', -1); define('SCHEMA_INSTALLED', 0); -define('DRUPAL_MINIMUM_PHP', '4.3.3'); -define('DRUPAL_MINIMUM_MEMORY', '8M'); -define('DRUPAL_MINIMUM_MYSQL', '3.23.17'); // If using MySQL -define('DRUPAL_MINIMUM_PGSQL', '7.3'); // If using PostgreSQL -define('DRUPAL_MINIMUM_APACHE', '1.3'); // If using Apache +define('REQUIREMENT_OK', 0); +define('REQUIREMENT_WARNING', 1); +define('REQUIREMENT_ERROR', 2); define('FILE_EXIST', 1); define('FILE_READABLE', 2); @@ -128,7 +126,7 @@ function drupal_detect_baseurl($file = 'install.php') { $proto = $_SERVER['HTTPS'] ? 'https://' : 'http://'; $host = $_SERVER['SERVER_NAME']; $port = ($_SERVER['SERVER_PORT'] == 80 ? '' : ':'. $_SERVER['SERVER_PORT']); - $uri = str_replace("?profile=$profile", '', $_SERVER['REQUEST_URI']); + $uri = preg_replace("/\?.*/", '', $_SERVER['REQUEST_URI']); $dir = str_replace("/$file", '', $uri); return "$proto$host$port$dir"; @@ -602,3 +600,74 @@ function _st(&$value, $key) { case '!': } } + + +/** + * Check a profile's requirements. + * + * @param profile + * Name of profile to check. + */ +function drupal_check_profile($profile) { + include_once './includes/file.inc'; + + $profile_file = "./profiles/$profile/$profile.profile"; + + if (!isset($profile) || !file_exists($profile_file)) { + install_no_profile_error(); + } + + require_once($profile_file); + + // Get a list of modules required by this profile. + $function = $profile .'_profile_modules'; + $module_list = array_unique(array_merge(array('system'), $function())); + + // Get a list of all .install files. + $installs = drupal_get_install_files($module_list); + + // Collect requirement testing results + $requirements = array(); + foreach ($installs as $install) { + require_once $install->filename; + $requirements = array_merge($requirements, module_invoke($install->name, 'requirements', 'install')); + } + return $requirements; +} + +/** + * Extract highest severity from requirements array. + */ +function drupal_requirements_severity(&$requirements) { + $severity = REQUIREMENT_OK; + foreach ($requirements as $requirement) { + if (isset($requirement['severity'])) { + $severity = max($severity, $requirement['severity']); + } + } + return $severity; +} + +/** + * Check a module's requirements. + */ +function drupal_check_module($module) { + // Include install file + $install = drupal_get_install_files(array($module)); + if (isset($install[$module])) { + require_once $install[$module]->filename; + + // Check requirements + $requirements = module_invoke($module, 'requirements', 'install'); + if (is_array($requirements) && drupal_requirements_severity($requirements) == REQUIREMENT_ERROR) { + // Print any error messages + foreach ($requirements as $requirement) { + if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) { + drupal_set_message($requirement['description'] .' ('. t('Currently using !item !version', array('!item' => $requirement['title'], '!version' => $requirement['value'])) .')', 'error'); + } + } + return FALSE; + } + } + return TRUE; +} |