From c96cd71102795f6948a53a50cea284d6e39a6806 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Thu, 8 Nov 2018 15:32:39 +0800 Subject: [PATCH] MDL-63924 privacy: Add shared user providers to subsytsems --- admin/tool/dataprivacy/classes/metadata_registry.php | 8 +++++++- .../tool/log/classes/local/privacy/logstore_userlist_provider.php | 5 ++++- cache/classes/privacy/provider.php | 4 +++- comment/classes/privacy/provider.php | 6 +++++- completion/classes/privacy/provider.php | 6 +++++- files/classes/privacy/provider.php | 3 ++- grade/grading/classes/privacy/gradingform_provider_v2.php | 4 +++- group/classes/privacy/provider.php | 4 +++- lib/userkey/classes/privacy/provider.php | 6 ++++-- mod/assign/classes/privacy/assignfeedback_user_provider.php | 7 +++++-- mod/assign/classes/privacy/assignsubmission_user_provider.php | 7 +++++-- mod/data/classes/privacy/datafield_provider.php | 8 +++++++- mod/workshop/classes/privacy/workshopform_provider.php | 5 ++++- plagiarism/classes/privacy/plagiarims_user_provider.php | 3 ++- plagiarism/classes/privacy/provider.php | 4 +++- portfolio/classes/privacy/portfolio_provider.php | 5 ++++- portfolio/classes/privacy/provider.php | 4 +++- question/classes/privacy/provider.php | 5 ++++- rating/classes/privacy/provider.php | 4 +++- tag/classes/privacy/provider.php | 5 ++++- 20 files changed, 80 insertions(+), 23 deletions(-) diff --git a/admin/tool/dataprivacy/classes/metadata_registry.php b/admin/tool/dataprivacy/classes/metadata_registry.php index 3d25904188e..65264807acb 100644 --- a/admin/tool/dataprivacy/classes/metadata_registry.php +++ b/admin/tool/dataprivacy/classes/metadata_registry.php @@ -87,11 +87,17 @@ class metadata_registry { $internaldata['deprecated'] = true; } - // Check that the userlist provider is implemented. + // Check that the core_userlist_provider is implemented for all user data providers. if ($componentclass instanceof \core_privacy\local\request\core_user_data_provider && !$componentclass instanceof \core_privacy\local\request\core_userlist_provider) { $internaldata['userlistnoncompliance'] = true; } + + // Check that any type of userlist_provider is implemented for all shared data providers. + if ($componentclass instanceof \core_privacy\local\request\shared_data_provider + && !$componentclass instanceof \core_privacy\local\request\userlist_provider) { + $internaldata['userlistnoncompliance'] = true; + } } } diff --git a/admin/tool/log/classes/local/privacy/logstore_userlist_provider.php b/admin/tool/log/classes/local/privacy/logstore_userlist_provider.php index 44ace571db0..c63e726d23b 100644 --- a/admin/tool/log/classes/local/privacy/logstore_userlist_provider.php +++ b/admin/tool/log/classes/local/privacy/logstore_userlist_provider.php @@ -36,7 +36,10 @@ defined('MOODLE_INTERNAL') || die(); * @author Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -interface logstore_userlist_provider extends \core_privacy\local\request\plugin\subplugin_provider { +interface logstore_userlist_provider extends + \core_privacy\local\request\plugin\subplugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Add user IDs that contain user information for the specified context. diff --git a/cache/classes/privacy/provider.php b/cache/classes/privacy/provider.php index 20cc83f3a2a..2bbb07e88dd 100644 --- a/cache/classes/privacy/provider.php +++ b/cache/classes/privacy/provider.php @@ -39,7 +39,9 @@ class provider implements \core_privacy\local\metadata\provider, // The cache subsystem stores data on behalf of other components. - \core_privacy\local\request\subsystem\plugin_provider { + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/comment/classes/privacy/provider.php b/comment/classes/privacy/provider.php index 7ca3b461db1..d4f19866c14 100644 --- a/comment/classes/privacy/provider.php +++ b/comment/classes/privacy/provider.php @@ -37,7 +37,11 @@ use \core_privacy\local\request\userlist; * @copyright 2018 Adrian Greeve * @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\plugin_provider { +class provider implements + \core_privacy\local\metadata\provider, + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/completion/classes/privacy/provider.php b/completion/classes/privacy/provider.php index 53464bd268b..a1ec90bfe6e 100644 --- a/completion/classes/privacy/provider.php +++ b/completion/classes/privacy/provider.php @@ -41,7 +41,11 @@ require_once($CFG->dirroot . '/comment/lib.php'); * @copyright 2018 Adrian Greeve * @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\plugin_provider { +class provider implements + \core_privacy\local\metadata\provider, + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/files/classes/privacy/provider.php b/files/classes/privacy/provider.php index c2da1548cb8..efae2a97fd7 100644 --- a/files/classes/privacy/provider.php +++ b/files/classes/privacy/provider.php @@ -48,7 +48,8 @@ class provider implements \core_privacy\local\request\subsystem\plugin_provider, \core_privacy\local\request\core_userlist_provider, // We store a userkey for token-based file access. - \core_privacy\local\request\subsystem\provider { + \core_privacy\local\request\subsystem\provider, + \core_privacy\local\request\shared_userlist_provider { /** * Returns metadata. diff --git a/grade/grading/classes/privacy/gradingform_provider_v2.php b/grade/grading/classes/privacy/gradingform_provider_v2.php index fa71f135782..1c01571f601 100644 --- a/grade/grading/classes/privacy/gradingform_provider_v2.php +++ b/grade/grading/classes/privacy/gradingform_provider_v2.php @@ -26,7 +26,9 @@ namespace core_grading\privacy; defined('MOODLE_INTERNAL') || die(); interface gradingform_provider_v2 extends - \core_privacy\local\request\plugin\subsystem_provider { + \core_privacy\local\request\plugin\subsystem_provider, + \core_privacy\local\request\shared_userlist_provider +{ /** * Export user data relating to an instance ID. diff --git a/group/classes/privacy/provider.php b/group/classes/privacy/provider.php index ee2344dc879..86e441cc24a 100644 --- a/group/classes/privacy/provider.php +++ b/group/classes/privacy/provider.php @@ -51,7 +51,9 @@ class provider implements \core_privacy\local\request\subsystem\plugin_provider, // This plugin is capable of determining which users have data within it. - \core_privacy\local\request\core_userlist_provider { + \core_privacy\local\request\core_userlist_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/lib/userkey/classes/privacy/provider.php b/lib/userkey/classes/privacy/provider.php index cfefb724efc..72bd9e95809 100644 --- a/lib/userkey/classes/privacy/provider.php +++ b/lib/userkey/classes/privacy/provider.php @@ -39,9 +39,11 @@ use core_privacy\local\request\userlist; * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements - \core_privacy\local\metadata\provider, + \core_privacy\local\metadata\provider, - \core_privacy\local\request\subsystem\plugin_provider { + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/mod/assign/classes/privacy/assignfeedback_user_provider.php b/mod/assign/classes/privacy/assignfeedback_user_provider.php index 9048430a3bb..fe70eb36be0 100644 --- a/mod/assign/classes/privacy/assignfeedback_user_provider.php +++ b/mod/assign/classes/privacy/assignfeedback_user_provider.php @@ -28,7 +28,10 @@ namespace mod_assign\privacy; defined('MOODLE_INTERNAL') || die(); -interface assignfeedback_user_provider extends \core_privacy\local\request\plugin\subplugin_provider { +interface assignfeedback_user_provider extends + \core_privacy\local\request\plugin\subplugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * If you have tables that contain userids and you can generate entries in your tables without creating an @@ -49,4 +52,4 @@ interface assignfeedback_user_provider extends \core_privacy\local\request\plugi */ public static function delete_feedback_for_grades(assign_plugin_request_data $deletedata); -} \ No newline at end of file +} diff --git a/mod/assign/classes/privacy/assignsubmission_user_provider.php b/mod/assign/classes/privacy/assignsubmission_user_provider.php index 1a9331cd0e9..663428b55e9 100644 --- a/mod/assign/classes/privacy/assignsubmission_user_provider.php +++ b/mod/assign/classes/privacy/assignsubmission_user_provider.php @@ -30,7 +30,10 @@ use core_privacy\local\request\userlist; defined('MOODLE_INTERNAL') || die(); -interface assignsubmission_user_provider extends \core_privacy\local\request\plugin\subplugin_provider { +interface assignsubmission_user_provider extends + \core_privacy\local\request\plugin\subplugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * If you have tables that contain userids and you can generate entries in your tables without creating an @@ -51,4 +54,4 @@ interface assignsubmission_user_provider extends \core_privacy\local\request\plu */ public static function delete_submissions(assign_plugin_request_data $deletedata); -} \ No newline at end of file +} diff --git a/mod/data/classes/privacy/datafield_provider.php b/mod/data/classes/privacy/datafield_provider.php index bc4f407a780..424e4987a2e 100644 --- a/mod/data/classes/privacy/datafield_provider.php +++ b/mod/data/classes/privacy/datafield_provider.php @@ -33,7 +33,13 @@ defined('MOODLE_INTERNAL') || die(); * @copyright 2018 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -interface datafield_provider extends \core_privacy\local\request\plugin\subplugin_provider { +interface datafield_provider extends + \core_privacy\local\request\plugin\subplugin_provider, + + // The data subplugins do not need to do anything themselves for the shared_userlist. + // This is all handled by the parent plugin. + \core_privacy\local\request\shared_userlist_provider + { /** * Exports data about one record in {data_content} table. diff --git a/mod/workshop/classes/privacy/workshopform_provider.php b/mod/workshop/classes/privacy/workshopform_provider.php index 152ead34ec8..ba225c4da13 100644 --- a/mod/workshop/classes/privacy/workshopform_provider.php +++ b/mod/workshop/classes/privacy/workshopform_provider.php @@ -33,7 +33,10 @@ defined('MOODLE_INTERNAL') || die(); * @copyright 2018 David Mudrák * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -interface workshopform_provider extends \core_privacy\local\request\plugin\subplugin_provider { +interface workshopform_provider extends + \core_privacy\local\request\plugin\subplugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Return details of the filled assessment form. diff --git a/plagiarism/classes/privacy/plagiarims_user_provider.php b/plagiarism/classes/privacy/plagiarims_user_provider.php index 64036966134..426688bb75f 100644 --- a/plagiarism/classes/privacy/plagiarims_user_provider.php +++ b/plagiarism/classes/privacy/plagiarims_user_provider.php @@ -34,7 +34,8 @@ defined('MOODLE_INTERNAL') || die(); */ interface plagiarism_user_provider extends // The plagiarism_provider should be implemented by plugins which only provide information to a subsystem. - \core_privacy\local\request\plugin\subsystem_provider { + \core_privacy\local\request\plugin\subsystem_provider, + \core_privacy\local\request\shared_userlist_provider { /** * Delete all user information for the provided users and context. diff --git a/plagiarism/classes/privacy/provider.php b/plagiarism/classes/privacy/provider.php index e1b08c779ed..b2ef9a3335a 100644 --- a/plagiarism/classes/privacy/provider.php +++ b/plagiarism/classes/privacy/provider.php @@ -40,7 +40,9 @@ class provider implements \core_privacy\local\metadata\provider, // The Plagiarism subsystem will be called by other components and will forward requests to each plagiarism plugin implementing its APIs. - \core_privacy\local\request\subsystem\plugin_provider { + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. diff --git a/portfolio/classes/privacy/portfolio_provider.php b/portfolio/classes/privacy/portfolio_provider.php index 8d757918e8f..fcc0b16aef7 100644 --- a/portfolio/classes/privacy/portfolio_provider.php +++ b/portfolio/classes/privacy/portfolio_provider.php @@ -34,7 +34,10 @@ defined('MOODLE_INTERNAL') || die(); */ interface portfolio_provider extends // The portfolio_provider should be implemented by plugins which only provide information to a subsystem. - \core_privacy\local\request\plugin\subsystem_provider { + \core_privacy\local\request\plugin\subsystem_provider, + + // The implementation for prtfolios is handled in the subsystem itself. + \core_privacy\local\request\shared_userlist_provider { /** * Export all portfolio data from each portfolio plugin for the specified userid and context. diff --git a/portfolio/classes/privacy/provider.php b/portfolio/classes/privacy/provider.php index 02df44e6b05..a1edfe26962 100644 --- a/portfolio/classes/privacy/provider.php +++ b/portfolio/classes/privacy/provider.php @@ -45,7 +45,9 @@ class provider implements \core_privacy\local\request\plugin\provider, \core_privacy\local\request\core_userlist_provider, // The portfolio subsystem will be called by other components. - \core_privacy\local\request\subsystem\plugin_provider { + \core_privacy\local\request\subsystem\plugin_provider, + + \core_privacy\local\request\shared_userlist_provider { /** * Returns meta data about this system. diff --git a/question/classes/privacy/provider.php b/question/classes/privacy/provider.php index ba690f42ef4..9842061e0bb 100644 --- a/question/classes/privacy/provider.php +++ b/question/classes/privacy/provider.php @@ -61,7 +61,10 @@ class provider implements \core_privacy\local\request\subsystem\plugin_provider, // This plugin is capable of determining which users have data within it. - \core_privacy\local\request\core_userlist_provider + \core_privacy\local\request\core_userlist_provider, + + // This plugin is capable of determining which users have data within it for the plugins it provides data to. + \core_privacy\local\request\shared_userlist_provider { /** diff --git a/rating/classes/privacy/provider.php b/rating/classes/privacy/provider.php index 6ce990590c7..e1d87afbfca 100644 --- a/rating/classes/privacy/provider.php +++ b/rating/classes/privacy/provider.php @@ -46,7 +46,9 @@ class provider implements // as a result. // The ratings subsystem provides a data service to other components. - \core_privacy\local\request\subsystem\plugin_provider { + \core_privacy\local\request\subsystem\plugin_provider, + \core_privacy\local\request\shared_userlist_provider + { /** * Returns metadata about the ratings subsystem. diff --git a/tag/classes/privacy/provider.php b/tag/classes/privacy/provider.php index 212b27f9a6d..0099de38215 100644 --- a/tag/classes/privacy/provider.php +++ b/tag/classes/privacy/provider.php @@ -51,7 +51,10 @@ class provider implements \core_privacy\local\request\core_userlist_provider, // The tag subsystem may have data that belongs to this user. - \core_privacy\local\request\plugin\provider { + \core_privacy\local\request\plugin\provider, + + \core_privacy\local\request\shared_userlist_provider + { /** * Returns meta data about this system. -- 2.11.4.GIT