From 2a060a94562a2e1678f15d69a7e71e376325e9c1 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 13 Aug 2012 14:47:43 +0400 Subject: initial work on nested categories --- classes/feeds.php | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) (limited to 'classes/feeds.php') diff --git a/classes/feeds.php b/classes/feeds.php index 0c9812479..0762b0067 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -842,6 +842,8 @@ class Feeds extends Protected_Handler { } } + $this->feedlist_process_category('root', &$feedlist); + /* if (get_pref($this->link, 'ENABLE_FEED_CATS')) { if (get_pref($this->link, "FEEDS_SORT_BY_UNREAD")) { $order_by_qpart = "order_id,category,unread DESC,title"; @@ -858,12 +860,125 @@ class Feeds extends Protected_Handler { /* real feeds */ + /* if ($enable_cats) + $order_by_qpart = "ttrss_feed_categories.order_id,category, + ttrss_feeds.order_id,title"; + else + $order_by_qpart = "title"; + + $query = "SELECT ttrss_feeds.id, ttrss_feeds.title, + ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated_noms, + cat_id,last_error, + COALESCE(ttrss_feed_categories.title, '".__('Uncategorized')."') AS category, + ttrss_feed_categories.collapsed, + value AS unread + FROM ttrss_feeds LEFT JOIN ttrss_feed_categories + ON (ttrss_feed_categories.id = cat_id) + LEFT JOIN ttrss_counters_cache + ON + (ttrss_feeds.id = feed_id) + WHERE + ttrss_feeds.owner_uid = '$owner_uid' AND parent_cat IS NULL + ORDER BY $order_by_qpart"; + + $result = db_query($this->link, $query); + + $actid = $_REQUEST["actid"]; + + if (db_num_rows($result) > 0) { + + $category = ""; + + if (!$enable_cats) + $cat['items'] = array(); + else + $cat = false; + + while ($line = db_fetch_assoc($result)) { + + $feed = htmlspecialchars(trim($line["title"])); + + if (!$feed) $feed = "[Untitled]"; + + $feed_id = $line["id"]; + $unread = $line["unread"]; + + $cat_id = $line["cat_id"]; + $tmp_category = $line["category"]; + + if ($category != $tmp_category && $enable_cats) { + + $category = $tmp_category; + + $collapsed = sql_bool_to_bool($line["collapsed"]); + + // workaround for NULL category + if ($category == __("Uncategorized")) { + $collapsed = get_pref($this->link, "_COLLAPSED_UNCAT"); + } + + if ($cat) array_push($feedlist['items'], $cat); + + $cat = $this->feedlist_init_cat($cat_id, $collapsed); + } + + $updated = make_local_datetime($this->link, $line["updated_noms"], false); + + array_push($cat['items'], $this->feedlist_init_feed($feed_id, + $feed, $unread, $line['last_error'], $updated)); + } + + if ($enable_cats) { + array_push($feedlist['items'], $cat); + } else { + $feedlist['items'] = array_merge($feedlist['items'], $cat['items']); + } + + } */ + + return $feedlist; + } + + private function feedlist_process_category($cat_id, &$feedlist) { + $owner_uid = $_SESSION['uid']; + $enable_cats = get_pref($this->link, 'ENABLE_FEED_CATS'); + + if (get_pref($this->link, 'ENABLE_FEED_CATS')) { + if (get_pref($this->link, "FEEDS_SORT_BY_UNREAD")) { + $order_by_qpart = "order_id,category,unread DESC,title"; + } else { + $order_by_qpart = "order_id,category,title"; + } + } else { + if (get_pref($this->link, "FEEDS_SORT_BY_UNREAD")) { + $order_by_qpart = "unread DESC,title"; + } else { + $order_by_qpart = "title"; + } + } + + if ($enable_cats) + $order_by_qpart = "ttrss_feed_categories.order_id,category, + ttrss_feeds.order_id,title"; + else + $order_by_qpart = "title"; + + /* real feeds */ + if ($enable_cats) $order_by_qpart = "ttrss_feed_categories.order_id,category, ttrss_feeds.order_id,title"; else $order_by_qpart = "title"; + if (!$enable_cats) { + $parent_qpart = "true"; + } else if ($cat_id == 'root') { + $parent_qpart = 'parent_cat IS NULL'; + } else { + $parent_qpart = 'parent_cat = '.db_escape_string($cat_id); + } + $query = "SELECT ttrss_feeds.id, ttrss_feeds.title, ".SUBSTRING_FOR_DATE."(last_updated,1,19) AS last_updated_noms, cat_id,last_error, @@ -876,7 +991,7 @@ class Feeds extends Protected_Handler { ON (ttrss_feeds.id = feed_id) WHERE - ttrss_feeds.owner_uid = '$owner_uid' + ttrss_feeds.owner_uid = '$owner_uid' AND $parent_qpart ORDER BY $order_by_qpart"; $result = db_query($this->link, $query); @@ -918,6 +1033,13 @@ class Feeds extends Protected_Handler { if ($cat) array_push($feedlist['items'], $cat); $cat = $this->feedlist_init_cat($cat_id, $collapsed); + + if ($cat_id) { + $cat_items = $this->feedlist_process_category($cat_id, &$feedlist); + if (count($cat_items) > 0) { + array_push($cat['items'], $cat_items); + } + } } $updated = make_local_datetime($this->link, $line["updated_noms"], false); @@ -934,7 +1056,6 @@ class Feeds extends Protected_Handler { } - return $feedlist; } -- cgit v1.2.3-54-g00ecf