diff --git a/lib/userkey/classes/privacy/provider.php b/lib/userkey/classes/privacy/provider.php index 39dfa4567bf..5b671489c0d 100644 --- a/lib/userkey/classes/privacy/provider.php +++ b/lib/userkey/classes/privacy/provider.php @@ -29,6 +29,7 @@ defined('MOODLE_INTERNAL') || die(); use \core_privacy\local\metadata\collection; use \core_privacy\local\request\transform; use \core_privacy\local\request\writer; +use core_privacy\local\request\userlist; /** * Privacy class for requesting user data. @@ -62,6 +63,41 @@ class provider implements return $collection; } + /** + * Get the list of users within a specific context for this system. + * + * @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination. + * @param context $context The context. + * @param string $script The unique target identifier. + * @param int $instance The instance ID. + */ + public static function get_user_contexts_with_script(userlist $userlist, \context $context, string $script, + int $instance = null) { + if (!$context instanceof \context_user) { + return; + } + + $params = [ + 'userid' => $context->instanceid, + 'script' => $script + ]; + + $whereinstance = ''; + + if (!empty($instance)) { + $params['instance'] = $instance; + $whereinstance = ' AND k.instance = :instance'; + } + + $sql = "SELECT k.userid + FROM {user_private_key} k + WHERE k.script = :script + AND k.userid = :userid + {$whereinstance}"; + + $userlist->add_from_sql('userid', $sql, $params); + } + /** * Exports the data relating to user keys for the specified scripts and instance, within the specified * context/subcontext.