diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index a77ccf2a8e1c8cbabd0be437f5da246282e4d8eb..c042f7bd2e3597ee103827e6b019a7352cedbd5c 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -26,7 +26,10 @@ namespace tool_lifecycle\privacy; 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\context; use core_privacy\local\request\contextlist; +use core_privacy\local\request\userlist; use core_privacy\local\request\writer; defined('MOODLE_INTERNAL') || die(); @@ -37,8 +40,15 @@ defined('MOODLE_INTERNAL') || die(); * @copyright 2019 Justus Dieckmann WWU * @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\plugin\provider{ +class provider implements + // This plugin has data. + \core_privacy\local\metadata\provider, + + // This plugin currently implements the original plugin_provider interface. + \core_privacy\local\request\plugin\provider, + + // This plugin is capable of determining which users have data within it. + \core_privacy\local\request\core_userlist_provider { /** * Returns meta data about this system. @@ -84,7 +94,7 @@ class provider implements \core_privacy\local\metadata\provider, public static function export_user_data(approved_contextlist $contextlist) { global $DB; foreach ($contextlist->get_contexts() as $context) { - if ($context->contextlevel === CONTEXT_SYSTEM) { + if ($context instanceof \context_system) { $records = $DB->get_records('tool_lifecycle_action_log', array('userid' => $contextlist->get_user()->id)); $writer = writer::with_context($contextlist->current()); foreach ($records as $record) { @@ -125,4 +135,36 @@ class provider implements \core_privacy\local\metadata\provider, } } } + + /** + * 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(); + if ($context instanceof \context_system) { + $sql = "SELECT userid + FROM {tool_lifecycle_action_log}"; + $userlist->add_from_sql('userid', $sql, array()); + } + } + + /** + * 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) { + global $DB; + $context = $userlist->get_context(); + if ($context instanceof \context_system) { + list($insql, $params) = $DB->get_in_or_equal($userlist->get_userids()); + $sql = "UPDATE {tool_lifecycle_action_log} + SET userid = -1 + WHERE $insql"; + + $DB->execute($sql, $params); + } + } }