summaryrefslogtreecommitdiff
path: root/modules/system/system.install
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-05-16 20:08:38 +0000
committerDries Buytaert <dries@buytaert.net>2010-05-16 20:08:38 +0000
commitf11db319d06d1d6b299e2816e6cc0bc29a7b9d73 (patch)
tree2ed6d9cecfe0d1d30e04f9a13b5fd1623caadab2 /modules/system/system.install
parent589ec7b7583c4810da9f366a80bca84bcaafe415 (diff)
downloadbrdo-f11db319d06d1d6b299e2816e6cc0bc29a7b9d73.tar.gz
brdo-f11db319d06d1d6b299e2816e6cc0bc29a7b9d73.tar.bz2
- Patch #228860 by tstoeckler, Mike Wacker, flickerfly, randallknutson, gordon: upgrading a module with a newly added dependencies breaks things badly.
Diffstat (limited to 'modules/system/system.install')
-rw-r--r--modules/system/system.install56
1 files changed, 56 insertions, 0 deletions
diff --git a/modules/system/system.install b/modules/system/system.install
index b12757c7a..5f01d45b8 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -358,6 +358,62 @@ function system_requirements($phase) {
$requirements['update access']['title'] = $t('Access to update.php');
}
+ // Display an error if a newly introduced dependency in a module is not resolved.
+ if ($phase == 'update') {
+ $files = system_rebuild_module_data();
+ foreach ($files as $module => $file) {
+ // Ignore disabled modules.
+ if (!$file->status) {
+ continue;
+ }
+ // Check the module's PHP version.
+ $name = $file->info['name'];
+ $php = $file->info['php'];
+ if (version_compare($php, PHP_VERSION, '>')) {
+ $requirements['php']['description'] .= $t('@name requires at least PHP @version.', array('@name' => $name, '@version' => $php));
+ $requirements['php']['severity'] = REQUIREMENT_ERROR;
+ }
+ // Check the module's required modules.
+ foreach ($file->requires as $requirement) {
+ $required_module = $requirement['name'];
+ // Check if the module exists.
+ if (!isset($files[$required_module])) {
+ $requirements["$module-$required_module"] = array(
+ 'title' => $t('Unresolved dependency'),
+ 'description' => $t('@name requires this module.', array('@name' => $name)),
+ 'value' => t('@required_name (Missing)', array('@required_name' => $required_module)),
+ 'severity' => REQUIREMENT_ERROR,
+ );
+ continue;
+ }
+ // Check for an incompatible version.
+ $required_file = $files[$required_module];
+ $required_name = $required_file->info['name'];
+ $version = str_replace(DRUPAL_CORE_COMPATIBILITY . '-', '', $required_file->info['version']);
+ $compatibility = drupal_check_incompatibility($requirement, $version);
+ if ($compatibility) {
+ $compatibility = rtrim(substr($compatibility, 2), ')');
+ $requirements["$module-$required_module"] = array(
+ 'title' => $t('Unresolved dependency'),
+ 'description' => $t('@name requires this module and version. Currently using @required_name version @version', array('@name' => $name, '@required_name' => $required_name, '@version' => $version)),
+ 'value' => t('@required_name (Version @compatibility required)', array('@required_name' => $required_name, '@compatibility' => $compatibility)),
+ 'severity' => REQUIREMENT_ERROR,
+ );
+ continue;
+ }
+ // Check for a disabled dependency.
+ if (!$required_file->status) {
+ $requirements["$module-$required_module"] = array(
+ 'title' => $t('Unresolved dependency'),
+ 'description' => $t('@name requires this module.', array('@name' => $name)),
+ 'value' => $t('@required_name (Disabled)', array('@required_name' => $required_name)),
+ 'severity' => REQUIREMENT_ERROR,
+ );
+ }
+ }
+ }
+ }
+
// Test Unicode library
include_once DRUPAL_ROOT . '/includes/unicode.inc';
$requirements = array_merge($requirements, unicode_requirements());