From 8575b451c4f94b9154599f848fd594e92229e50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= 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 690e03bfea160660667d62f0c4eea3302034e6c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= 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 bb538068600..edf642500d7 100644 --- a/admin/tool/dataprivacy/db/upgrade.php +++ b/admin/tool/dataprivacy/db/upgrade.php @@ -262,5 +262,19 @@ function xmldb_tool_dataprivacy_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2018051413, 'tool', 'dataprivacy'); } + if ($oldversion < 2018051415) { + // 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, 2018051415, 'tool', 'dataprivacy'); + } + return true; } diff --git a/admin/tool/dataprivacy/version.php b/admin/tool/dataprivacy/version.php index 892f017ad80..4d9711ac7c6 100644 --- a/admin/tool/dataprivacy/version.php +++ b/admin/tool/dataprivacy/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die; -$plugin->version = 2018051414; +$plugin->version = 2018051415; $plugin->requires = 2018050800; // Moodle 3.5dev (Build 2018031600) and upwards. $plugin->component = 'tool_dataprivacy';