From 42ca456a059b7bb228a37a60cd82f141fe927e54 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Tue, 16 Apr 2013 17:16:42 +0200 Subject: fix bug that prevented marking read if the highestitemid was 0 --- db/itemmapper.php | 16 +++++++++++++--- tests/unit/db/ItemMapperTest.php | 13 +++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/db/itemmapper.php b/db/itemmapper.php index bffab6348..326d58a2d 100644 --- a/db/itemmapper.php +++ b/db/itemmapper.php @@ -115,16 +115,26 @@ 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); + } + $sql = 'UPDATE `*PREFIX*news_items` ' . 'SET `status` = `status` & ? ' . 'WHERE `feed_id` = ? ' . - 'AND `id` <= ? ' . + $lowerSql . 'AND EXISTS (' . 'SELECT * FROM `*PREFIX*news_feeds` ' . 'WHERE `user_id` = ? ' . 'AND `id` = ? ) '; - $params = array(~StatusFlag::UNREAD, $feedId, $highestItemId, $userId, - $feedId); + $this->execute($sql, $params); } diff --git a/tests/unit/db/ItemMapperTest.php b/tests/unit/db/ItemMapperTest.php index a7fead8f0..ed47f175c 100644 --- a/tests/unit/db/ItemMapperTest.php +++ b/tests/unit/db/ItemMapperTest.php @@ -132,6 +132,19 @@ class ItemMapperTest extends \OCA\AppFramework\Utility\MapperTestUtility { } + public function testReadFeedShouldMarkAllAsReadWhenIdZero(){ + $sql = 'UPDATE `*PREFIX*news_items` ' . + 'SET `status` = `status` & ? ' . + 'WHERE `feed_id` = ? ' . + 'AND EXISTS (' . + 'SELECT * FROM `*PREFIX*news_feeds` ' . + 'WHERE `user_id` = ? ' . + 'AND `id` = ? ) '; + $params = array(~StatusFlag::UNREAD, 3,$this->user, 3); + $this->setMapperResult($sql, $params); + $this->mapper->readFeed(3, 0, $this->user); + } + public function testFindAllNew(){ $sql = 'AND `items`.`id` >= ?'; $sql = $this->makeSelectQueryStatus($sql, $this->status); -- cgit v1.2.3