Skip to content
Snippets Groups Projects
Commit bac35e9a authored by Elmar Ludwig's avatar Elmar Ludwig
Browse files

don't skip DoGarbageCollect() completely when NEWS_DISABLE_GARBAGE_COLLECT is set, fixes #1355

Closes #1355

Merge request studip/studip!837
parent de1ce33a
No related branches found
No related tags found
No related merge requests found
...@@ -58,7 +58,11 @@ class GarbageCollectorJob extends CronJob ...@@ -58,7 +58,11 @@ class GarbageCollectorJob extends CronJob
} }
// delete outdated news // 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); $deleted_news = StudipNews::DoGarbageCollect($news_deletion_days);
// delete messages // delete messages
......
...@@ -398,47 +398,45 @@ class StudipNews extends SimpleORMap implements PrivacyObject ...@@ -398,47 +398,45 @@ class StudipNews extends SimpleORMap implements PrivacyObject
public static function DoGarbageCollect($news_deletion_days = false) public static function DoGarbageCollect($news_deletion_days = false)
{ {
$db = DBManager::get(); $db = DBManager::get();
if (!Config::get()->NEWS_DISABLE_GARBAGE_COLLECT) { $queries = [];
$queries = []; $parameters = [];
$parameters = [];
if ($news_deletion_days !== false) {
$queries[] = "SELECT news.news_id
FROM news
WHERE date + expire + ? < UNIX_TIMESTAMP()";
$parameters[] = (int) $news_deletion_days;
}
$queries[] = "SELECT news_range.news_id if ($news_deletion_days !== false) {
FROM news_range
LEFT JOIN news USING (news_id)
WHERE news.news_id IS NULL";
$queries[] = "SELECT news.news_id $queries[] = "SELECT news.news_id
FROM news FROM news
LEFT JOIN news_range USING (news_id) WHERE date + expire + ? < UNIX_TIMESTAMP()";
WHERE range_id IS NULL"; $parameters[] = (int) $news_deletion_days;
}
$query = implode(' UNION DISTINCT ', $queries);
$stm = $db->prepare($query); $queries[] = "SELECT news_range.news_id
$stm->execute($parameters); FROM news_range
$result = $stm->fetchAll(PDO::FETCH_COLUMN); LEFT JOIN news USING (news_id)
WHERE news.news_id IS NULL";
if (count($result) > 0) { $queries[] = "SELECT news.news_id
$query = "DELETE FROM news WHERE news_id IN (?)"; FROM news
$statement = DBManager::get()->prepare($query); LEFT JOIN news_range USING (news_id)
$statement->execute([$result]); WHERE range_id IS NULL";
$killed = $statement->rowCount();
$query = implode(' UNION DISTINCT ', $queries);
$query = "DELETE FROM news_range WHERE news_id IN (?)"; $stm = $db->prepare($query);
$statement = DBManager::get()->prepare($query); $stm->execute($parameters);
$statement->execute([$result]); $result = $stm->fetchAll(PDO::FETCH_COLUMN);
object_kill_visits(null, $result); if (count($result) > 0) {
object_kill_views($result); $query = "DELETE FROM news WHERE news_id IN (?)";
StudipComment::DeleteCommentsByObject($result); $statement = $db->prepare($query);
} $statement->execute([$result]);
return $killed; $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) public static function DeleteNewsRanges($range_id)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment