From f61df85fe634c7f5662965bb46124af2ecd50419 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Thu, 16 Aug 2012 20:26:06 +0200 Subject: made starred items and all items work! --- ajax/loadfeed.php | 25 ++++++++++++++++++++----- js/news.js | 3 +++ lib/itemmapper.php | 37 ++++++++++++++++++++++++++++++++++++- templates/part.items.php | 22 ++++++++++++++++++---- 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/ajax/loadfeed.php b/ajax/loadfeed.php index 644f28714..03f143fe1 100644 --- a/ajax/loadfeed.php +++ b/ajax/loadfeed.php @@ -25,12 +25,27 @@ $itemsTpl = new OCP\Template("news", "part.items"); $itemsTpl->assign('feedid', $feedId); $feedItems = $itemsTpl->fetchPage(); -$feedMapper = new OCA\News\FeedMapper(); -$feed = $feedMapper->findById($feedId); -$feedTitle = $feed->getTitle(); - $itemMapper = new OCA\News\ItemMapper(); -$unreadItemCount = $itemMapper->countAllStatus($feedId, OCA\News\StatusFlag::UNREAD); + + +switch ($feedId) { + case -1: + $feedTitle = $l->t('Starred'); + $unreadItemCount = $itemMapper->countAllStatus($feedId, OCA\News\StatusFlag::IMPORTANT); + break; + + case -2: + $feedTitle = $l->t('New articles'); + $unreadItemCount = $itemMapper->countEveryItemByStatus(OCA\News\StatusFlag::UNREAD); + break; + + default: + $feedMapper = new OCA\News\FeedMapper(); + $feed = $feedMapper->findById($feedId); + $feedTitle = $feed->getTitle(); + $unreadItemCount = $itemMapper->countAllStatus($feedId, OCA\News\StatusFlag::UNREAD); + break; +} OCP\JSON::success(array('data' => array( 'message' => $l->t('Feed loaded!'), 'feedTitle' => $feedTitle, diff --git a/js/news.js b/js/news.js index e0235ad81..aa4c2ba78 100644 --- a/js/news.js +++ b/js/news.js @@ -705,6 +705,9 @@ function bindItemEventListeners(){ $(document).ready(function(){ News.Feed.activeFeedId = parseInt($('#rightcontent').data('id')); + $('#feeds .subscriptions,#feeds .starred').click(function() { + News.Feed.load($(this).attr('data-id')); + }); $('#addfeed_dialog_firstrun').hide(); diff --git a/lib/itemmapper.php b/lib/itemmapper.php index dcce2a640..03dc1c764 100644 --- a/lib/itemmapper.php +++ b/lib/itemmapper.php @@ -64,6 +64,7 @@ class ItemMapper { return $items; } + /** * @brief Retrieve all the items corresponding to a feed from the database with a particular status * @param feedid The id of the feed in the database table. @@ -72,7 +73,8 @@ class ItemMapper { public function findAllStatus($feedid, $status){ $stmt = \OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE feed_id = ? - AND (status & ?)'); + AND (status & ?) + ORDER BY pub_date DESC'); $result = $stmt->execute(array($feedid, $status)); $items = array(); @@ -84,6 +86,29 @@ class ItemMapper { return $items; } + /* + * @brief Retrieve all the items corresponding to a feed from the database with a particular status + * @param feedid The id of the feed in the database table. + * @param status one of the constants defined in OCA\News\StatusFlag + */ + public function findEveryItemByStatus($status){ + $stmt = \OCP\DB::prepare('SELECT ' . self::tableName . '.* FROM ' . self::tableName . ' + JOIN '. FeedMapper::tableName .' ON + '. FeedMapper::tableName .'.id = ' . self::tableName . '.feed_id + WHERE '. FeedMapper::tableName .'.user_id = ? + AND (' . self::tableName . '.status & ?) + ORDER BY ' . self::tableName . '.pub_date DESC'); + $result = $stmt->execute(array($this->userid, $status)); + + $items = array(); + while ($row = $result->fetchRow()) { + $item = $this->fromRow($row); + $items[] = $item; + } + + return $items; + } + public function countAllStatus($feedid, $status){ $stmt = \OCP\DB::prepare('SELECT COUNT(*) as size FROM ' . self::tableName . ' WHERE feed_id = ? @@ -92,6 +117,16 @@ class ItemMapper { return $result['size']; } + public function countEveryItemByStatus($status){ + $stmt = \OCP\DB::prepare('SELECT COUNT(*) as size FROM ' . self::tableName . ' + JOIN '. FeedMapper::tableName .' ON + '. FeedMapper::tableName .'.id = ' . self::tableName . '.feed_id + WHERE '. FeedMapper::tableName .'.user_id = ? + AND (' . self::tableName . '.status & ?)'); + $result = $stmt->execute(array($this->userid, $status))->fetchRow();; + + return $result['size']; + } public function findIdFromGuid($guid_hash, $guid, $feedid){ $stmt = \OCP\DB::prepare(' diff --git a/templates/part.items.php b/templates/part.items.php index 91bcdfafe..1023ab452 100644 --- a/templates/part.items.php +++ b/templates/part.items.php @@ -6,10 +6,24 @@ $itemMapper = new OCA\News\ItemMapper(); $showAll = OCP\Config::getUserValue(OCP\USER::getUser(), 'news', 'showAll'); -if($showAll){ - $items = $itemMapper->findAll($feedId); -} else { - $items = $itemMapper->findAllStatus($feedId, OCA\News\StatusFlag::UNREAD); +// select items by feed id and by preference +switch ($feedId) { + case -1: + $feedMapper = new OCA\News\FeedMapper(); + $items = $itemMapper->findEveryItemByStatus(OCA\News\StatusFlag::IMPORTANT); + break; + + case -2: + $items = $itemMapper->findEveryItemByStatus(OCA\News\StatusFlag::UNREAD); + break; + + default: + if($showAll){ + $items = $itemMapper->findAll($feedId); + } else { + $items = $itemMapper->findAllStatus($feedId, OCA\News\StatusFlag::UNREAD); + } + break; } echo '