. /** * Privacy class for requesting user data. * * @package core * @category privacy * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core\privacy; defined('MOODLE_INTERNAL') || die(); use core_privacy\local\metadata\collection; use core_privacy\local\request\approved_contextlist; use core_privacy\local\request\approved_userlist; use core_privacy\local\request\contextlist; use core_privacy\local\request\userlist; /** * Privacy class for requesting user data. * * @package core * @copyright 2018 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements \core_privacy\local\metadata\provider, \core_privacy\local\request\subsystem\provider, \core_privacy\local\request\core_userlist_provider { /** * Returns information about the user data stored in this component. * * @param collection $collection A list of information about this component * @return collection The collection object filled out with information about this component. */ public static function get_metadata(collection $collection) : collection { // These tables are really data about site configuration and not user data. // The config_log includes information about which user performed a configuration change. // The value and oldvalue may contain sensitive information such as accounts for service passwords.. // This is not considered to be user data. $collection->add_database_table('config_log', [ 'userid' => 'privacy:metadata:config_log:userid', 'timemodified' => 'privacy:metadata:config_log:timemodified', 'plugin' => 'privacy:metadata:config_log:plugin', 'name' => 'privacy:metadata:config_log:name', 'value' => 'privacy:metadata:config_log:value', 'oldvalue' => 'privacy:metadata:config_log:oldvalue', ], 'privacy:metadata:config_log'); // The upgrade_log includes information about which user performed an upgrade. // This is not considered to be user data. $collection->add_database_table('upgrade_log', [ 'type' => 'privacy:metadata:upgrade_log:type', 'plugin' => 'privacy:metadata:upgrade_log:plugin', 'version' => 'privacy:metadata:upgrade_log:version', 'targetversion' => 'privacy:metadata:upgrade_log:targetversion', 'info' => 'privacy:metadata:upgrade_log:info', 'details' => 'privacy:metadata:upgrade_log:details', 'backtrace' => 'privacy:metadata:upgrade_log:backtrace', 'userid' => 'privacy:metadata:upgrade_log:userid', 'timemodified' => 'privacy:metadata:upgrade_log:timemodified', ], 'privacy:metadata:upgrade_log'); // The task_adhoc includes information about pending adhoc tasks, some of which may be run as a user. // These are removed as the task completes. $collection->add_database_table('task_adhoc', [ 'component' => 'privacy:metadata:task_adhoc:component', 'nextruntime' => 'privacy:metadata:task_adhoc:nextruntime', 'userid' => 'privacy:metadata:task_adhoc:userid', ], 'privacy:metadata:task_adhoc'); // The task_log table stores debugging data for tasks. // These are cleaned regularly and intended purely for debugging. $collection->add_database_table('task_log', [ 'component' => 'privacy:metadata:task_log:component', 'userid' => 'privacy:metadata:task_log:userid', ], 'privacy:metadata:task_log'); // The events_queue includes information about pending events tasks. // These are stored for short periods whilst being processed into other locations. $collection->add_database_table('events_queue', [ 'eventdata' => 'privacy:metadata:events_queue:eventdata', 'stackdump' => 'privacy:metadata:events_queue:stackdump', 'userid' => 'privacy:metadata:events_queue:userid', 'timecreated' => 'privacy:metadata:events_queue:timecreated', ], 'privacy:metadata:events_queue'); // The log table is defined in core but used in logstore_legacy. $collection->add_database_table('log', [ 'time' => 'privacy:metadata:log:time', 'userid' => 'privacy:metadata:log:userid', 'ip' => 'privacy:metadata:log:ip', 'action' => 'privacy:metadata:log:action', 'url' => 'privacy:metadata:log:url', 'info' => 'privacy:metadata:log:info' ], 'privacy:metadata:log'); 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 { return new 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) { // Don't add any user. } /** * 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) { // None of the core tables should be exported. } /** * Delete all data for all users in the specified context. * * @param context $context The specific context to delete data for. */ public static function delete_data_for_all_users_in_context(\context $context) { // None of the the data from these tables should be deleted. } /** * 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) { // None of the the data from these tables should be deleted. // Note: Although it may be tempting to delete the adhoc task data, do not do so. // The delete process is run as an adhoc task. } /** * Delete multiple users within a single context. * * @param approved_userlist $userlist The approved context and user information to delete information for. */ public static function delete_data_for_users(approved_userlist $userlist) { // None of the the data from these tables should be deleted. // Note: Although it may be tempting to delete the adhoc task data, do not do so. // The delete process is run as an adhoc task. } }