MDL-63764 core_competency: Add support for removal of context users
This issue is a part of the MDL-62560 Epic.
This commit is contained in:
@@ -53,9 +53,11 @@ use core_competency\user_evidence;
|
||||
use core_competency\user_evidence_competency;
|
||||
use core_competency\external\performance_helper;
|
||||
use core_privacy\local\metadata\collection;
|
||||
use core_privacy\local\request\approved_userlist;
|
||||
use core_privacy\local\request\contextlist;
|
||||
use core_privacy\local\request\approved_contextlist;
|
||||
use core_privacy\local\request\transform;
|
||||
use core_privacy\local\request\userlist;
|
||||
use core_privacy\local\request\writer;
|
||||
|
||||
/**
|
||||
@@ -68,6 +70,7 @@ use core_privacy\local\request\writer;
|
||||
*/
|
||||
class provider implements
|
||||
\core_privacy\local\metadata\provider,
|
||||
\core_privacy\local\request\core_userlist_provider,
|
||||
\core_privacy\local\request\subsystem\provider {
|
||||
|
||||
/**
|
||||
@@ -418,6 +421,166 @@ class provider implements
|
||||
return $contextlist;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of users who have data within a context.
|
||||
*
|
||||
* @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination.
|
||||
*/
|
||||
public static function get_users_in_context(userlist $userlist) {
|
||||
$context = $userlist->get_context();
|
||||
$params = ['contextid' => $context->id];
|
||||
|
||||
// Add users who have modified the frameworks and related data in the context.
|
||||
$sql = "
|
||||
SELECT cf.usermodified
|
||||
FROM {" . competency_framework::TABLE . "} cf
|
||||
WHERE cf.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT c.usermodified
|
||||
FROM {" . competency_framework::TABLE . "} cf
|
||||
JOIN {" . competency::TABLE . "} c
|
||||
ON c.competencyframeworkid = cf.id
|
||||
WHERE cf.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT cr.usermodified
|
||||
FROM {" . competency_framework::TABLE . "} cf
|
||||
JOIN {" . competency::TABLE . "} c
|
||||
ON c.competencyframeworkid = cf.id
|
||||
JOIN {" . related_competency::TABLE . "} cr
|
||||
ON cr.competencyid = c.id
|
||||
WHERE cf.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
// Add users who have modified the templates and related data in the context.
|
||||
$sql = "
|
||||
SELECT tpl.usermodified
|
||||
FROM {" . template::TABLE . "} tpl
|
||||
WHERE tpl.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT tch.usermodified
|
||||
FROM {" . template::TABLE . "} tpl
|
||||
JOIN {" . template_cohort::TABLE . "} tch
|
||||
ON tch.templateid = tpl.id
|
||||
WHERE tpl.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT tc.usermodified
|
||||
FROM {" . template::TABLE . "} tpl
|
||||
JOIN {" . template_competency::TABLE . "} tc
|
||||
ON tc.templateid = tpl.id
|
||||
WHERE tpl.contextid = :contextid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
// Add users if userlist is in course context.
|
||||
if (is_a($context, \context_course::class)) {
|
||||
$params = ['courseid' => $context->instanceid];
|
||||
|
||||
$sql = "
|
||||
SELECT cc.usermodified
|
||||
FROM {" . course_competency::TABLE . "} cc
|
||||
WHERE cc.courseid = :courseid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT ccs.usermodified
|
||||
FROM {" . course_competency_settings::TABLE . "} ccs
|
||||
WHERE ccs.courseid = :courseid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT ucc.userid, ucc.usermodified
|
||||
FROM {" . user_competency_course::TABLE . "} ucc
|
||||
WHERE ucc.courseid = :courseid";
|
||||
$userlist->add_from_sql('userid', $sql, $params);
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
} else if (is_a($context, \context_module::class)) {
|
||||
// Add users if userlist is in module context.
|
||||
$params = ['moduleid' => $context->instanceid];
|
||||
|
||||
$sql = "
|
||||
SELECT cmc.usermodified
|
||||
FROM {" . course_module_competency::TABLE . "} cmc
|
||||
WHERE cmc.cmid = :moduleid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
} else if (is_a($context, \context_user::class)) {
|
||||
$params = ['userid' => $context->instanceid];
|
||||
|
||||
// Add users through plan related data.
|
||||
$sql = "
|
||||
SELECT p.userid, p.usermodified, p.reviewerid
|
||||
FROM {" . plan::TABLE . "} p
|
||||
WHERE p.userid = :userid";
|
||||
$userlist->add_from_sql('userid', $sql, $params);
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
$userlist->add_from_sql('reviewerid', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT pc.usermodified
|
||||
FROM {" . plan::TABLE . "} p
|
||||
JOIN {" . plan_competency::TABLE . "} pc
|
||||
ON pc.planid = p.id
|
||||
WHERE p.userid = :userid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT upc.usermodified
|
||||
FROM {" . user_competency_plan::TABLE . "} upc
|
||||
WHERE upc.userid = :userid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
// Add users through competency data.
|
||||
$sql = "
|
||||
SELECT uc.userid, uc.usermodified, uc.reviewerid
|
||||
FROM {" . user_competency::TABLE . "} uc
|
||||
WHERE uc.userid = :userid";
|
||||
$userlist->add_from_sql('userid', $sql, $params);
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
$userlist->add_from_sql('reviewerid', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT e.usermodified, e.actionuserid
|
||||
FROM {" . user_competency::TABLE . "} uc
|
||||
JOIN {" . evidence::TABLE . "} e
|
||||
ON e.usercompetencyid = uc.id
|
||||
WHERE uc.userid = :userid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
$userlist->add_from_sql('actionuserid', $sql, $params);
|
||||
|
||||
// Add users through evidence data.
|
||||
$sql = "
|
||||
SELECT ue.userid, ue.usermodified
|
||||
FROM {" . user_evidence::TABLE . "} ue
|
||||
WHERE ue.userid = :userid";
|
||||
$userlist->add_from_sql('userid', $sql, $params);
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
|
||||
$sql = "
|
||||
SELECT ue.usermodified
|
||||
FROM {" . user_evidence::TABLE . "} ue
|
||||
JOIN {" . user_evidence_competency::TABLE . "} uec
|
||||
ON uec.userevidenceid = ue.id
|
||||
WHERE ue.userid = :userid";
|
||||
$userlist->add_from_sql('usermodified', $sql, $params);
|
||||
}
|
||||
|
||||
// Add users who commented in the context.
|
||||
// Note: Comment component must be competency and not core_competency.
|
||||
\core_comment\privacy\provider::get_users_in_context_from_sql(
|
||||
$userlist, 'com', 'competency', 'plan', $context->id);
|
||||
|
||||
\core_comment\privacy\provider::get_users_in_context_from_sql(
|
||||
$userlist, 'com', 'competency', 'user_competency', $context->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export all user data for the specified user, in the specified contexts.
|
||||
*
|
||||
@@ -516,6 +679,37 @@ class provider implements
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete multiple users within a single context.
|
||||
*
|
||||
* Here we only delete the private data of users, not whether they modified, are reviewing,
|
||||
* or are associated with the record on at a second level. Only data directly linked to the
|
||||
* user will be affected.
|
||||
*
|
||||
* @param approved_userlist $userlist The approved context and user information to delete information for.
|
||||
*/
|
||||
public static function delete_data_for_users(approved_userlist $userlist) {
|
||||
$context = $userlist->get_context();
|
||||
$userids = $userlist->get_userids();
|
||||
|
||||
switch ($context->contextlevel) {
|
||||
case CONTEXT_USER:
|
||||
// Only delete the user's information when their context is being deleted.
|
||||
// We do not take any action on other user's contexts because we don't own the data there.
|
||||
if (in_array($context->instanceid, $userids)) {
|
||||
static::delete_user_evidence_of_prior_learning($context->instanceid);
|
||||
static::delete_user_plans($context->instanceid);
|
||||
static::delete_user_competencies($context->instanceid);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case CONTEXT_COURSE:
|
||||
static::delete_user_competencies_in_course($context->instanceid, $userids);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete evidence of prior learning.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user