MDL-63926 block_recentlyaccesseditems: Support user removal by context
authorMichael Hawkins <michaelh@moodle.com>
Mon, 12 Nov 2018 04:19:51 +0000 (12:19 +0800)
committerMichael Hawkins <michaelh@moodle.com>
Wed, 14 Nov 2018 03:14:57 +0000 (11:14 +0800)
Also fixed the provider interface type. This is self contained, so is
not a subsystem provider. It was also already set up as a plugin
provider, just not defined as such.

blocks/recentlyaccesseditems/classes/privacy/provider.php

index f4b460a..7eb7235 100644 (file)
@@ -29,7 +29,9 @@ defined('MOODLE_INTERNAL') || die();
 use \core_privacy\local\metadata\collection;
 use \core_privacy\local\request\transform;
 use \core_privacy\local\request\contextlist;
+use \core_privacy\local\request\userlist;
 use \core_privacy\local\request\approved_contextlist;
+use \core_privacy\local\request\approved_userlist;
 use \core_privacy\local\request\writer;
 
 /**
@@ -39,7 +41,10 @@ use \core_privacy\local\request\writer;
  * @copyright  2018 Victor Deniz <victor@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\provider {
+class provider implements
+        \core_privacy\local\metadata\provider,
+        \core_privacy\local\request\core_userlist_provider,
+        \core_privacy\local\request\plugin\provider {
 
     /**
      * Returns information about the user data stored in this component.
@@ -80,6 +85,25 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l
         return $contextlist;
     }
 
+    /**
+     * Get the list of users within a specific 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) {
+        global $DB;
+
+        $context = $userlist->get_context();
+
+        if (!$context instanceof \context_user) {
+            return;
+        }
+
+        if ($DB->record_exists('block_recentlyaccesseditems', ['userid' => $context->instanceid])) {
+            $userlist->add_user($context->instanceid);
+        }
+    }
+
     /**
      * Export all user data for the specified user, in the specified contexts.
      *
@@ -151,4 +175,19 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l
             }
         }
     }
-}
\ No newline at end of file
+
+    /**
+     * 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_user && in_array($context->instanceid, $userlist->get_userids())) {
+            $DB->delete_records('block_recentlyaccesseditems', ['userid' => $context->instanceid]);
+        }
+    }
+}