summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ajax/loadfeed.php25
-rw-r--r--js/news.js3
-rw-r--r--lib/itemmapper.php37
-rw-r--r--templates/part.items.php22
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 '<ul>';