MDL-62356 enrol_meta: Add privacy implementation for enrol_meta

This commit is contained in:
cescobedo 2018-05-14 10:55:52 +02:00
parent ab65b87f3d
commit 267effaaa2
3 changed files with 284 additions and 8 deletions

View file

@ -22,20 +22,98 @@
*/
namespace enrol_meta\privacy;
defined('MOODLE_INTERNAL') || die();
use \core_privacy\local\metadata\collection;
use \core_privacy\local\request\contextlist;
use \core_privacy\local\request\approved_contextlist;
/**
* Privacy Subsystem for enrol_meta implementing null_provider.
* Privacy provider for enrol_meta.
*
* @copyright 2018 Carlos Escobedo <carlos@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements \core_privacy\local\metadata\null_provider {
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\plugin\provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
* Returns meta data about this system.
*
* @return string
* @param collection $collection The initialised item collection to add items to.
* @return collection A listing of user data stored through this system.
*/
public static function get_reason() : string {
return 'privacy:metadata';
public static function get_metadata(collection $collection) : collection {
$collection->add_subsystem_link('core_group', [], 'privacy:metadata:core_group');
return $collection;
}
/**
* Get the list of contexts that contain user information for the specified user.
*
* @param int $userid The user to search.
* @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin.
*/
public static function get_contexts_for_userid(int $userid) : contextlist {
$contextlist = new contextlist();
$sql = "SELECT ctx.id
FROM {groups_members} gm
JOIN {groups} g ON gm.groupid = g.id
JOIN {context} ctx ON g.courseid = ctx.instanceid AND ctx.contextlevel = :contextlevel
WHERE gm.userid = :userid
AND gm.component = 'enrol_meta'";
$params = [
'contextlevel' => CONTEXT_COURSE,
'userid' => $userid
];
$contextlist->add_from_sql($sql, $params);
return $contextlist;
}
/**
* Export all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts to export information for.
*/
public static function export_user_data(approved_contextlist $contextlist) {
if (empty($contextlist)) {
return;
}
foreach ($contextlist as $context) {
if ($context->contextlevel == CONTEXT_COURSE) {
\core_group\privacy\provider::export_groups(
$context,
'enrol_meta',
[get_string('pluginname', 'enrol_meta')]
);
}
}
}
/**
* Delete all use data which matches the specified deletion_criteria.
*
* @param context $context A user context.
*/
public static function delete_data_for_all_users_in_context(\context $context) {
if (empty($context)) {
return;
}
if ($context->contextlevel == CONTEXT_COURSE) {
// Delete all the associated groups.
\core_group\privacy\provider::delete_groups_for_all_users($context, 'enrol_meta');
}
}
/**
* Delete all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts and user information to delete information for.
*/
public static function delete_data_for_user(approved_contextlist $contextlist) {
if (empty($contextlist->count())) {
return;
}
\core_group\privacy\provider::delete_groups_for_user($contextlist, 'enrol_meta');
}
}