diff --git a/lib/environmentlib.php b/lib/environmentlib.php
index 28f2dc9543d..802ebef0dc8 100644
--- a/lib/environmentlib.php
+++ b/lib/environmentlib.php
@@ -327,6 +327,10 @@ function get_list_of_environment_versions($contents) {
}
}
+ if (isset($contents['COMPATIBILITY_MATRIX']['#']['PLUGIN'])) {
+ $versions[] = 'all';
+ }
+
return $versions;
}
@@ -396,6 +400,14 @@ function get_environment_for_version($version, $env_select) {
return false;
}
+ // If $env_select is not numeric then this is being called on a plugin, and not the core environment.xml
+ // If a version of 'all' is in the arry is also means that the new tag was found, this should
+ // be matched against any version of Moodle.
+ if (!is_numeric($env_select) && in_array('all', $versions)
+ && environment_verify_plugin($env_select, $contents['COMPATIBILITY_MATRIX']['#']['PLUGIN'][0])) {
+ return $contents['COMPATIBILITY_MATRIX']['#']['PLUGIN'][0];
+ }
+
/// If the version requested is available
if (!in_array($version, $versions)) {
return false;
@@ -407,6 +419,19 @@ function get_environment_for_version($version, $env_select) {
return $contents['COMPATIBILITY_MATRIX']['#']['MOODLE'][$fl_arr[$version]];
}
+/**
+ * Checks if a plugin tag has a name attribute and it matches the plugin being tested.
+ *
+ * @param string $plugin the name of the plugin.
+ * @param array $pluginxml the xmlised structure for the plugin tag being tested.
+ * @return boolean true if the name attribute exists and matches the plugin being tested.
+ */
+function environment_verify_plugin($plugin, $pluginxml) {
+ if (!isset($pluginxml['@']['name']) || $pluginxml['@']['name'] != $plugin) {
+ return false;
+ }
+ return true;
+}
/**
* This function will check for everything (DB, PHP and PHP extensions for now)
diff --git a/lib/tests/environment_test.php b/lib/tests/environment_test.php
index 64c508cae5c..2554b0d243a 100644
--- a/lib/tests/environment_test.php
+++ b/lib/tests/environment_test.php
@@ -53,4 +53,79 @@ class core_environment_testcase extends advanced_testcase {
$this->assertTrue($environment_result->getStatus(), "Problem detected in environment ($environment_result->part:$environment_result->info), fix all warnings and errors!");
}
}
+
+ /**
+ * Test the get_list_of_environment_versions() function.
+ */
+ public function test_get_list_of_environment_versions() {
+ global $CFG;
+ require_once($CFG->libdir.'/environmentlib.php');
+ // Build a sample xmlised environment.xml.
+ $xml = <<
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+END;
+ $environemt = xmlize($xml);
+ $versions = get_list_of_environment_versions($environemt);
+ $this->assertCount(5, $versions);
+ $this->assertContains('1.9', $versions);
+ $this->assertContains('2.5', $versions);
+ $this->assertContains('2.6', $versions);
+ $this->assertContains('2.7', $versions);
+ $this->assertContains('all', $versions);
+ }
+
+ /**
+ * Test the environment_verify_plugin() function.
+ */
+ public function test_verify_plugin() {
+ global $CFG;
+ require_once($CFG->libdir.'/environmentlib.php');
+ // Build sample xmlised environment file fragments.
+ $plugin1xml = <<
+
+
+
+
+END;
+ $plugin1 = xmlize($plugin1xml);
+ $plugin2xml = <<
+
+
+
+
+END;
+ $plugin2 = xmlize($plugin2xml);
+ $this->assertTrue(environment_verify_plugin('block_testcase', $plugin1['PLUGIN']));
+ $this->assertFalse(environment_verify_plugin('block_testcase', $plugin2['PLUGIN']));
+ $this->assertFalse(environment_verify_plugin('mod_someother', $plugin1['PLUGIN']));
+ $this->assertFalse(environment_verify_plugin('mod_someother', $plugin2['PLUGIN']));
+ }
}
diff --git a/lib/upgrade.txt b/lib/upgrade.txt
index 95ab70c0f50..6971492668f 100644
--- a/lib/upgrade.txt
+++ b/lib/upgrade.txt
@@ -11,6 +11,9 @@ information provided here is intended especially for developers.
* The file pluginlib.php was deprecated since 2.6 and has now been removed, do not include or require it.
* \core_component::fetch_subsystems() now returns a valid path for completion component instead of null.
* Deprecated JS global methods have been removed (show_item, destroy_item, hide_item, addonload, getElementsByTagName, findChildNodes).
+* For 3rd party plugin specific environment.xml files, it's now possible to specify version independent checks by using the
+ tag instead of the version dependent one. If the PLUGIN tag is used any
+ Moodle specific tags will be ignored.
=== 2.8 ===