"; $result = pg_query($link, "SELECT *, (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 ORDER BY title"); $actid = $_GET["actid"]; // print ""; 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 ""; } print ""; print ""; print ""; */ print "
  • "; if (ENABLE_FEED_ICONS) { print "$feed_icon"; } print "$feed"; if ($unread != 0) { $fctr_class = ""; } else { $fctr_class = "class=\"invisible\""; } print " ($unread)"; print "
  • "; ++$lnum; } print "
    $feed_icon$feed"; print "$unread / "; print "$total"; print "
    "; print "
    $total_unread
    "; print "
    $actid
    "; } 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); } if ($subop == "updateAllFeeds") { update_all_feeds($link, false); } 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 "
    "; print ""; print ""; print "
    Title: " . $line["title"] . "
    Link: " . $line["link"] . "
    "; print "
    " . $feed_icon . "
    "; print "
    " . $line["content"] . "
    "; print "
    "; } 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_s, 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" || $line["last_updated"] == "" || $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 != "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 = "\"Updated\""; } 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 ""; ++$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:  "; } else { print " Selection:  "; if (ENABLE_PREFS_CATCHUP_UNCATCHUP) { print "  "; } print " All feeds: "; } } 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: "; } else { print " Selection: "; } } if ($op == "error") { print "

    "; $msg = $_GET["msg"]; print $msg; print "
    "; } pg_close($link); ?>