diff --git a/blocks/rss_client/classes/privacy/provider.php b/blocks/rss_client/classes/privacy/provider.php index cffb3c51f83..ddb512283dc 100644 --- a/blocks/rss_client/classes/privacy/provider.php +++ b/blocks/rss_client/classes/privacy/provider.php @@ -108,7 +108,9 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l * @param context $context A user context. */ public static function delete_data_for_all_users_in_context(\context $context) { - static::delete_data($context->instanceid); + if ($context instanceof \context_user) { + static::delete_data($context->instanceid); + } } /** diff --git a/calendar/classes/privacy/provider.php b/calendar/classes/privacy/provider.php index 3e4131f2fe1..d462084aa08 100644 --- a/calendar/classes/privacy/provider.php +++ b/calendar/classes/privacy/provider.php @@ -188,12 +188,14 @@ class provider implements } // Delete all Calendar Events in the specified context in batches. - $eventids = array_keys(self::get_calendar_event_ids_by_context($context)); - self::delete_batch_records('event', 'id', $eventids); + if ($eventids = array_keys(self::get_calendar_event_ids_by_context($context))) { + self::delete_batch_records('event', 'id', $eventids); + } // Delete all Calendar Subscriptions in the specified context in batches. - $subscriptionids = array_keys(self::get_calendar_subscription_ids_by_context($context)); - self::delete_batch_records('event_subscriptions', 'id', $subscriptionids); + if ($subscriptionids = array_keys(self::get_calendar_subscription_ids_by_context($context))) { + self::delete_batch_records('event_subscriptions', 'id', $subscriptionids); + } } /** diff --git a/mod/assign/classes/privacy/provider.php b/mod/assign/classes/privacy/provider.php index fe9cd0815af..94684e766f3 100644 --- a/mod/assign/classes/privacy/provider.php +++ b/mod/assign/classes/privacy/provider.php @@ -246,18 +246,8 @@ class provider implements metadataprovider, pluginprovider, preference_provider global $DB; if ($context->contextlevel == CONTEXT_MODULE) { - // Apparently we can't trust anything that comes via the context. - // Go go mega query to find out it we have an assign context that matches an existing assignment. - $sql = "SELECT a.id - FROM {assign} a - JOIN {course_modules} cm ON a.id = cm.instance - JOIN {modules} m ON m.id = cm.module AND m.name = :modulename - JOIN {context} ctx ON ctx.instanceid = cm.id AND ctx.contextlevel = :contextmodule - WHERE ctx.id = :contextid"; - $params = ['modulename' => 'assign', 'contextmodule' => CONTEXT_MODULE, 'contextid' => $context->id]; - $count = $DB->get_field_sql($sql, $params); - // If we have a count over zero then we can proceed. - if ($count > 0) { + $cm = get_coursemodule_from_id('assign', $context->instanceid); + if ($cm) { // Get the assignment related to this context. $assign = new \assign($context, null, null); // What to do first... Get sub plugins to delete their stuff. diff --git a/mod/choice/classes/privacy/provider.php b/mod/choice/classes/privacy/provider.php index 6b3bec89453..de4c5784cb3 100644 --- a/mod/choice/classes/privacy/provider.php +++ b/mod/choice/classes/privacy/provider.php @@ -182,16 +182,13 @@ class provider implements public static function delete_data_for_all_users_in_context(\context $context) { global $DB; - if (empty($context)) { - return; - } - if (!$context instanceof \context_module) { return; } - $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); - $DB->delete_records('choice_answers', ['choiceid' => $instanceid]); + if ($cm = get_coursemodule_from_id('choice', $context->instanceid)) { + $DB->delete_records('choice_answers', ['choiceid' => $cm->instance]); + } } /** diff --git a/mod/forum/classes/privacy/provider.php b/mod/forum/classes/privacy/provider.php index 2b3ffa9d4ca..66e99994189 100644 --- a/mod/forum/classes/privacy/provider.php +++ b/mod/forum/classes/privacy/provider.php @@ -754,19 +754,22 @@ class provider implements } // Get the course module. - $cm = $DB->get_record('course_modules', ['id' => $context->instanceid]); - $forum = $DB->get_record('forum', ['id' => $cm->instance]); + if (!$cm = get_coursemodule_from_id('forum', $context->instanceid)) { + return; + } - $DB->delete_records('forum_track_prefs', ['forumid' => $forum->id]); - $DB->delete_records('forum_subscriptions', ['forum' => $forum->id]); - $DB->delete_records('forum_read', ['forumid' => $forum->id]); + $forumid = $cm->instance; + + $DB->delete_records('forum_track_prefs', ['forumid' => $forumid]); + $DB->delete_records('forum_subscriptions', ['forum' => $forumid]); + $DB->delete_records('forum_read', ['forumid' => $forumid]); // Delete all discussion items. $DB->delete_records_select( 'forum_queue', "discussionid IN (SELECT id FROM {forum_discussions} WHERE forum = :forum)", [ - 'forum' => $forum->id, + 'forum' => $forumid, ] ); @@ -774,12 +777,12 @@ class provider implements 'forum_posts', "discussion IN (SELECT id FROM {forum_discussions} WHERE forum = :forum)", [ - 'forum' => $forum->id, + 'forum' => $forumid, ] ); - $DB->delete_records('forum_discussion_subs', ['forum' => $forum->id]); - $DB->delete_records('forum_discussions', ['forum' => $forum->id]); + $DB->delete_records('forum_discussion_subs', ['forum' => $forumid]); + $DB->delete_records('forum_discussions', ['forum' => $forumid]); // Delete all files from the posts. $fs = get_file_storage(); diff --git a/mod/glossary/classes/privacy/provider.php b/mod/glossary/classes/privacy/provider.php index 0d43966c563..b4fbfa17e75 100644 --- a/mod/glossary/classes/privacy/provider.php +++ b/mod/glossary/classes/privacy/provider.php @@ -248,39 +248,36 @@ class provider implements return; } - $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); - $DB->record_exists('glossary', ['id' => $context->instanceid]); - $DB->delete_records('glossary_entries', ['glossaryid' => $instanceid]); - - if ($context->contextlevel == CONTEXT_MODULE) { - $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); - $DB->record_exists('glossary', ['id' => $context->instanceid]); - - $entries = $DB->get_records('glossary_entries', ['glossaryid' => $instanceid]); - foreach ($entries as $entry) { - // Delete related entry categories. - $DB->delete_records('glossary_entries_categories', ['entryid' => $entry->id]); - - // Delete related entry aliases. - $DB->delete_records('glossary_alias', ['entryid' => $entry->id]); - } - - // Delete entry and attachment files. - get_file_storage()->delete_area_files($context->id, 'mod_glossary', 'entry'); - get_file_storage()->delete_area_files($context->id, 'mod_glossary', 'attachment'); - - // Delete related ratings. - \core_rating\privacy\provider::delete_ratings($context, 'mod_glossary', 'entry'); - - // Delete comments. - \core_comment\privacy\provider::delete_comments_for_all_users($context, 'mod_glossary', 'glossary_entry'); - - // Delete tags. - \core_tag\privacy\provider::delete_item_tags($context, 'mod_glossary', 'glossary_entries'); - - // Now delete all user related entries. - $DB->delete_records('glossary_entries', ['glossaryid' => $instanceid]); + if (!$cm = get_coursemodule_from_id('glossary', $context->instanceid)) { + return; } + + $instanceid = $cm->instance; + + $entries = $DB->get_records('glossary_entries', ['glossaryid' => $instanceid]); + foreach ($entries as $entry) { + // Delete related entry categories. + $DB->delete_records('glossary_entries_categories', ['entryid' => $entry->id]); + + // Delete related entry aliases. + $DB->delete_records('glossary_alias', ['entryid' => $entry->id]); + } + + // Delete entry and attachment files. + get_file_storage()->delete_area_files($context->id, 'mod_glossary', 'entry'); + get_file_storage()->delete_area_files($context->id, 'mod_glossary', 'attachment'); + + // Delete related ratings. + \core_rating\privacy\provider::delete_ratings($context, 'mod_glossary', 'entry'); + + // Delete comments. + \core_comment\privacy\provider::delete_comments_for_all_users($context, 'mod_glossary', 'glossary_entry'); + + // Delete tags. + \core_tag\privacy\provider::delete_item_tags($context, 'mod_glossary', 'glossary_entries'); + + // Now delete all user related entries. + $DB->delete_records('glossary_entries', ['glossaryid' => $instanceid]); } /** @@ -300,7 +297,6 @@ class provider implements if ($context->contextlevel == CONTEXT_MODULE) { $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); - $DB->record_exists('glossary', ['id' => $context->instanceid]); $entries = $DB->get_records('glossary_entries', ['glossaryid' => $instanceid, 'userid' => $userid]); foreach ($entries as $entry) { diff --git a/mod/lesson/classes/privacy/provider.php b/mod/lesson/classes/privacy/provider.php index 35d239573a8..78c48eb88ea 100644 --- a/mod/lesson/classes/privacy/provider.php +++ b/mod/lesson/classes/privacy/provider.php @@ -382,7 +382,9 @@ class provider implements return; } - $lessonid = static::get_lesson_id_from_context($context); + if (!$lessonid = static::get_lesson_id_from_context($context)) { + return; + } $DB->delete_records('lesson_attempts', ['lessonid' => $lessonid]); $DB->delete_records('lesson_branch', ['lessonid' => $lessonid]); diff --git a/mod/lti/classes/privacy/provider.php b/mod/lti/classes/privacy/provider.php index f0339813317..716ca9d0f30 100644 --- a/mod/lti/classes/privacy/provider.php +++ b/mod/lti/classes/privacy/provider.php @@ -163,8 +163,9 @@ class provider implements return; } - $instanceid = $DB->get_field('course_modules', 'instance', ['id' => $context->instanceid], MUST_EXIST); - $DB->delete_records('lti_submission', ['ltiid' => $instanceid]); + if ($cm = get_coursemodule_from_id('lti', $context->instanceid)) { + $DB->delete_records('lti_submission', ['ltiid' => key($ltiidstocmids)]); + } } /** diff --git a/mod/survey/classes/privacy/provider.php b/mod/survey/classes/privacy/provider.php index b790c8c7331..64d20649c43 100644 --- a/mod/survey/classes/privacy/provider.php +++ b/mod/survey/classes/privacy/provider.php @@ -229,9 +229,10 @@ class provider implements return; } - $surveyid = static::get_survey_id_from_context($context); - $DB->delete_records('survey_answers', ['survey' => $surveyid]); - $DB->delete_records('survey_analysis', ['survey' => $surveyid]); + if ($surveyid = static::get_survey_id_from_context($context)) { + $DB->delete_records('survey_answers', ['survey' => $surveyid]); + $DB->delete_records('survey_analysis', ['survey' => $surveyid]); + } } /** diff --git a/notes/classes/privacy/provider.php b/notes/classes/privacy/provider.php index 027ef056fa4..b9de0c901fd 100644 --- a/notes/classes/privacy/provider.php +++ b/notes/classes/privacy/provider.php @@ -184,7 +184,7 @@ class provider implements \core_privacy\local\metadata\provider, \core_privacy\l public static function delete_data_for_all_users_in_context(\context $context) { global $DB; - if (empty($context)) { + if ($context->contextlevel != CONTEXT_COURSE) { return; }