From bfc508c937474cb9c4dd2c530aa9abf6893ca075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Sat, 12 Oct 2013 17:12:02 +0200 Subject: [PATCH] MDL-37813 remove missing filters when configuring string filters and fix filter uninstall --- lib/filterlib.php | 16 +++++++-- lib/tests/filter_test.php | 70 +++++++++++++++++++-------------------- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/lib/filterlib.php b/lib/filterlib.php index 946c7cf9a93..51910de9559 100644 --- a/lib/filterlib.php +++ b/lib/filterlib.php @@ -714,13 +714,23 @@ function filter_get_string_filters() { */ function filter_set_applies_to_strings($filter, $applytostrings) { $stringfilters = filter_get_string_filters(); - $numstringfilters = count($stringfilters); + $prevfilters = $stringfilters; + $allfilters = filter_get_all_installed(); + if ($applytostrings) { $stringfilters[$filter] = $filter; } else { unset($stringfilters[$filter]); } - if (count($stringfilters) != $numstringfilters) { + + // Remove missing filters. + foreach ($stringfilters as $filter) { + if (!isset($allfilters[$filter])) { + unset($stringfilters[$filter]); + } + } + + if ($prevfilters != $stringfilters) { set_config('stringfilters', implode(',', $stringfilters)); set_config('filterall', !empty($stringfilters)); } @@ -1092,6 +1102,8 @@ function filter_get_global_states() { function filter_delete_all_for_filter($filter) { global $DB; + filter_set_applies_to_strings($filter, false); + unset_all_config_for_plugin('filter_' . $filter); $DB->delete_records('filter_active', array('filter' => $filter)); $DB->delete_records('filter_config', array('filter' => $filter)); diff --git a/lib/tests/filter_test.php b/lib/tests/filter_test.php index 2d35b9dea1b..2c0127b3606 100644 --- a/lib/tests/filter_test.php +++ b/lib/tests/filter_test.php @@ -663,49 +663,43 @@ class filter_delete_config_testcase extends advanced_testcase { } class filter_filter_set_applies_to_strings extends advanced_testcase { - protected $origcfgstringfilters; - protected $origcfgfilterall; - - protected function setUp() { - global $DB, $CFG; - parent::setUp(); - - $DB->delete_records('filter_active', array()); - $DB->delete_records('filter_config', array()); - $this->resetAfterTest(false); - - // Store original $CFG; - $this->origcfgstringfilters = $CFG->stringfilters; - $this->origcfgfilterall = $CFG->filterall; - } - - protected function tearDown() { - global $CFG; - $CFG->stringfilters = $this->origcfgstringfilters; - $CFG->filterall = $this->origcfgfilterall; - - parent::tearDown(); - } - public function test_set() { global $CFG; + $this->resetAfterTest(); + + $this->assertFileExists("$CFG->dirroot/filter/emailprotect"); // Any standard filter. + $this->assertFileExists("$CFG->dirroot/filter/tidy"); // Any standard filter. + $this->assertFileNotExists("$CFG->dirroot/filter/grgrggr"); // Any non-existent filter + // Setup fixture. - $CFG->filterall = 0; - $CFG->stringfilters = ''; + set_config('filterall', 0); + set_config('stringfilters', ''); // Exercise SUT. - filter_set_applies_to_strings('name', true); + filter_set_applies_to_strings('tidy', true); // Validate. - $this->assertEquals('name', $CFG->stringfilters); + $this->assertEquals('tidy', $CFG->stringfilters); + $this->assertEquals(1, $CFG->filterall); + + filter_set_applies_to_strings('grgrggr', true); + $this->assertEquals('tidy', $CFG->stringfilters); + $this->assertEquals(1, $CFG->filterall); + + filter_set_applies_to_strings('emailprotect', true); + $this->assertEquals('tidy,emailprotect', $CFG->stringfilters); $this->assertEquals(1, $CFG->filterall); } public function test_unset_to_empty() { global $CFG; + $this->resetAfterTest(); + + $this->assertFileExists("$CFG->dirroot/filter/tidy"); // Any standard filter. + // Setup fixture. - $CFG->filterall = 1; - $CFG->stringfilters = 'name'; + set_config('filterall', 1); + set_config('stringfilters', 'tidy'); // Exercise SUT. - filter_set_applies_to_strings('name', false); + filter_set_applies_to_strings('tidy', false); // Validate. $this->assertEquals('', $CFG->stringfilters); $this->assertEquals('', $CFG->filterall); @@ -713,13 +707,19 @@ class filter_filter_set_applies_to_strings extends advanced_testcase { public function test_unset_multi() { global $CFG; + $this->resetAfterTest(); + + $this->assertFileExists("$CFG->dirroot/filter/emailprotect"); // Any standard filter. + $this->assertFileExists("$CFG->dirroot/filter/tidy"); // Any standard filter. + $this->assertFileExists("$CFG->dirroot/filter/multilang"); // Any standard filter. + // Setup fixture. - $CFG->filterall = 1; - $CFG->stringfilters = 'name,other'; + set_config('filterall', 1); + set_config('stringfilters', 'emailprotect,tidy,multilang'); // Exercise SUT. - filter_set_applies_to_strings('name', false); + filter_set_applies_to_strings('tidy', false); // Validate. - $this->assertEquals('other', $CFG->stringfilters); + $this->assertEquals('emailprotect,multilang', $CFG->stringfilters); $this->assertEquals(1, $CFG->filterall); } }