From bac35e9a73aecefedd8f70d54dd72e0d3082abe0 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Thu, 21 Jul 2022 13:37:40 +0000 Subject: [PATCH] don't skip DoGarbageCollect() completely when NEWS_DISABLE_GARBAGE_COLLECT is set, fixes #1355 Closes #1355 Merge request studip/studip!837 --- lib/cronjobs/garbage_collector.class.php | 6 +- lib/models/StudipNews.class.php | 74 ++++++++++++------------ 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/cronjobs/garbage_collector.class.php b/lib/cronjobs/garbage_collector.class.php index 80d59f6403e..8bb0cbbe3bd 100644 --- a/lib/cronjobs/garbage_collector.class.php +++ b/lib/cronjobs/garbage_collector.class.php @@ -58,7 +58,11 @@ class GarbageCollectorJob extends CronJob } // delete outdated news - $news_deletion_days = $parameters['news_deletion_days'] * 86400; + if (Config::get()->NEWS_DISABLE_GARBAGE_COLLECT) { + $news_deletion_days = false; + } else { + $news_deletion_days = $parameters['news_deletion_days'] * 86400; + } $deleted_news = StudipNews::DoGarbageCollect($news_deletion_days); // delete messages diff --git a/lib/models/StudipNews.class.php b/lib/models/StudipNews.class.php index 2d5652aa14f..0c8c6f7e82d 100644 --- a/lib/models/StudipNews.class.php +++ b/lib/models/StudipNews.class.php @@ -398,47 +398,45 @@ class StudipNews extends SimpleORMap implements PrivacyObject public static function DoGarbageCollect($news_deletion_days = false) { $db = DBManager::get(); - if (!Config::get()->NEWS_DISABLE_GARBAGE_COLLECT) { - $queries = []; - $parameters = []; - - if ($news_deletion_days !== false) { - $queries[] = "SELECT news.news_id - FROM news - WHERE date + expire + ? < UNIX_TIMESTAMP()"; - $parameters[] = (int) $news_deletion_days; - } + $queries = []; + $parameters = []; - $queries[] = "SELECT news_range.news_id - FROM news_range - LEFT JOIN news USING (news_id) - WHERE news.news_id IS NULL"; + if ($news_deletion_days !== false) { $queries[] = "SELECT news.news_id FROM news - LEFT JOIN news_range USING (news_id) - WHERE range_id IS NULL"; - - $query = implode(' UNION DISTINCT ', $queries); - $stm = $db->prepare($query); - $stm->execute($parameters); - $result = $stm->fetchAll(PDO::FETCH_COLUMN); - - if (count($result) > 0) { - $query = "DELETE FROM news WHERE news_id IN (?)"; - $statement = DBManager::get()->prepare($query); - $statement->execute([$result]); - $killed = $statement->rowCount(); - - $query = "DELETE FROM news_range WHERE news_id IN (?)"; - $statement = DBManager::get()->prepare($query); - $statement->execute([$result]); - - object_kill_visits(null, $result); - object_kill_views($result); - StudipComment::DeleteCommentsByObject($result); - } - return $killed; - } + WHERE date + expire + ? < UNIX_TIMESTAMP()"; + $parameters[] = (int) $news_deletion_days; + } + + $queries[] = "SELECT news_range.news_id + FROM news_range + LEFT JOIN news USING (news_id) + WHERE news.news_id IS NULL"; + $queries[] = "SELECT news.news_id + FROM news + LEFT JOIN news_range USING (news_id) + WHERE range_id IS NULL"; + + $query = implode(' UNION DISTINCT ', $queries); + $stm = $db->prepare($query); + $stm->execute($parameters); + $result = $stm->fetchAll(PDO::FETCH_COLUMN); + + if (count($result) > 0) { + $query = "DELETE FROM news WHERE news_id IN (?)"; + $statement = $db->prepare($query); + $statement->execute([$result]); + $killed = $statement->rowCount(); + + $query = "DELETE FROM news_range WHERE news_id IN (?)"; + $statement = $db->prepare($query); + $statement->execute([$result]); + + object_kill_visits(null, $result); + object_kill_views($result); + StudipComment::DeleteCommentsByObject($result); + } + return $killed; } public static function DeleteNewsRanges($range_id) -- GitLab