aboutsummaryrefslogtreecommitdiff
path: root/app/Models/FeedDAO.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models/FeedDAO.php')
-rw-r--r--app/Models/FeedDAO.php53
1 files changed, 53 insertions, 0 deletions
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index af599c2a6..0d65e171d 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -363,6 +363,19 @@ SQL;
}
}
+ public function listTitles($id, $limit = null) {
+ $sql = 'SELECT title FROM `_entry` WHERE id_feed=:id_feed ORDER BY id DESC'
+ . ($limit < 1 ? '' : ' LIMIT ' . intval($limit));
+
+ $stm = $this->pdo->prepare($sql);
+ $stm->bindParam(':id_feed', $id, PDO::PARAM_INT);
+
+ if ($stm && $stm->execute()) {
+ return $stm->fetchAll(PDO::FETCH_COLUMN, 0);
+ }
+ return false;
+ }
+
public function listByCategory($cat) {
$sql = 'SELECT * FROM `_feed` WHERE category=?';
$stm = $this->pdo->prepare($sql);
@@ -418,6 +431,46 @@ SQL;
}
}
+ public function keepMaxUnread($id, $n) {
+ //Double SELECT for MySQL workaround ERROR 1093 (HY000)
+ $sql = <<<'SQL'
+UPDATE `_entry` SET is_read=1
+WHERE id_feed=:id_feed1 AND is_read=0 AND id <= (SELECT e3.id FROM (
+ SELECT e2.id FROM `_entry` e2
+ WHERE e2.id_feed=:id_feed2 AND e2.is_read=0
+ ORDER BY e2.id DESC
+ LIMIT 1
+ OFFSET :limit) e3)
+SQL;
+
+ $stm = $this->pdo->prepare($sql);
+ $stm->bindParam(':id_feed1', $id, PDO::PARAM_INT);
+ $stm->bindParam(':id_feed2', $id, PDO::PARAM_INT);
+ $stm->bindParam(':limit', $n, PDO::PARAM_INT);
+
+ if (!$stm || !$stm->execute()) {
+ $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+ Minz_Log::error('SQL error keepMaxUnread: ' . json_encode($info));
+ return false;
+ }
+ $affected = $stm->rowCount();
+
+ if ($affected > 0) {
+ $sql = 'UPDATE `_feed` '
+ . 'SET `cache_nbUnreads`=`cache_nbUnreads`-' . $affected
+ . ' WHERE id=:id';
+ $stm = $this->pdo->prepare($sql);
+ $stm->bindParam(':id', $id_feed, PDO::PARAM_INT);
+ if (!($stm && $stm->execute())) {
+ $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+ Minz_Log::error('SQL error keepMaxUnread cache: ' . json_encode($info));
+ return false;
+ }
+ }
+
+ return $affected;
+ }
+
public function truncate($id) {
$sql = 'DELETE FROM `_entry` WHERE id_feed=:id';
$stm = $this->pdo->prepare($sql);