diff --git a/lib/cronjobs/garbage_collector.class.php b/lib/cronjobs/garbage_collector.class.php index 80d59f6403eef3fa11e4277dd676c44cfbc25a61..8bb0cbbe3bd7f013754b76b502d3e7aeb24d9c0c 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 2d5652aa14fd14be0f642bc2f32c0fb56b86ec72..0c8c6f7e82d71e9ce3bb2d3968b70c5f3ae03885 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)