From 8b52601b1a2555338fcb8050576f691d72b6d939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= <david@moodle.com> Date: Sun, 25 Nov 2018 06:55:23 +0100 Subject: [PATCH 1/2] MDL-64205 users: Do not delete the actual records of unconfirmed users There is an automatic data privacy request created to get rid of all the personal data upon the user deletion. With the actual user record absent, the data privacy requests page throws an error. Let's do here same as we do in `delete_incomplete_users_task` and let us not delete the actual user record. --- lib/classes/task/delete_unconfirmed_users_task.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/classes/task/delete_unconfirmed_users_task.php b/lib/classes/task/delete_unconfirmed_users_task.php index b9aa9a32a86..40dfe8ef1ef 100644 --- a/lib/classes/task/delete_unconfirmed_users_task.php +++ b/lib/classes/task/delete_unconfirmed_users_task.php @@ -54,9 +54,8 @@ class delete_unconfirmed_users_task extends scheduled_task { WHERE confirmed = 0 AND timecreated > 0 AND timecreated < ? AND deleted = 0", array($cuttime)); foreach ($rs as $user) { - delete_user($user); // We MUST delete user properly first. - $DB->delete_records('user', array('id' => $user->id)); // This is a bloody hack, but it might work. - mtrace(" Deleted unconfirmed user for ".fullname($user, true)." ($user->id)"); + delete_user($user); + mtrace(" Deleted unconfirmed user ".fullname($user, true)." ($user->id)"); } $rs->close(); } From 87bb5954eb9f4932febde0a01270f5f4880f737c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= <david@moodle.com> Date: Sun, 25 Nov 2018 07:17:54 +0100 Subject: [PATCH 2/2] MDL-64205 privacy: Delete orphaned data request records on upgrade As a result of the bug, some requests can be orphaned - the linked user record may not exist any more. This is a cleanup of such records. --- admin/tool/dataprivacy/db/upgrade.php | 14 ++++++++++++++ admin/tool/dataprivacy/version.php | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/admin/tool/dataprivacy/db/upgrade.php b/admin/tool/dataprivacy/db/upgrade.php index 2f52d4857c6..99fd1568ddb 100644 --- a/admin/tool/dataprivacy/db/upgrade.php +++ b/admin/tool/dataprivacy/db/upgrade.php @@ -299,5 +299,19 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2018110700, 'tool', 'dataprivacy'); } + if ($oldversion < 2018112500) { + // Delete orphaned data privacy requests. + $sql = "SELECT r.id + FROM {tool_dataprivacy_request} r LEFT JOIN {user} u ON r.userid = u.id + WHERE u.id IS NULL"; + $orphaned = $DB->get_fieldset_sql($sql); + + if ($orphaned) { + $DB->delete_records_list('tool_dataprivacy_request', 'id', $orphaned); + } + + upgrade_plugin_savepoint(true, 2018112500, 'tool', 'dataprivacy'); + } + return true; } diff --git a/admin/tool/dataprivacy/version.php b/admin/tool/dataprivacy/version.php index d25e4c87960..24cc5a6da51 100644 --- a/admin/tool/dataprivacy/version.php +++ b/admin/tool/dataprivacy/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die; -$plugin->version = 2018110900; +$plugin->version = 2018112500; $plugin->requires = 2018050800; // Moodle 3.5dev (Build 2018031600) and upwards. $plugin->component = 'tool_dataprivacy';