summaryrefslogtreecommitdiffstats
path: root/db
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-05-09 12:57:35 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-05-09 12:57:35 +0200
commitb8b4dfb4969e1baf84a14fb65a5dc153b0f5fae4 (patch)
tree27e211e26f442efd72a7f34903953ad57b1a9b76 /db
parentfe0de2ab84a88cb4c742f4f10fd43716934b7282 (diff)
only make one request for mark all read and mark folder read, fix #171, fix a bug that prevented readding of feeds when its folder was deleted, fix a bug that would not allow mark read for feeds when the app was started for the first time
Diffstat (limited to 'db')
-rw-r--r--db/itemmapper.php46
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);
}