diff --git a/lib/filterlib.php b/lib/filterlib.php index 0a9753ba4f6..be862e758f4 100644 --- a/lib/filterlib.php +++ b/lib/filterlib.php @@ -692,16 +692,21 @@ function filter_is_enabled($filtername) { * @return array where the keys and values are both the filter name, like 'tex'. */ function filter_get_globally_enabled() { - static $enabledfilters = null; - if (is_null($enabledfilters)) { - $filters = filter_get_global_states(); - $enabledfilters = array(); - foreach ($filters as $filter => $filerinfo) { - if ($filerinfo->active != TEXTFILTER_DISABLED) { - $enabledfilters[$filter] = $filter; - } + $cache = \cache::make_from_params(\cache_store::MODE_REQUEST, 'core_filter', 'global_filters'); + $enabledfilters = $cache->get('enabled'); + if ($enabledfilters !== false) { + return $enabledfilters; + } + + $filters = filter_get_global_states(); + $enabledfilters = array(); + foreach ($filters as $filter => $filerinfo) { + if ($filerinfo->active != TEXTFILTER_DISABLED) { + $enabledfilters[$filter] = $filter; } } + + $cache->set('enabled', $enabledfilters); return $enabledfilters; } diff --git a/lib/tests/filterlib_test.php b/lib/tests/filterlib_test.php index b8af6ff2966..c3aab08cb91 100644 --- a/lib/tests/filterlib_test.php +++ b/lib/tests/filterlib_test.php @@ -676,6 +676,17 @@ class core_filterlib_testcase extends advanced_testcase { $this->assertInstanceOf('performance_measuring_filter_manager', $filterman); } + public function test_filter_get_globally_enabled_default() { + $enabledfilters = filter_get_globally_enabled(); + $this->assertArrayNotHasKey('glossary', $enabledfilters); + } + + public function test_filter_get_globally_enabled_after_change() { + filter_set_global_state('glossary', TEXTFILTER_ON); + $enabledfilters = filter_get_globally_enabled(); + $this->assertArrayHasKey('glossary', $enabledfilters); + } + public function test_filter_get_globally_enabled_filters_with_config() { $this->setup_available_in_context_tests();