From 5248566335cd124c95b8218551acf5a9a21c2371 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Wed, 8 Nov 2023 13:44:17 +0000 Subject: [PATCH] clean up forum visits and ensure entries are deleted when either a user or a... Closes #2738 Merge request studip/studip!1856 --- lib/cronjobs/garbage_collector.class.php | 7 +++++++ lib/models/Course.class.php | 4 ++++ lib/models/User.class.php | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/lib/cronjobs/garbage_collector.class.php b/lib/cronjobs/garbage_collector.class.php index 7adb0cd38f8..eff3d6db839 100644 --- a/lib/cronjobs/garbage_collector.class.php +++ b/lib/cronjobs/garbage_collector.class.php @@ -148,6 +148,13 @@ class GarbageCollectorJob extends CronJob Studip\Activity\Activity::doGarbageCollect(); + // Remove outdated entries from forum_visits + $query = "DELETE FROM `forum_visits` + WHERE GREATEST(`visitdate`, `last_visitdate`) < UNIX_TIMESTAMP() - :threshold"; + DBManager::get()->execute($query, [ + ':threshold' => ForumVisit::LAST_VISIT_MAX, + ]); + // clean db cache $cache = new StudipDbCache(); $cache->purge(); diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php index 4c471ea64e4..bbfa9835ccd 100644 --- a/lib/models/Course.class.php +++ b/lib/models/Course.class.php @@ -271,6 +271,10 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe "UPDATE `seminare` SET `parent_course` = NULL WHERE `parent_course` = :course", ['course' => $course->id] ); + DBManager::get()->execute( + "DELETE FROM `forum_visits` WHERE `seminar_id` = ?", + [$course->id] + ); }; parent::configure($config); diff --git a/lib/models/User.class.php b/lib/models/User.class.php index 99a06ef09d5..aa6f5feca67 100644 --- a/lib/models/User.class.php +++ b/lib/models/User.class.php @@ -206,6 +206,7 @@ class User extends AuthUserMd5 implements Range, PrivacyObject }; $config['registered_callbacks']['after_delete'][] = 'cbRemoveFeedback'; + $config['registered_callbacks']['after_delete'][] = 'cbRemoveForumVisits'; $config['registered_callbacks']['before_store'][] = 'cbClearCaches'; $config['registered_callbacks']['before_store'][] = 'cbStudipLog'; @@ -1485,6 +1486,17 @@ class User extends AuthUserMd5 implements Range, PrivacyObject FeedbackEntry::deleteBySQL('user_id = ?', [$this->id]); } + /** + * This callback is called after deleting a User. + * It removes forum visit entries that are associated with the User. + */ + public function cbRemoveForumVisits() + { + $query = "DELETE FROM `forum_visits` + WHERE `user_id` = ?"; + DBManager::get()->execute($query, [$this->id]); + } + public function cbClearCaches() { if ($this->isFieldDirty('perms')) { -- GitLab