From 4af233e1f736eb2256e5e1696418635165467855 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 14 Dec 2013 16:22:38 +0100 Subject: Nettoyage des flux plus intelligent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implémente https://github.com/marienfressinaud/FreshRSS/issues/323 Garde au moins n+10 articles, où n est le nombre d'articles toujours présent dans le flux RSS. --- app/models/Feed.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'app/models/Feed.php') diff --git a/app/models/Feed.php b/app/models/Feed.php index 043956f71..4acf47744 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -598,6 +598,27 @@ class FeedDAO extends Model_pdo { $this->bd->commit (); return $affected; } + + public function cleanOldEntries ($id, $date_min, $keep = 15) { //Remember to call updateLastUpdate($id) just after + $sql = 'DELETE e.* FROM `' . $this->prefix . 'entry` e ' + . 'WHERE e.id_feed = :id_feed AND e.id <= :id_max AND e.is_favorite = 0 AND e.id NOT IN ' + . '(SELECT id FROM (SELECT e2.id FROM `' . $this->prefix . 'entry` e2 WHERE e2.id_feed = :id_feed ORDER BY id DESC LIMIT :keep) keep)'; //Double select because of: MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' + $stm = $this->bd->prepare ($sql); + + $id_max = intval($date_min) . '000000'; + + $stm->bindParam(':id_feed', $id, PDO::PARAM_INT); + $stm->bindParam(':id_max', $id_max, PDO::PARAM_INT); + $stm->bindParam(':keep', $keep, PDO::PARAM_INT); + + if ($stm && $stm->execute ()) { + return $stm->rowCount(); + } else { + $info = $stm->errorInfo(); + Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR); + return false; + } + } } class HelperFeed { -- cgit v1.2.3