MDL-63924 privacy: Add shared user providers to subsytsems
authorAndrew Nicols <andrew@nicols.co.uk>
Thu, 8 Nov 2018 07:32:39 +0000 (15:32 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Thu, 8 Nov 2018 13:26:18 +0000 (21:26 +0800)
20 files changed:
admin/tool/dataprivacy/classes/metadata_registry.php
admin/tool/log/classes/local/privacy/logstore_userlist_provider.php
cache/classes/privacy/provider.php
comment/classes/privacy/provider.php
completion/classes/privacy/provider.php
files/classes/privacy/provider.php
grade/grading/classes/privacy/gradingform_provider_v2.php
group/classes/privacy/provider.php
lib/userkey/classes/privacy/provider.php
mod/assign/classes/privacy/assignfeedback_user_provider.php
mod/assign/classes/privacy/assignsubmission_user_provider.php
mod/data/classes/privacy/datafield_provider.php
mod/workshop/classes/privacy/workshopform_provider.php
plagiarism/classes/privacy/plagiarims_user_provider.php
plagiarism/classes/privacy/provider.php
portfolio/classes/privacy/portfolio_provider.php
portfolio/classes/privacy/provider.php
question/classes/privacy/provider.php
rating/classes/privacy/provider.php
tag/classes/privacy/provider.php

index 3d25904..6526480 100644 (file)
@@ -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;
+                        }
                     }
                 }
 
index 44ace57..c63e726 100644 (file)
@@ -36,7 +36,10 @@ defined('MOODLE_INTERNAL') || die();
  * @author     Adrian Greeve <adriangreeve.com>
  * @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.
index 20cc83f..2bbb07e 100644 (file)
@@ -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.
index 7ca3b46..d4f1986 100644 (file)
@@ -37,7 +37,11 @@ use \core_privacy\local\request\userlist;
  * @copyright  2018 Adrian Greeve <adrian@moodle.com>
  * @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.
index 53464bd..a1ec90b 100644 (file)
@@ -41,7 +41,11 @@ require_once($CFG->dirroot . '/comment/lib.php');
  * @copyright  2018 Adrian Greeve <adrian@moodle.com>
  * @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.
index c2da154..efae2a9 100644 (file)
@@ -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.
index fa71f13..1c01571 100644 (file)
@@ -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.
index ee2344d..86e441c 100644 (file)
@@ -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.
index cfefb72..72bd9e9 100644 (file)
@@ -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.
index 9048430..fe70eb3 100644 (file)
@@ -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
+}
index 1a9331c..663428b 100644 (file)
@@ -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
+}
index bc4f407..424e498 100644 (file)
@@ -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.
index 152ead3..ba225c4 100644 (file)
@@ -33,7 +33,10 @@ defined('MOODLE_INTERNAL') || die();
  * @copyright 2018 David Mudr├ík <david@moodle.com>
  * @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.
index 6403696..426688b 100644 (file)
@@ -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.
index e1b08c7..b2ef9a3 100644 (file)
@@ -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.
index 8d75791..fcc0b16 100644 (file)
@@ -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.
index 02df44e..a1edfe2 100644 (file)
@@ -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.
index ba690f4..9842061 100644 (file)
@@ -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
 {
 
     /**
index 6ce9905..e1d87af 100644 (file)
@@ -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.
index 212b27f..0099de3 100644 (file)
@@ -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.