diff --git a/search/classes/manager.php b/search/classes/manager.php index 2f342040804..155715feed3 100644 --- a/search/classes/manager.php +++ b/search/classes/manager.php @@ -203,7 +203,7 @@ class manager { } $classname = static::get_area_classname($areaid); - if (class_exists($classname)) { + if (class_exists($classname) && static::is_search_area($classname)) { return new $classname(); } @@ -727,14 +727,13 @@ class manager { /** * Checks whether a classname is of an actual search area. * - * @param string $searchareaname + * @param string $classname * @return bool */ - protected static function is_search_area($searchareaname) { - if (is_subclass_of($searchareaname, 'core_search\base')) { - return (new \ReflectionClass($searchareaname))->isInstantiable(); + protected static function is_search_area($classname) { + if (is_subclass_of($classname, 'core_search\area\base')) { + return (new \ReflectionClass($classname))->isInstantiable(); } - return false; } } diff --git a/search/tests/fixtures/testable_core_search.php b/search/tests/fixtures/testable_core_search.php index bce1437d889..3907424af98 100644 --- a/search/tests/fixtures/testable_core_search.php +++ b/search/tests/fixtures/testable_core_search.php @@ -97,4 +97,14 @@ class testable_core_search extends \core_search\manager { self::get_search_areas_list(false); self::get_search_areas_list(true); } + + /** + * Changes visibility. + * + * @param string $classname + * @return bool + */ + public static function is_search_area($classname) { + return parent::is_search_area($classname); + } } diff --git a/search/tests/manager_test.php b/search/tests/manager_test.php index e6db62de637..96995982a03 100644 --- a/search/tests/manager_test.php +++ b/search/tests/manager_test.php @@ -252,4 +252,19 @@ class search_manager_testcase extends advanced_testcase { $this->assertEquals($allcontexts, $contexts[$this->forumpostareaid]); $this->assertEquals(array($course1ctx->id => $course1ctx->id), $contexts[$this->mycoursesareaid]); } + + /** + * test_is_search_area + * + * @return void + */ + public function test_is_search_area() { + + $this->assertFalse(testable_core_search::is_search_area('\asd\asd')); + $this->assertFalse(testable_core_search::is_search_area('\mod_forum\search\posta')); + $this->assertFalse(testable_core_search::is_search_area('\core_search\area\base_mod')); + $this->assertTrue(testable_core_search::is_search_area('\mod_forum\search\post')); + $this->assertTrue(testable_core_search::is_search_area('\\mod_forum\\search\\post')); + $this->assertTrue(testable_core_search::is_search_area('mod_forum\\search\\post')); + } } diff --git a/version.php b/version.php index 43b31e786a7..3ce7527001f 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2016052301.04; // 20160523 = branching date YYYYMMDD - do not modify! +$version = 2016052301.05; // 20160523 = branching date YYYYMMDD - do not modify! // RR = release increments - 00 in DEV branches. // .XX = incremental changes.