diff --git a/enrol/flatfile/classes/privacy/provider.php b/enrol/flatfile/classes/privacy/provider.php
index 93e5d831791..f83f5678c20 100644
--- a/enrol/flatfile/classes/privacy/provider.php
+++ b/enrol/flatfile/classes/privacy/provider.php
@@ -13,22 +13,29 @@
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
+
/**
* Privacy Subsystem implementation for enrol_flatfile.
*
* @package enrol_flatfile
+ * @category privacy
* @copyright 2018 Carlos Escobedo
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
+
namespace enrol_flatfile\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;
use core_privacy\local\request\transform;
defined('MOODLE_INTERNAL') || die();
+
/**
* Privacy Subsystem for enrol_flatfile implementing null_provider.
*
@@ -37,7 +44,8 @@ defined('MOODLE_INTERNAL') || die();
*/
class provider implements
\core_privacy\local\metadata\provider,
- \core_privacy\local\request\plugin\provider {
+ \core_privacy\local\request\plugin\provider,
+ \core_privacy\local\request\core_userlist_provider {
/**
* Returns meta data about this system.
@@ -75,6 +83,23 @@ class provider implements
return $contextlist->add_from_sql($sql, $params);
}
+ /**
+ * 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->contextlevel != CONTEXT_COURSE) {
+ return;
+ }
+
+ $sql = "SELECT userid FROM {enrol_flatfile} WHERE courseid = ?";
+ $params = [$context->instanceid];
+ $userlist->add_from_sql('userid', $sql, $params);
+ }
+
/**
* Export all user data for the specified user, in the specified contexts.
*
@@ -146,7 +171,7 @@ class provider implements
* @param approved_contextlist $contextlist The approved contexts and user information to delete information for.
*/
public static function delete_data_for_user(approved_contextlist $contextlist) {
- // Only delete data from contexts which are at the COURSE_MODULE contextlevel.
+ // Only delete data from contexts which are at the CONTEXT_COURSE contextlevel.
$contexts = self::validate_contextlist_contexts($contextlist);
if (empty($contexts)) {
return;
@@ -165,6 +190,28 @@ class provider implements
$DB->delete_records_select('enrol_flatfile', $sql, $params);
}
+ /**
+ * 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->contextlevel != CONTEXT_COURSE) {
+ return;
+ }
+
+ $userids = $userlist->get_userids();
+
+ list($insql, $inparams) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED);
+ $params = array_merge(['courseid' => $context->instanceid], $inparams);
+ $sql = "courseid = :courseid AND userid $insql";
+ $DB->delete_records_select('enrol_flatfile', $sql, $params);
+ }
+
/**
* Simple sanity check on the contextlist contexts, making sure they're of CONTEXT_COURSE contextlevel.
*
diff --git a/enrol/flatfile/tests/privacy_provider_test.php b/enrol/flatfile/tests/privacy_provider_test.php
index 5ad5dbbf175..d2b4b153072 100644
--- a/enrol/flatfile/tests/privacy_provider_test.php
+++ b/enrol/flatfile/tests/privacy_provider_test.php
@@ -199,6 +199,57 @@ class enrol_flatfile_privacy_testcase extends provider_testcase {
$this->assertEquals(0, $DB->count_records('enrol_flatfile', ['userid' => $this->user1->id]));
}
+ /**
+ * Test for provider::get_users_in_context().
+ */
+ public function test_get_users_in_context() {
+ global $DB;
+ // Create, via flatfile syncing, the future enrolments entries in the enrol_flatfile table.
+ $this->create_future_enrolments();
+
+ $this->assertEquals(3, $DB->count_records('enrol_flatfile'));
+
+ // We expect to see 1 entry for course1, and that's user1.
+ $userlist = new \core_privacy\local\request\userlist($this->coursecontext1, 'enrol_flatfile');
+ provider::get_users_in_context($userlist);
+ $this->assertEquals([$this->user1->id], $userlist->get_userids());
+
+ // And 1 for course2 which is for user2.
+ $userlist = new \core_privacy\local\request\userlist($this->coursecontext2, 'enrol_flatfile');
+ provider::get_users_in_context($userlist);
+ $this->assertEquals([$this->user2->id], $userlist->get_userids());
+
+ // And 1 for course3 which is for user1 again.
+ $userlist = new \core_privacy\local\request\userlist($this->coursecontext3, 'enrol_flatfile');
+ provider::get_users_in_context($userlist);
+ $this->assertEquals([$this->user1->id], $userlist->get_userids());
+ }
+
+ /**
+ * Test for provider::delete_data_for_users().
+ */
+ public function test_delete_data_for_users() {
+ global $DB;
+
+ // Create, via flatfile syncing, the future enrolments entries in the enrol_flatfile table.
+ $this->create_future_enrolments();
+
+ // Verify we have 1 future enrolment for user 1.
+ $userlist = new \core_privacy\local\request\userlist($this->coursecontext1, 'enrol_flatfile');
+ provider::get_users_in_context($userlist);
+ $this->assertEquals([$this->user1->id], $userlist->get_userids());
+
+ $approveduserlist = new \core_privacy\local\request\approved_userlist($this->coursecontext1, 'enrol_flatfile',
+ [$this->user1->id]);
+
+ // Now, run delete for user and confirm that the record is removed.
+ provider::delete_data_for_users($approveduserlist);
+ $userlist = new \core_privacy\local\request\userlist($this->coursecontext1, 'enrol_flatfile');
+ provider::get_users_in_context($userlist);
+ $this->assertEquals(0, $userlist->count());
+ $this->assertEquals(0, $DB->count_records('enrol_flatfile', ['courseid' => $this->coursecontext1->instanceid]));
+ }
+
/**
* Helper to sync a file and create the enrol_flatfile DB entries, for use with the get, export and delete tests.
*/