2 class Feeds extends Handler {
\r
4 function catchupAll() {
\r
5 db_query($this->link, "UPDATE ttrss_user_entries SET
\r
6 last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]);
\r
7 ccache_zero_all($this->link, $_SESSION["uid"]);
\r
10 function collapse() {
\r
11 $cat_id = db_escape_string($_REQUEST["cid"]);
\r
12 $mode = (int) db_escape_string($_REQUEST['mode']);
\r
13 toggle_collapse_cat($this->link, $cat_id, $mode);
\r
17 $root = (bool)$_REQUEST["root"];
\r
20 print json_encode(outputFeedList($this->link));
\r
23 $feeds = outputFeedList($this->link, false);
\r
26 $root['id'] = 'root';
\r
27 $root['name'] = __('Feeds');
\r
28 $root['items'] = $feeds['items'];
\r
31 $fl['identifier'] = 'id';
\r
32 $fl['label'] = 'name';
\r
33 $fl['items'] = array($root);
\r
35 print json_encode($fl);
\r
40 $timing_info = getmicrotime();
\r
44 if ($_REQUEST["debug"]) $timing_info = print_checkpoint("0", $timing_info);
\r
46 $omode = db_escape_string($_REQUEST["omode"]);
\r
48 $feed = db_escape_string($_REQUEST["feed"]);
\r
49 $method = db_escape_string($_REQUEST["m"]);
\r
50 $view_mode = db_escape_string($_REQUEST["view_mode"]);
\r
51 $limit = (int) get_pref($this->link, "DEFAULT_ARTICLE_LIMIT");
\r
52 @$cat_view = db_escape_string($_REQUEST["cat"]) == "true";
\r
53 @$next_unread_feed = db_escape_string($_REQUEST["nuf"]);
\r
54 @$offset = db_escape_string($_REQUEST["skip"]);
\r
55 @$vgroup_last_feed = db_escape_string($_REQUEST["vgrlf"]);
\r
56 $order_by = db_escape_string($_REQUEST["order_by"]);
\r
58 if (is_numeric($feed)) $feed = (int) $feed;
\r
60 /* Feed -5 is a special case: it is used to display auxiliary information
\r
61 * when there's nothing to load - e.g. no stuff in fresh feed */
\r
64 print json_encode(generate_dashboard_feed($this->link));
\r
71 $label_feed = -11-$feed;
\r
72 $result = db_query($this->link, "SELECT id FROM ttrss_labels2 WHERE
\r
73 id = '$label_feed' AND owner_uid = " . $_SESSION['uid']);
\r
74 } else if (!$cat_view && is_numeric($feed) && $feed > 0) {
\r
75 $result = db_query($this->link, "SELECT id FROM ttrss_feeds WHERE
\r
76 id = '$feed' AND owner_uid = " . $_SESSION['uid']);
\r
77 } else if ($cat_view && is_numeric($feed) && $feed > 0) {
\r
78 $result = db_query($this->link, "SELECT id FROM ttrss_feed_categories WHERE
\r
79 id = '$feed' AND owner_uid = " . $_SESSION['uid']);
\r
82 if ($result && db_num_rows($result) == 0) {
\r
83 print json_encode(generate_error_feed($this->link, __("Feed not found.")));
\r
87 /* Updating a label ccache means recalculating all of the caches
\r
88 * so for performance reasons we don't do that here */
\r
91 ccache_update($this->link, $feed, $_SESSION["uid"], $cat_view);
\r
94 set_pref($this->link, "_DEFAULT_VIEW_MODE", $view_mode);
\r
95 set_pref($this->link, "_DEFAULT_VIEW_LIMIT", $limit);
\r
96 set_pref($this->link, "_DEFAULT_VIEW_ORDER_BY", $order_by);
\r
98 if (!$cat_view && preg_match("/^[0-9][0-9]*$/", $feed)) {
\r
99 db_query($this->link, "UPDATE ttrss_feeds SET last_viewed = NOW()
\r
100 WHERE id = '$feed' AND owner_uid = ".$_SESSION["uid"]);
\r
103 $reply['headlines'] = array();
\r
105 if (!$next_unread_feed)
\r
106 $reply['headlines']['id'] = $feed;
\r
108 $reply['headlines']['id'] = $next_unread_feed;
\r
110 $reply['headlines']['is_cat'] = (bool) $cat_view;
\r
112 $override_order = false;
\r
114 if (get_pref($this->link, "SORT_HEADLINES_BY_FEED_DATE", $owner_uid)) {
\r
115 $date_sort_field = "updated";
\r
117 $date_sort_field = "date_entered";
\r
120 switch ($order_by) {
\r
122 if (get_pref($this->link, 'REVERSE_HEADLINES', $owner_uid)) {
\r
123 $override_order = "$date_sort_field";
\r
125 $override_order = "$date_sort_field DESC";
\r
130 if (get_pref($this->link, 'REVERSE_HEADLINES', $owner_uid)) {
\r
131 $override_order = "title DESC, $date_sort_field";
\r
133 $override_order = "title, $date_sort_field DESC";
\r
138 if (get_pref($this->link, 'REVERSE_HEADLINES', $owner_uid)) {
\r
139 $override_order = "score, $date_sort_field";
\r
141 $override_order = "score DESC, $date_sort_field DESC";
\r
146 if ($_REQUEST["debug"]) $timing_info = print_checkpoint("04", $timing_info);
\r
148 $ret = format_headlines_list($this->link, $feed, $method,
\r
149 $view_mode, $limit, $cat_view, $next_unread_feed, $offset,
\r
150 $vgroup_last_feed, $override_order);
\r
152 $topmost_article_ids = $ret[0];
\r
153 $headlines_count = $ret[1];
\r
154 $returned_feed = $ret[2];
\r
155 $disable_cache = $ret[3];
\r
156 $vgroup_last_feed = $ret[4];
\r
158 $reply['headlines']['content'] =& $ret[5]['content'];
\r
159 $reply['headlines']['toolbar'] =& $ret[5]['toolbar'];
\r
161 if ($_REQUEST["debug"]) $timing_info = print_checkpoint("05", $timing_info);
\r
163 $reply['headlines-info'] = array("count" => (int) $headlines_count,
\r
164 "vgroup_last_feed" => $vgroup_last_feed,
\r
165 "disable_cache" => (bool) $disable_cache);
\r
167 if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info);
\r
169 if (is_array($topmost_article_ids) && !get_pref($this->link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) {
\r
170 $articles = array();
\r
172 foreach ($topmost_article_ids as $id) {
\r
173 array_push($articles, format_article($this->link, $id, false));
\r
176 $reply['articles'] = $articles;
\r
179 if ($_REQUEST["debug"]) $timing_info = print_checkpoint("30", $timing_info);
\r
181 $reply['runtime-info'] = make_runtime_info($this->link);
\r
183 print json_encode($reply);
\r