MDL-62140 core_privacy: add helper functions to add system/user context

This commit is contained in:
Mark Nelson
2018-04-23 20:06:02 +08:00
parent 6fa694bef0
commit aa725516d3
2 changed files with 94 additions and 0 deletions
@@ -61,6 +61,46 @@ class contextlist extends contextlist_base {
return $this;
}
/**
* Adds the system context.
*
* @return $this
*/
public function add_system_context() : contextlist {
return $this->add_from_sql(SYSCONTEXTID, []);
}
/**
* Adds the user context for a given user.
*
* @param int $userid
* @return $this
*/
public function add_user_context(int $userid) : contextlist {
$sql = "SELECT DISTINCT ctx.id
FROM {context} ctx
WHERE ctx.contextlevel = :contextlevel
AND ctx.instanceid = :instanceid";
return $this->add_from_sql($sql, ['contextlevel' => CONTEXT_USER, 'instanceid' => $userid]);
}
/**
* Adds the user contexts for given users.
*
* @param array $userids
* @return $this
*/
public function add_user_contexts(array $userids) : contextlist {
global $DB;
list($useridsql, $useridparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED);
$sql = "SELECT DISTINCT ctx.id
FROM {context} ctx
WHERE ctx.contextlevel = :contextlevel
AND ctx.instanceid $useridsql";
return $this->add_from_sql($sql, ['contextlevel' => CONTEXT_USER] + $useridparams);
}
/**
* Sets the component for this contextlist.
*
+54
View File
@@ -37,6 +37,13 @@ use \core_privacy\local\request\contextlist;
*/
class contextlist_test extends advanced_testcase {
/**
* Runs before each test is performed.
*/
public function setUp() {
$this->resetAfterTest();
}
/**
* Ensure that valid SQL results in the relevant contexts being added.
*/
@@ -52,4 +59,51 @@ class contextlist_test extends advanced_testcase {
$this->assertCount(count($allcontexts), $uit);
}
/**
* Ensure that valid system context id is added.
*/
public function test_add_system_context() {
$cl = new contextlist();
$cl->add_system_context();
$this->assertCount(1, $cl);
foreach ($cl->get_contexts() as $context) {
$this->assertEquals(SYSCONTEXTID, $context->id);
}
}
/**
* Ensure that a valid user context id is added.
*/
public function test_add_user_context() {
$user = $this->getDataGenerator()->create_user();
$cl = new contextlist();
$cl->add_user_context($user->id);
$this->assertCount(1, $cl);
foreach ($cl->get_contexts() as $context) {
$this->assertEquals(\context_user::instance($user->id)->id, $context->id);
}
}
/**
* Ensure that valid user contexts are added.
*/
public function test_add_user_contexts() {
$user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$cl = new contextlist();
$cl->add_user_contexts([$user1->id, $user2->id]);
$this->assertCount(2, $cl);
$contexts = $cl->get_contextids();
$this->assertContains(\context_user::instance($user1->id)->id, $contexts);
$this->assertContains(\context_user::instance($user2->id)->id, $contexts);
}
}