summaryrefslogtreecommitdiff
path: root/modules/system
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system')
-rw-r--r--modules/system/system.admin.inc29
-rw-r--r--modules/system/system.test55
2 files changed, 79 insertions, 5 deletions
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 834cea968..284d02eec 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -598,13 +598,32 @@ function system_modules($form_state = array()) {
foreach ($module->requires as $requires => $v) {
if (!isset($files[$requires])) {
$extra['requires'][$requires] = t('@module (<span class="admin-missing">missing</span>)', array('@module' => drupal_ucfirst($requires)));
- $extra['disabled'] = TRUE;
+ $extra['disabled'] = TRUE;
+ }
+ else {
+ $requires_name = $files[$requires]->info['name'];
+ if ($v) {
+ $requires_name .= $v['original_version'];
+ $current_version = str_replace(DRUPAL_CORE_COMPATIBILITY . '-', '', $files[$requires]->info['version']);
+ foreach ($v['versions'] as $required_version) {
+ if ((isset($required_version['op']) && !version_compare($current_version, $required_version['version'], $required_version['op'])) ||
+ (isset($required_version['preg']) && !preg_match($required_version['preg'], $current_version))) {
+ $extra['requires'][$requires] = t('@module (<span class="admin-missing">incompatible with</span> version @version)', array(
+ '@module' => $requires_name,
+ '@version' => $files[$requires]->info['version'],
+ ));
+ $extra['disabled'] = TRUE;
+ }
+ }
}
- elseif (!$files[$requires]->status) {
- $extra['requires'][$requires] = t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $files[$requires]->info['name']));
+ if (!isset($extra['requires'][$requires])) {
+ if ($files[$requires]->status) {
+ $extra['requires'][$requires] = t('@module (<span class="admin-enabled">enabled</span>)', array('@module' => $requires_name));
+ }
+ else {
+ $extra['requires'][$requires] = t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $requires_name));
+ }
}
- else {
- $extra['requires'][$requires] = t('@module (<span class="admin-enabled">enabled</span>)', array('@module' => $files[$requires]->info['name']));
}
}
// Generate link for module's help page, if there is one.
diff --git a/modules/system/system.test b/modules/system/system.test
index a48cbd95a..09f49b9f5 100644
--- a/modules/system/system.test
+++ b/modules/system/system.test
@@ -198,6 +198,61 @@ class ModuleDependencyTestCase extends ModuleTestCase {
}
/**
+ * Test module dependency on specific versions.
+ */
+class ModuleVersionTestCase extends ModuleTestCase {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Module versions',
+ 'description' => 'Check module version dependencies.',
+ 'group' => 'Module',
+ );
+ }
+
+ function setup() {
+ parent::setUp('module_test');
+ }
+
+ /**
+ * Test version dependencies.
+ */
+ function testModuleVersions() {
+ $dependencies = array(
+ // Alternating between being compatible and incompatible with 7.x-2.4.
+ // The first is always a compatible.
+ 'common_test',
+ // Branch incompatibility.
+ 'common_test (1.x)',
+ // Branch compatibility.
+ 'common_test (2.x)',
+ // Another branch incompatibility.
+ 'common_test (>2.x)',
+ // Another branch compatibility.
+ 'common_test (<=2.x)',
+ // Another branch incompatibility.
+ 'common_test (<2.x)',
+ // Another branch compatibility.
+ 'common_test (>=2.x)',
+ // Nonsense, misses a dash. Incompatible with everything.
+ 'common_test (=7.x2.x, >=2.4)',
+ // Core version is optional. Compatible.
+ 'common_test (=7.x-2.x, >=2.4)',
+ // Test !=, explicitly incompatible.
+ 'common_test (=2.x, !=2.4)',
+ // Three operations. Compatible.
+ 'common_test (=2.x, !=2.3, <2.5)',
+ );
+ variable_set('dependencies', $dependencies);
+ $n = count($dependencies);
+ for ($i = 0; $i < $n; $i++) {
+ $this->drupalGet('admin/structure/modules');
+ $checkbox = $this->xpath('//input[@id="edit-modules-Testing-module-test-enable"]');
+ $this->assertEqual(!empty($checkbox[0]['disabled']), $i % 2, $dependencies[$i]);
+ }
+ }
+}
+
+/**
* Test required modules functionality.
*/
class ModuleRequiredTestCase extends ModuleTestCase {