Added extra checking for search manager get_search_area.
}
$classname = static::get_area_classname($areaid);
- if (class_exists($classname)) {
+
+ if (class_exists($classname) && static::is_search_area($classname)) {
return new $classname();
}
/**
* 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\base')) {
+ return (new \ReflectionClass($classname))->isInstantiable();
}
return false;
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);
+ }
+
}
$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\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'));
+ }
}