From e1baf5e1d6051b585bc919e64dd34f1c4452851d Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Mon, 14 May 2018 12:46:55 +0800 Subject: [PATCH] MDL-62428 core: fix incorrect early return in privacy providers --- backup/tests/privacy_provider_test.php | 2 +- backup/util/ui/classes/privacy/provider.php | 2 +- cohort/classes/privacy/provider.php | 2 +- cohort/tests/privacy_test.php | 5 ++++- enrol/lti/classes/privacy/provider.php | 2 +- enrol/lti/tests/privacy_provider_test.php | 4 ++-- mod/choice/classes/privacy/provider.php | 2 +- mod/choice/tests/privacy_provider_test.php | 2 +- mod/lti/classes/privacy/provider.php | 2 +- mod/lti/tests/privacy_provider_test.php | 2 +- 10 files changed, 14 insertions(+), 11 deletions(-) diff --git a/backup/tests/privacy_provider_test.php b/backup/tests/privacy_provider_test.php index a4ae7924baf..d4a2ef8a7fc 100644 --- a/backup/tests/privacy_provider_test.php +++ b/backup/tests/privacy_provider_test.php @@ -169,7 +169,7 @@ class core_backup_privacy_provider_testcase extends \core_privacy\tests\provider $coursecontext = context_course::instance($this->course->id); $contextlist = new \core_privacy\local\request\approved_contextlist($this->user, 'core_backup', - [$coursecontext->id]); + [context_system::instance()->id, $coursecontext->id]); provider::delete_data_for_user($contextlist); // After deletion, the backup operation for the user should have been deleted. diff --git a/backup/util/ui/classes/privacy/provider.php b/backup/util/ui/classes/privacy/provider.php index f9cdf150219..cdffbc461e3 100644 --- a/backup/util/ui/classes/privacy/provider.php +++ b/backup/util/ui/classes/privacy/provider.php @@ -163,7 +163,7 @@ class provider implements $userid = $contextlist->get_user()->id; foreach ($contextlist->get_contexts() as $context) { if (!$context instanceof \context_course) { - return; + continue; } $DB->delete_records('backup_controllers', ['itemid' => $context->instanceid, 'userid' => $userid]); diff --git a/cohort/classes/privacy/provider.php b/cohort/classes/privacy/provider.php index 4e625e21d3c..7b8bb62f6be 100644 --- a/cohort/classes/privacy/provider.php +++ b/cohort/classes/privacy/provider.php @@ -167,7 +167,7 @@ class provider implements $userid = $contextlist->get_user()->id; foreach ($contextlist->get_contexts() as $context) { if (!$context instanceof \context_system && !$context instanceof \context_coursecat) { - return; + continue; } static::delete_data($context, $userid); } diff --git a/cohort/tests/privacy_test.php b/cohort/tests/privacy_test.php index eba3d650f13..ee812e4236b 100644 --- a/cohort/tests/privacy_test.php +++ b/cohort/tests/privacy_test.php @@ -202,7 +202,10 @@ class core_cohort_testcase extends provider_testcase { $this->assertEquals(5, $count); $contextlist = provider::get_contexts_for_userid($user1->id); - $approvedcontextlist = new approved_contextlist($user1, 'cohort', $contextlist->get_contextids()); + $contexts = []; + $contexts[] = \context_user::instance($user1->id)->id; + $contexts = array_merge($contexts, $contextlist->get_contextids()); + $approvedcontextlist = new approved_contextlist($user1, 'cohort', $contexts); provider::delete_data_for_user($approvedcontextlist); // After deletion, the cohort_members entries for the first student should have been deleted. diff --git a/enrol/lti/classes/privacy/provider.php b/enrol/lti/classes/privacy/provider.php index c8a43b0af10..a6ce277f463 100644 --- a/enrol/lti/classes/privacy/provider.php +++ b/enrol/lti/classes/privacy/provider.php @@ -156,7 +156,7 @@ class provider implements foreach ($contextlist->get_contexts() as $context) { if (!($context instanceof \context_course || $context instanceof \context_module)) { - return; + continue; } $enrolltitools = $DB->get_fieldset_select('enrol_lti_tools', 'id', 'contextid = :contextid', diff --git a/enrol/lti/tests/privacy_provider_test.php b/enrol/lti/tests/privacy_provider_test.php index 034b683d865..01cdc28aa8f 100644 --- a/enrol/lti/tests/privacy_provider_test.php +++ b/enrol/lti/tests/privacy_provider_test.php @@ -158,8 +158,8 @@ class enrol_lti_privacy_provider_testcase extends \core_privacy\tests\provider_t $count = $DB->count_records('enrol_lti_users'); $this->assertEquals(4, $count); - $contextlist = new \core_privacy\local\request\approved_contextlist($this->user, 'core_backup', - [$coursecontext->id, $cmcontext->id]); + $contextlist = new \core_privacy\local\request\approved_contextlist($this->user, 'enrol_lti', + [context_system::instance()->id, $coursecontext->id, $cmcontext->id]); provider::delete_data_for_user($contextlist); $ltiusers = $DB->get_records('enrol_lti_users'); diff --git a/mod/choice/classes/privacy/provider.php b/mod/choice/classes/privacy/provider.php index 8d094fc9fb7..28a13c2c16d 100644 --- a/mod/choice/classes/privacy/provider.php +++ b/mod/choice/classes/privacy/provider.php @@ -210,7 +210,7 @@ class provider implements foreach ($contextlist->get_contexts() as $context) { if (!$context instanceof \context_module) { - return; + continue; } $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); $DB->delete_records('choice_answers', ['choiceid' => $instanceid, 'userid' => $userid]); diff --git a/mod/choice/tests/privacy_provider_test.php b/mod/choice/tests/privacy_provider_test.php index 44a7e62ab1a..fea7ccfc90c 100644 --- a/mod/choice/tests/privacy_provider_test.php +++ b/mod/choice/tests/privacy_provider_test.php @@ -208,7 +208,7 @@ class mod_choice_privacy_provider_testcase extends \core_privacy\tests\provider_ $context1 = context_module::instance($cm1->id); $context2 = context_module::instance($cm2->id); $contextlist = new \core_privacy\local\request\approved_contextlist($this->student, 'choice', - [$context1->id, $context2->id]); + [context_system::instance()->id, $context1->id, $context2->id]); provider::delete_data_for_user($contextlist); // After deletion, the choice answers for the first student should have been deleted. diff --git a/mod/lti/classes/privacy/provider.php b/mod/lti/classes/privacy/provider.php index 1afabf68018..03309e83b76 100644 --- a/mod/lti/classes/privacy/provider.php +++ b/mod/lti/classes/privacy/provider.php @@ -182,7 +182,7 @@ class provider implements $userid = $contextlist->get_user()->id; foreach ($contextlist->get_contexts() as $context) { if (!$context instanceof \context_module) { - return; + continue; } $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); $DB->delete_records('lti_submission', ['ltiid' => $instanceid, 'userid' => $userid]); diff --git a/mod/lti/tests/privacy_provider_test.php b/mod/lti/tests/privacy_provider_test.php index 63a545c3379..e888927a71f 100644 --- a/mod/lti/tests/privacy_provider_test.php +++ b/mod/lti/tests/privacy_provider_test.php @@ -271,7 +271,7 @@ class mod_lti_privacy_provider_testcase extends \core_privacy\tests\provider_tes $context = \context_module::instance($lti->cmid); $contextlist = new \core_privacy\local\request\approved_contextlist($user1, 'lti', - [$context->id]); + [context_system::instance()->id, $context->id]); provider::delete_data_for_user($contextlist); // After deletion the lti submission for the first user should have been deleted.