diff options
Diffstat (limited to 'db')
-rw-r--r-- | db/itemmapper.php | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/db/itemmapper.php b/db/itemmapper.php index 097479ecc..11f917270 100644 --- a/db/itemmapper.php +++ b/db/itemmapper.php @@ -114,26 +114,48 @@ class ItemMapper extends Mapper implements IMapper { } - public function readFeed($feedId, $highestItemId, $userId){ - // its 0 when the feed was not loaded or the loaded feed - // does not contain any items - if($highestItemId !== 0){ - $params = array(~StatusFlag::UNREAD, $feedId, $highestItemId, $userId, - $feedId); - $lowerSql = 'AND `id` <= ? '; - } else { - $lowerSql = ''; - $params = array(~StatusFlag::UNREAD, $feedId, $userId, $feedId); - } + public function readAll($highestItemId, $userId) { + $sql = 'UPDATE `*PREFIX*news_items` ' . + 'SET `status` = `status` & ? ' . + 'WHERE `id` IN (' . + 'SELECT `items`.`id` FROM `*PREFIX*news_items` `items` ' . + 'JOIN `*PREFIX*news_feeds` `feeds` ' . + 'ON `feeds`.`id` = `items`.`feed_id` '. + 'AND `items`.`id` <= ? ' . + 'AND `feeds`.`user_id` = ? ' . + ') '; + $params = array(~StatusFlag::UNREAD, $highestItemId, $userId); + $this->execute($sql, $params); + } + + public function readFolder($folderId, $highestItemId, $userId) { + $sql = 'UPDATE `*PREFIX*news_items` ' . + 'SET `status` = `status` & ? ' . + 'WHERE `id` IN (' . + 'SELECT `items`.`id` FROM `*PREFIX*news_items` `items` ' . + 'JOIN `*PREFIX*news_feeds` `feeds` ' . + 'ON `feeds`.`id` = `items`.`feed_id` '. + 'AND `feeds`.`folder_id` = ? ' . + 'AND `items`.`id` <= ? ' . + 'AND `feeds`.`user_id` = ? ' . + ') '; + $params = array(~StatusFlag::UNREAD, $folderId, $highestItemId, $userId); + $this->execute($sql, $params); + } + + + public function readFeed($feedId, $highestItemId, $userId){ $sql = 'UPDATE `*PREFIX*news_items` ' . 'SET `status` = `status` & ? ' . 'WHERE `feed_id` = ? ' . - $lowerSql . + 'AND `id` <= ? ' . 'AND EXISTS (' . 'SELECT * FROM `*PREFIX*news_feeds` ' . 'WHERE `user_id` = ? ' . 'AND `id` = ? ) '; + $params = array(~StatusFlag::UNREAD, $feedId, $highestItemId, $userId, + $feedId); $this->execute($sql, $params); } |