$systemcontextid = \context_system::instance()->id;
foreach ($areasbylevel[CONTEXT_SYSTEM] as $areaid => $searchclass) {
- $areascontexts[$areaid][] = $systemcontextid;
+ $areascontexts[$areaid][$systemcontextid] = $systemcontextid;
+ }
+ }
+
+ if (!empty($areasbylevel[CONTEXT_USER])) {
+ if ($usercontext = \context_user::instance($USER->id, IGNORE_MISSING)) {
+ // Extra checking although only logged users should reach this point, guest users have a valid context id.
+ foreach ($areasbylevel[CONTEXT_USER] as $areaid => $searchclass) {
+ $areascontexts[$areaid][$usercontext->id] = $usercontext->id;
+ }
}
}
/**
* Core search class adapted to unit test.
*
+ * Note that by default all core search areas are returned when calling get_search_areas_list,
+ * if you want to use the mock search area you can use testable_core_search::add_search_area
+ * although if you want to add mock search areas on top of the core ones you should call
+ * testable_core_search::add_core_search_areas before calling testable_core_search::add_search_area.
+ *
* @package core_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
self::$enabledsearchareas[$areaid] = $searcharea;
self::$allsearchareas[$areaid] = $searcharea;
}
+
+ /**
+ * Loads all core search areas.
+ *
+ * @return void
+ */
+ public function add_core_search_areas() {
+ self::get_search_areas_list(false);
+ self::get_search_areas_list(true);
+ }
}
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/fixtures/testable_core_search.php');
+require_once(__DIR__ . '/fixtures/mock_search_area.php');
/**
* Unit tests for search manager.
$course2 = $this->getDataGenerator()->create_course();
$course2ctx = context_course::instance($course2->id);
$teacher = $this->getDataGenerator()->create_user();
+ $teacherctx = context_user::instance($teacher->id);
$student = $this->getDataGenerator()->create_user();
+ $studentctx = context_user::instance($student->id);
$noaccess = $this->getDataGenerator()->create_user();
+ $noaccessctx = context_user::instance($noaccess->id);
$this->getDataGenerator()->enrol_user($teacher->id, $course1->id, 'teacher');
$this->getDataGenerator()->enrol_user($student->id, $course1->id, 'student');
$context3 = context_module::instance($forum3->cmid);
$search = testable_core_search::instance();
+ $mockareaid = \core_search\manager::generate_areaid('core_mocksearch', 'mock_search_area');
+ $search->add_core_search_areas();
+ $search->add_search_area($mockareaid, new core_mocksearch\search\mock_search_area());
$this->setAdminUser();
$this->assertTrue($search->get_areas_user_accesses());
$sitectx = \context_course::instance(SITEID);
+ $systemctxid = \context_system::instance()->id;
// Can access the frontpage ones.
$this->setUser($noaccess);
$contexts = $search->get_areas_user_accesses();
$this->assertEquals(array($frontpageforumcontext->id => $frontpageforumcontext->id), $contexts[$this->forumpostareaid]);
$this->assertEquals(array($sitectx->id => $sitectx->id), $contexts[$this->mycoursesareaid]);
+ $mockctxs = array($noaccessctx->id => $noaccessctx->id, $systemctxid => $systemctxid);
+ $this->assertEquals($mockctxs, $contexts[$mockareaid]);
$this->setUser($teacher);
$contexts = $search->get_areas_user_accesses();
$this->assertEquals($frontpageandcourse1, $contexts[$this->forumpostareaid]);
$this->assertEquals(array($sitectx->id => $sitectx->id, $course1ctx->id => $course1ctx->id),
$contexts[$this->mycoursesareaid]);
+ $mockctxs = array($teacherctx->id => $teacherctx->id, $systemctxid => $systemctxid);
+ $this->assertEquals($mockctxs, $contexts[$mockareaid]);
$this->setUser($student);
$contexts = $search->get_areas_user_accesses();
$this->assertEquals($frontpageandcourse1, $contexts[$this->forumpostareaid]);
$this->assertEquals(array($sitectx->id => $sitectx->id, $course1ctx->id => $course1ctx->id),
$contexts[$this->mycoursesareaid]);
+ $mockctxs = array($studentctx->id => $studentctx->id, $systemctxid => $systemctxid);
+ $this->assertEquals($mockctxs, $contexts[$mockareaid]);
// Hide the activity.
set_coursemodule_visible($forum2->cmid, 0);