"; $lnum = 0; $total_unread = 0; while ($line = pg_fetch_assoc($result)) { $feed = $line["title"]; $feed_id = $line["id"]; $subop = $_GET["subop"]; $total = $line["total"]; $unread = $line["unread"]; $class = ($lnum % 2) ? "even" : "odd"; if ($unread > 0) $class .= "Unread"; $total_unread += $unread; print ""; $icon_file = ICONS_DIR . "/$feed_id.ico"; if ($subop != "piggie") { if (file_exists($icon_file) && filesize($icon_file) > 0) { $feed_icon = ""; } else { $feed_icon = " "; } } else { $feed_icon = ""; } $feed = "$feed"; if (ENABLE_FEED_ICONS) { print "$feed_icon"; } print "$feed"; print ""; print "$unread / "; print "$total"; print ""; print ""; ++$lnum; } // print " // Update all feeds"; // print " "; // print ""; print ""; print "
$total_unread
"; /* print "

All feeds: Update"; print " Mark as read

"; print "
$total_unread
"; */ } if ($op == "rpc") { $subop = $_GET["subop"]; if ($subop == "mark") { $mark = $_GET["mark"]; $id = pg_escape_string($_GET["id"]); if ($mark == "1") { $mark = "true"; } else { $mark = "false"; } $result = pg_query("UPDATE ttrss_entries SET marked = $mark WHERE id = '$id'"); } if ($subop == "updateFeed") { $feed_id = pg_escape_string($_GET["feed"]); $result = pg_query($link, "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'"); if (pg_num_rows($result) > 0) { $feed_url = pg_fetch_result($result, 0, "feed_url"); // update_rss_feed($link, $feed_url, $feed_id); } print "DONE-$feed_id"; return; } if ($subop == "forceUpdateAllFeeds") { update_all_feeds($link, true); outputFeedList($link); } if ($subop == "updateAllFeeds") { update_all_feeds($link, false); outputFeedList($link); } if ($subop == "catchupPage") { $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { pg_query("UPDATE ttrss_entries SET unread=false,last_read = NOW() WHERE id = '$id'"); } print "Marked active page as read."; } } if ($op == "feeds") { $subop = $_GET["subop"]; if ($subop == "catchupAll") { pg_query("UPDATE ttrss_entries SET last_read = NOW(),unread = false"); } outputFeedList($link); } if ($op == "view") { $id = $_GET["id"]; $result = pg_query("UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE id = '$id'"); $addheader = $_GET["addheader"]; $result = pg_query("SELECT title,link,content,feed_id,comments, (SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url FROM ttrss_entries WHERE id = '$id'"); if ($addheader) { print " Tiny Tiny RSS : Article $id "; } if ($result) { $line = pg_fetch_assoc($result); if ($line["icon_url"]) { $feed_icon = ""; } else { $feed_icon = " "; } print ""; print ""; if ($line["comments"] && $line["comments"] != $line["link"]) { $comments_prompt = "(Comments)"; } print ""; print ""; print "
Title: ".$line["title"]."  
Link: ".$line["link"]." $comments_prompt  
" . $line["content"] . " $feed_icon
"; } if ($addheader) { print ""; } } if ($op == "viewfeed") { $feed = $_GET["feed"]; $skip = $_GET["skip"]; $subop = $_GET["subop"]; $view_mode = $_GET["view"]; $addheader = $_GET["addheader"]; $limit = $_GET["limit"]; if (!$skip) $skip = 0; if ($subop == "undefined") $subop = ""; if ($addheader) { print " Tiny Tiny RSS : Feed $feed "; } // FIXME: check for null value here $result = pg_query("SELECT *,SUBSTRING(last_updated,1,16) as last_updated, EXTRACT(EPOCH FROM NOW()) - EXTRACT(EPOCH FROM last_updated) as update_timeout FROM ttrss_feeds WHERE id = '$feed'"); if ($result) { $line = pg_fetch_assoc($result); if ($subop == "ForceUpdate" || (!$subop && $line["update_timeout"] > MIN_UPDATE_TIME)) { update_rss_feed($link, $line["feed_url"], $feed); } else { if ($subop == "MarkAllRead") { pg_query("UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE feed_id = '$feed'"); } } } print ""; $feed_last_updated = "Updated: " . $line["last_updated"]; $search = $_GET["search"]; if ($search) { $search_query_part = "(upper(title) LIKE upper('%$search%') OR content LIKE '%$search%') AND"; } else { $search_query_part = ""; } $view_query_part = ""; if ($view_mode == "Starred") { $view_query_part = " marked = true AND "; } if ($view_mode == "Unread") { $view_query_part = " unread = true AND "; } $result = pg_query("SELECT count(id) AS total_entries FROM ttrss_entries WHERE $search_query_part feed_id = '$feed'"); $total_entries = pg_fetch_result($result, 0, "total_entries"); $result = pg_query("SELECT count(id) AS unread_entries FROM ttrss_entries WHERE $search_query_part unread = true AND feed_id = '$feed'"); $unread_entries = pg_fetch_result($result, 0, "unread_entries"); /* if ($limit < $unread_entries) $limit = $unread_entries; if ($limit != "All") { $limit_query_part = "LIMIT " . $limit; } */ $result = pg_query("SELECT id,title,updated,unread,feed_id,marked,link, EXTRACT(EPOCH FROM last_read) AS last_read_ts, EXTRACT(EPOCH FROM updated) AS updated_ts FROM ttrss_entries WHERE $search_query_part $view_query_part feed_id = '$feed' ORDER BY updated DESC $limit_query_part"); $lnum = 0; $num_unread = 0; while ($line = pg_fetch_assoc($result)) { $class = ($lnum % 2) ? "even" : "odd"; if ($line["last_read_ts"] < $line["updated_ts"] && $line["unread"] == "f") { $update_pic = "\"Updated\""; ++$num_unread; } else { $update_pic = " "; } if ($line["unread"] == "t") { $class .= "Unread"; ++$num_unread; } $id = $line["id"]; $feed_id = $line["feed_id"]; if ($line["marked"] == "t") { $marked_pic = "\"Reset"; } else { $marked_pic = "\"Set"; } $content_link = "" . $line["title"] . ""; print " print ""; print ""; print ""; print ""; print ""; print ""; ++$lnum; } if ($lnum == 0) { print ""; } while ($lnum < HEADLINES_PER_PAGE) { ++$lnum; print ""; } print "
$update_pic$marked_pic ".$line["updated"]."$content_link
No entries found.
 
"; $result = pg_query("SELECT id, (SELECT count(id) FROM ttrss_entries WHERE feed_id = ttrss_feeds.id) AS total, (SELECT count(id) FROM ttrss_entries WHERE feed_id = ttrss_feeds.id AND unread = true) as unread FROM ttrss_feeds WHERE id = '$feed'"); $total = pg_fetch_result($result, 0, "total"); $unread = pg_fetch_result($result, 0, "unread"); // update unread/total counters and status for active feed in the feedlist // kludge, because iframe doesn't seem to support onload() print ""; if ($addheader) { print ""; } } if ($op == "pref-rpc") { $subop = $_GET["subop"]; if ($subop == "unread") { $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { pg_query("UPDATE ttrss_entries SET unread = true WHERE feed_id = '$id'"); } print "Marked selected feeds as read."; } if ($subop == "read") { $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { pg_query("UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE feed_id = '$id'"); } print "Marked selected feeds as unread."; } } if ($op == "pref-feeds") { $subop = $_GET["subop"]; if ($subop == "editSave") { $feed_title = pg_escape_string($_GET["t"]); $feed_link = pg_escape_string($_GET["l"]); $feed_id = $_GET["id"]; $result = pg_query("UPDATE ttrss_feeds SET title = '$feed_title', feed_url = '$feed_link' WHERE id = '$feed_id'"); } if ($subop == "remove") { if (!WEB_DEMO_MODE) { $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { pg_query("BEGIN"); pg_query("DELETE FROM ttrss_entries WHERE feed_id = '$id'"); pg_query("DELETE FROM ttrss_feeds WHERE id = '$id'"); pg_query("COMMIT"); if (file_exists(ICONS_DIR . "/$id.ico")) { unlink(ICONS_DIR . "/$id.ico"); } } } } if ($subop == "add") { if (!WEB_DEMO_MODE) { $feed_link = pg_escape_string($_GET["link"]); $result = pg_query( "INSERT INTO ttrss_feeds (feed_url,title) VALUES ('$feed_link', '')"); $result = pg_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'"); $feed_id = pg_fetch_result($result, 0, "id"); if ($feed_id) { update_rss_feed($link, $feed_link, $feed_id); } } } print "
Add feed
"; $result = pg_query("SELECT id,title,feed_url,substring(last_updated,1,16) as last_updated FROM ttrss_feeds ORDER by title"); print "

"; print ""; $lnum = 0; while ($line = pg_fetch_assoc($result)) { $class = ($lnum % 2) ? "even" : "odd"; $feed_id = $line["id"]; $edit_feed_id = $_GET["id"]; if ($subop == "edit" && $feed_id != $edit_feed_id) { $class .= "Grayed"; } print ""; $icon_file = ICONS_DIR . "/$feed_id.ico"; if (file_exists($icon_file) && filesize($icon_file) > 0) { $feed_icon = ""; } else { $feed_icon = " "; } print ""; if (!$edit_feed_id || $subop != "edit") { print ""; print ""; print ""; } else if ($feed_id != $edit_feed_id) { print ""; print ""; print ""; } else { print ""; print ""; print ""; } if (!$line["last_updated"]) $line["last_updated"] = "Never"; print ""; print ""; ++$lnum; } if ($lnum == 0) { print ""; } print "
 SelectTitle LinkLast updated
$feed_icon" . $line["title"] . "" . $line["feed_url"] . "".$line["title"]."".$line["feed_url"]."" . $line["last_updated"] . "
No feeds defined.
"; print "

"; if ($subop == "edit") { print "Edit feed:  Cancel  Save"; } else { print " Selection:  Edit  Remove "; if (ENABLE_PREFS_CATCHUP_UNCATCHUP) { print " Mark as read  Mark as unread "; } print " All feeds:  Export OPML"; } } if ($op == "pref-filters") { $subop = $_GET["subop"]; if ($subop == "editSave") { $regexp = pg_escape_string($_GET["r"]); $descr = pg_escape_string($_GET["d"]); $match = pg_escape_string($_GET["m"]); $filter_id = pg_escape_string($_GET["id"]); $result = pg_query("UPDATE ttrss_filters SET regexp = '$regexp', description = '$descr', filter_type = (SELECT id FROM ttrss_filter_types WHERE description = '$match') WHERE id = '$filter_id'"); } if ($subop == "remove") { if (!WEB_DEMO_MODE) { $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { pg_query("DELETE FROM ttrss_filters WHERE id = '$id'"); } } } if ($subop == "add") { if (!WEB_DEMO_MODE) { $regexp = pg_escape_string($_GET["regexp"]); $match = pg_escape_string($_GET["match"]); $result = pg_query( "INSERT INTO ttrss_filters (regexp,filter_type) VALUES ('$regexp', (SELECT id FROM ttrss_filter_types WHERE description = '$match'))"); } } $result = pg_query("SELECT description FROM ttrss_filter_types ORDER BY description"); $filter_types = array(); while ($line = pg_fetch_assoc($result)) { array_push($filter_types, $line["description"]); } print "
"; print_select("fadd_match", "Title", $filter_types); print" Add filter
"; $result = pg_query("SELECT id,regexp,description, (SELECT name FROM ttrss_filter_types WHERE id = filter_type) as filter_type_name, (SELECT description FROM ttrss_filter_types WHERE id = filter_type) as filter_type_descr FROM ttrss_filters ORDER by regexp"); print "

"; print ""; $lnum = 0; while ($line = pg_fetch_assoc($result)) { $class = ($lnum % 2) ? "even" : "odd"; $filter_id = $line["id"]; $edit_filter_id = $_GET["id"]; if ($subop == "edit" && $filter_id != $edit_filter_id) { $class .= "Grayed"; } print ""; $line["regexp"] = htmlspecialchars($line["regexp"]); $line["description"] = htmlspecialchars($line["description"]); if (!$edit_filter_id || $subop != "edit") { if (!$line["description"]) $line["description"] = "[No description]"; print ""; print ""; print ""; print ""; } else if ($filter_id != $edit_filter_id) { if (!$line["description"]) $line["description"] = "[No description]"; print ""; print ""; print ""; print ""; } else { print ""; print ""; print ""; print ""; } print ""; ++$lnum; } if ($lnum == 0) { print ""; } print "
SelectFilter expression DescriptionMatch
" . $line["regexp"] . "" . $line["description"] . "".$line["filter_type_descr"]."".$line["regexp"]."".$line["description"]."".$line["filter_type_descr"].""; print_select("iedit_match", $line["filter_type_descr"], $filter_types); print "
No filters defined.
"; print "

"; if ($subop == "edit") { print "Edit feed:  Cancel  Save"; } else { print " Selection:  Edit  Remove "; } } pg_close($link); ?>