From 4864633612ab8619e0f2664474b4dce8e74ac81f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 18 Sep 2012 09:58:01 +0400 Subject: [PATCH] API: support nested categories --- classes/api.php | 18 +++++++++++++++--- include/functions.php | 30 +++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/classes/api.php b/classes/api.php index cce1d2a7..801f9956 100644 --- a/classes/api.php +++ b/classes/api.php @@ -114,20 +114,27 @@ class API extends Handler { $unread_only = (bool)db_escape_string($_REQUEST["unread_only"]); $limit = (int) db_escape_string($_REQUEST["limit"]); $offset = (int) db_escape_string($_REQUEST["offset"]); + $include_nested = (bool)db_escape_string($_REQUEST["include_nested"]); - $feeds = api_get_feeds($this->link, $cat_id, $unread_only, $limit, $offset); + $feeds = api_get_feeds($this->link, $cat_id, $unread_only, $limit, $offset, $include_nested); print $this->wrap(self::STATUS_OK, $feeds); } function getCategories() { $unread_only = (bool)db_escape_string($_REQUEST["unread_only"]); + $enable_nested = (bool)db_escape_string($_REQUEST["enable_nested"]); // TODO do not return empty categories, return Uncategorized and standard virtual cats + if ($enable_nested) + $nested_qpart = "parent_cat IS NULL"; + else + $nested_qpart = "true"; + $result = db_query($this->link, "SELECT id, title, order_id FROM ttrss_feed_categories - WHERE owner_uid = " . + WHERE $nested_qpart AND owner_uid = " . $_SESSION["uid"]); $cats = array(); @@ -135,6 +142,9 @@ class API extends Handler { while ($line = db_fetch_assoc($result)) { $unread = getFeedUnread($this->link, $line["id"], true); + if ($enable_nested) + $unread += getCategoryChildrenUnread($this->link, $line["id"]); + if ($unread || !$unread_only) { array_push($cats, array("id" => $line["id"], "title" => $line["title"], @@ -174,6 +184,7 @@ class API extends Handler { $view_mode = db_escape_string($_REQUEST["view_mode"]); $include_attachments = (bool)db_escape_string($_REQUEST["include_attachments"]); $since_id = (int)db_escape_string($_REQUEST["since_id"]); + $include_nested = (bool)db_escape_string($_REQUEST["include_nested"]); /* do not rely on params below */ @@ -183,7 +194,8 @@ class API extends Handler { $headlines = api_get_headlines($this->link, $feed_id, $limit, $offset, $filter, $is_cat, $show_excerpt, $show_content, $view_mode, false, - $include_attachments, $since_id, $search, $search_mode, $match_on); + $include_attachments, $since_id, $search, $search_mode, $match_on, + $include_nested); print $this->wrap(self::STATUS_OK, $headlines); } else { diff --git a/include/functions.php b/include/functions.php index 5af4cb66..2b0b3a40 100644 --- a/include/functions.php +++ b/include/functions.php @@ -4454,7 +4454,7 @@ return $rv; } - function api_get_feeds($link, $cat_id, $unread_only, $limit, $offset) { + function api_get_feeds($link, $cat_id, $unread_only, $limit, $offset, $include_nested = false) { $feeds = array(); @@ -4502,6 +4502,30 @@ } } + /* Child cats */ + + if ($include_nested && $cat_id) { + $result = db_query($link, "SELECT + id, title FROM ttrss_feed_categories + WHERE parent_cat = '$cat_id' AND owner_uid = " . $_SESSION["uid"] . + "ORDER BY id, title"); + + while ($line = db_fetch_assoc($result)) { + $unread = getFeedUnread($link, $line["id"], true) + + getCategoryChildrenUnread($link, $line["id"]); + + if ($unread || !$unread_only) { + $row = array( + "id" => $line["id"], + "title" => $line["title"], + "unread" => $unread, + "is_cat" => true, + ); + array_push($feeds, $row); + } + } + } + /* Real feeds */ if ($limit) { @@ -4560,11 +4584,11 @@ function api_get_headlines($link, $feed_id, $limit, $offset, $filter, $is_cat, $show_excerpt, $show_content, $view_mode, $order, $include_attachments, $since_id, - $search = "", $search_mode = "", $match_on = "") { + $search = "", $search_mode = "", $match_on = "", $include_nested = false) { $qfh_ret = queryFeedHeadlines($link, $feed_id, $limit, $view_mode, $is_cat, $search, $search_mode, $match_on, - $order, $offset, 0, false, $since_id); + $order, $offset, 0, false, $since_id, $include_nested); $result = $qfh_ret[0]; $feed_title = $qfh_ret[1]; -- 2.39.5