From ef31c54962aa05fc70986f545e2968e83fe3df8a Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Wed, 8 Mar 2023 13:51:05 +0000
Subject: [PATCH] remove forum abos and favorites upon user deletion and add a
 migration that cleans up the current state in the tables, fixes #2289

Closes #2289

Merge request studip/studip!1513
---
 db/migrations/5.1.43_cleanup_forum_tables.php | 20 +++++++++++++++++++
 lib/classes/UserManagement.class.php          |  2 ++
 2 files changed, 22 insertions(+)
 create mode 100644 db/migrations/5.1.43_cleanup_forum_tables.php

diff --git a/db/migrations/5.1.43_cleanup_forum_tables.php b/db/migrations/5.1.43_cleanup_forum_tables.php
new file mode 100644
index 00000000000..6f074695724
--- /dev/null
+++ b/db/migrations/5.1.43_cleanup_forum_tables.php
@@ -0,0 +1,20 @@
+<?php
+final class CleanupForumTables extends Migration
+{
+    protected function up()
+    {
+        $query = "DELETE FROM `forum_abo_users`
+                  WHERE `user_id` NOT IN (
+                      SELECT `user_id`
+                      FROM `auth_user_md5`
+                  )";
+        DBManager::get()->exec($query);
+
+        $query = "DELETE FROM `forum_favorites`
+                  WHERE `user_id` NOT IN (
+                      SELECT `user_id`
+                      FROM `auth_user_md5`
+                  )";
+        DBManager::get()->exec($query);
+    }
+}
diff --git a/lib/classes/UserManagement.class.php b/lib/classes/UserManagement.class.php
index e44a7139529..516c9040a3a 100644
--- a/lib/classes/UserManagement.class.php
+++ b/lib/classes/UserManagement.class.php
@@ -1187,6 +1187,8 @@ class UserManagement
             "DELETE FROM evalanswer_user WHERE user_id = ?",
             "DELETE FROM help_tour_user WHERE user_id = ?",
             "DELETE FROM personal_notifications_user WHERE user_id = ?",
+            "DELETE FROM forum_abo_users WHERE user_id = ?",
+            "DELETE FROM forum_favorites WHERE user_id = ?",
 
             "DELETE FROM comments WHERE user_id = ?",
             "DELETE questionnaires FROM questionnaires LEFT JOIN questionnaire_assignments qa USING (`questionnaire_id`) WHERE qa.range_id = ?",
-- 
GitLab