<?
session_start();
-
+
if ($_GET["debug"]) {
define('DEFAULT_ERROR_LEVEL', E_ALL);
} else {
exit;
}
- define('SCHEMA_VERSION', 2);
+ define('SCHEMA_VERSION', 5);
require_once "sanity_check.php";
require_once "config.php";
pg_query("set client_encoding = 'utf-8'");
}
+ if ($_SESSION["uid"]) {
+ if (get_pref($link, "HIDE_READ_FEEDS") == "true") {
+ setcookie("ttrss_vf_hreadf", 1);
+ } else {
+ setcookie("ttrss_vf_hreadf", 0);
+ }
+
+ setcookie('ttrss_vf_refresh', FEEDS_FRAME_REFRESH);
+ setcookie('ttrss_vf_daemon', ENABLE_UPDATE_DAEMON);
+ }
+
$fetch = $_GET["fetch"];
+ setcookie("ttrss_icons_url", ICONS_URL);
+
+ if (!sanity_check($link)) { return; }
+
function getAllCounters($link) {
getLabelCounters($link);
getFeedCounters($link);
getTagCounters($link);
getGlobalCounters($link);
+ if (get_pref($link, 'ENABLE_FEED_CATS')) {
+ getCategoryCounters($link);
+ }
}
+ function getCategoryCounters($link) {
+ $result = db_query($link, "SELECT cat_id,SUM((SELECT COUNT(int_id)
+ FROM ttrss_user_entries WHERE feed_id = ttrss_feeds.id
+ AND unread = true)) AS unread FROM ttrss_feeds
+ WHERE
+ owner_uid = ".$_SESSION["uid"]." GROUP BY cat_id");
+
+ while ($line = db_fetch_assoc($result)) {
+ $line["cat_id"] = sprintf("%d", $line["cat_id"]);
+ print "<counter type=\"category\" id=\"".$line["cat_id"]."\" counter=\"".
+ $line["unread"]."\"/>";
+ }
+ }
+
+ function getFeedUnread($link, $feed) {
+ $n_feed = sprintf("%d", $feed);
+
+ if ($n_feed == -1) {
+ $match_part = "marked = true";
+ } else if ($feed > 0) {
+ $match_part = "feed_id = '$n_feed'";
+ } else if ($feed < -10) {
+ $label_id = -$feed - 11;
+
+ $result = db_query($link, "SELECT sql_exp FROM ttrss_labels WHERE
+ id = '$label_id' AND owner_uid = " . $_SESSION["uid"]);
+
+ $match_part = db_fetch_result($result, 0, "sql_exp");
+ }
+
+ if ($match_part) {
+
+ $result = db_query($link, "SELECT count(int_id) AS unread
+ FROM ttrss_user_entries
+ WHERE unread = true AND $match_part AND owner_uid = " . $_SESSION["uid"]);
+
+ } else {
+
+ $result = db_query($link, "SELECT COUNT(post_int_id) AS unread
+ FROM ttrss_tags,ttrss_user_entries
+ WHERE tag_name = '$feed' AND post_int_id = int_id AND unread = true AND
+ ttrss_tags.owner_uid = " . $_SESSION["uid"]);
+ }
+
+ $unread = db_fetch_result($result, 0, "unread");
+ return $unread;
+ }
+
/* FIXME this needs reworking */
function getGlobalCounters($link) {
ttrss_user_entries.ref_id = ttrss_entries.id AND
owner_uid = " . $_SESSION["uid"]);
$c_id = db_fetch_result($result, 0, "c_id");
- print "<counter id='global-unread' counter='$c_id'/>";
+ print "<counter type=\"global\" id='global-unread' counter='$c_id'/>";
}
function getTagCounters($link, $smart_mode = SMART_RPC_COUNTERS) {
$tctrs_modified = false;
- $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
+/* $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
ttrss_user_entries.ref_id = ttrss_entries.id AND
ttrss_tags.owner_uid = ".$_SESSION["uid"]." AND
post_int_id = ttrss_user_entries.int_id AND unread = true GROUP BY tag_name
UNION
select tag_name,0 as count FROM ttrss_tags
- WHERE ttrss_tags.owner_uid = ".$_SESSION["uid"]);
+ WHERE ttrss_tags.owner_uid = ".$_SESSION["uid"]); */
+ $result = db_query($link, "SELECT tag_name,SUM((SELECT COUNT(int_id)
+ FROM ttrss_user_entries WHERE int_id = post_int_id
+ AND unread = true)) AS count FROM ttrss_tags
+ WHERE owner_uid = 2 GROUP BY tag_name ORDER BY tag_name");
+
$tags = array();
while ($line = db_fetch_assoc($result)) {
if (!$smart_mode || $old_counters[$tag] != $unread) {
$old_counters[$tag] = $unread;
$tctrs_modified = true;
- print "<tag id=\"$tag\" counter=\"$unread\"/>";
+ print "<counter type=\"tag\" id=\"$tag\" counter=\"$unread\"/>";
}
}
$count = db_fetch_result($result, 0, "count");
- print "<label id=\"-1\" counter=\"$count\"/>";
+ print "<counter type=\"label\" id=\"-1\" counter=\"$count\"/>";
$result = db_query($link, "SELECT owner_uid,id,sql_exp,description FROM
ttrss_labels WHERE owner_uid = ".$_SESSION["uid"]." ORDER by description");
if (!$smart_mode || $old_counters[$id] != $count) {
$old_counters[$id] = $count;
$lctrs_modified = true;
- print "<label id=\"$id\" counter=\"$count\"/>";
+ print "<counter type=\"label\" id=\"$id\" counter=\"$count\"/>";
}
error_reporting (DEFAULT_ERROR_LEVEL);
}
}
- function getFeedCounter($link, $id) {
+/* function getFeedCounter($link, $id) {
$result = db_query($link, "SELECT
- count(id) as count FROM ttrss_entries,ttrss_user_entries
+ count(id) as count,last_error
+ FROM ttrss_entries,ttrss_user_entries,ttrss_feeds
WHERE feed_id = '$id' AND unread = true
+ AND ttrss_user_entries.feed_id = ttrss_feeds.id
AND ttrss_user_entries.ref_id = ttrss_entries.id");
$count = db_fetch_result($result, 0, "count");
+ $last_error = htmlspecialchars(db_fetch_result($result, 0, "last_error"));
- print "<feed id=\"$id\" counter=\"$count\"/>";
- }
+ print "<counter type=\"feed\" id=\"$id\" counter=\"$count\" error=\"$last_error\"/>";
+ } */
function getFeedCounters($link, $smart_mode = SMART_RPC_COUNTERS) {
$old_counters = $_SESSION["fctr_last_value"];
- $result = db_query($link, "SELECT id,
+ $result = db_query($link, "SELECT id,last_error,parent_feed,
(SELECT count(id)
FROM ttrss_entries,ttrss_user_entries
- WHERE feed_id = ttrss_feeds.id AND ttrss_user_entries.ref_id = ttrss_entries.id
+ WHERE feed_id = ttrss_feeds.id AND
+ ttrss_user_entries.ref_id = ttrss_entries.id
AND unread = true AND owner_uid = ".$_SESSION["uid"].") as count
- FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"]);
+ FROM ttrss_feeds WHERE owner_uid = ".$_SESSION["uid"] . "
+ AND parent_feed IS NULL");
$fctrs_modified = false;
$id = $line["id"];
$count = $line["count"];
+ $last_error = htmlspecialchars($line["last_error"]);
+
+ $has_img = is_file(ICONS_DIR . "/$id.ico");
+
+ $tmp_result = db_query($link,
+ "SELECT id,COUNT(unread) AS unread
+ FROM ttrss_feeds LEFT JOIN ttrss_user_entries
+ ON (ttrss_feeds.id = ttrss_user_entries.feed_id)
+ WHERE parent_feed = '$id' AND unread = true GROUP BY ttrss_feeds.id");
+
+ if (db_num_rows($tmp_result) > 0) {
+ while ($l = db_fetch_assoc($tmp_result)) {
+ $count += $l["unread"];
+ }
+ }
if (!$smart_mode || $old_counters[$id] != $count) {
$old_counters[$id] = $count;
$fctrs_modified = true;
- print "<feed id=\"$id\" counter=\"$count\"/>";
+
+ if ($last_error) {
+ $error_part = "error=\"$last_error\"";
+ } else {
+ $error_part = "";
+ }
+
+ if ($has_img) {
+ $has_img_part = "hi=\"$has_img\"";
+ } else {
+ $has_img_part = "";
+ }
+
+ print "<counter type=\"feed\" id=\"$id\" counter=\"$count\" $has_img_part $error_part/>";
}
}
print "<script type=\"text/javascript\" src=\"functions.js\"></script>
<script type=\"text/javascript\" src=\"feedlist.js\"></script>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
+ <!--[if gte IE 5.5000]>
+ <script type=\"text/javascript\" src=\"pngfix.js\"></script>
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"tt-rss-ie.css\">
+ <![endif]-->
</head><body onload=\"init()\">";
print "<ul class=\"feedList\" id=\"feedList\">";
error_reporting (0);
- $tmp_result = db_query($link, "SELECT count(id) as count FROM ttrss_entries,ttrss_user_entries
+ $tmp_result = db_query($link, "SELECT count(id) as count
+ FROM ttrss_entries,ttrss_user_entries
WHERE (" . $line["sql_exp"] . ") AND unread = true AND
ttrss_user_entries.ref_id = ttrss_entries.id
AND owner_uid = '$owner_uid'");
$order_by_qpart = "title";
}
- $result = db_query($link, "SELECT *,
- (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
+ $result = db_query($link, "SELECT ttrss_feeds.*,
+ (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries
WHERE feed_id = ttrss_feeds.id AND
ttrss_user_entries.ref_id = ttrss_entries.id AND
owner_uid = '$owner_uid') AS total,
- (SELECT count(id) FROM ttrss_entries,ttrss_user_entries
+ (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries
WHERE feed_id = ttrss_feeds.id AND unread = true
AND ttrss_user_entries.ref_id = ttrss_entries.id
AND owner_uid = '$owner_uid') as unread,
- (SELECT title FROM ttrss_feed_categories
- WHERE id = cat_id) AS category
- FROM ttrss_feeds WHERE owner_uid = '$owner_uid' ORDER BY $order_by_qpart");
-
+ cat_id,last_error,
+ ttrss_feed_categories.title AS category,
+ ttrss_feed_categories.collapsed
+ FROM ttrss_feeds LEFT JOIN ttrss_feed_categories
+ ON (ttrss_feed_categories.id = cat_id)
+ WHERE
+ ttrss_feeds.owner_uid = '$owner_uid' AND parent_feed IS NULL
+ ORDER BY $order_by_qpart");
+
$actid = $_GET["actid"];
/* real feeds */
while ($line = db_fetch_assoc($result)) {
- $feed = $line["title"];
+ $feed = db_unescape_string($line["title"]);
$feed_id = $line["id"];
$subop = $_GET["subop"];
$total = $line["total"];
$unread = $line["unread"];
+ $tmp_result = db_query($link,
+ "SELECT id,COUNT(unread) AS unread
+ FROM ttrss_feeds LEFT JOIN ttrss_user_entries
+ ON (ttrss_feeds.id = ttrss_user_entries.feed_id)
+ WHERE parent_feed = '$feed_id' AND unread = true
+ GROUP BY ttrss_feeds.id");
+
+ if (db_num_rows($tmp_result) > 0) {
+ while ($l = db_fetch_assoc($tmp_result)) {
+ $unread += $l["unread"];
+ }
+ }
+
+ $cat_id = $line["cat_id"];
+
$tmp_category = $line["category"];
if (!$tmp_category) {
}
// $class = ($lnum % 2) ? "even" : "odd";
-
- $class = "feed";
+
+ if ($line["last_error"]) {
+ $class = "error";
+ } else {
+ $class = "feed";
+ }
if ($unread > 0) $class .= "Unread";
}
$category = $tmp_category;
+
+ $collapsed = $line["collapsed"];
+
+ // workaround for NULL category
+ if ($category == "Uncategorized") {
+ if ($_COOKIE["ttrss_vf_uclps"] == 1) {
+ $collapsed = "t";
+ }
+ }
+
+ if ($collapsed == "t" || $collapsed == "1") {
+ $holder_class = "invisible";
+ $ellipsis = "...";
+ } else {
+ $holder_class = "";
+ $ellipsis = "";
+ }
+
+ if ($cat_id) {
+ $cat_id_qpart = "cat_id = '$cat_id'";
+ } else {
+ $cat_id_qpart = "cat_id IS NULL";
+ }
+
+ $tmp_result = db_query($link, "SELECT count(int_id) AS unread
+ FROM ttrss_user_entries,ttrss_feeds WHERE
+ unread = true AND
+ feed_id = ttrss_feeds.id AND $cat_id_qpart AND
+ ttrss_user_entries.owner_uid = " . $_SESSION["uid"]);
+
+ $cat_unread = db_fetch_result($tmp_result, 0, "unread");
+
+ $cat_id = sprintf("%d", $cat_id);
- print "<li class=\"feedCat\">$category</li>";
- print "<li id=\"feedCatHolder\"><ul class=\"feedCatList\">";
+ print "<li class=\"feedCat\" id=\"FCAT-$cat_id\">
+ <a href=\"javascript:toggleCollapseCat($cat_id)\">$tmp_category
+ <span id=\"FCATCTR-$cat_id\"
+ class=\"$catctr_class\">($cat_unread unread)$ellipsis</span></a></li>";
+
+ // !!! NO SPACE before <ul...feedCatList - breaks firstChild DOM function
+ // -> keyboard navigation, etc.
+ print "<li id=\"feedCatHolder\" class=\"$holder_class\"><ul class=\"feedCatList\" id=\"FCATLIST-$cat_id\">";
}
printFeedEntry($feed_id, $class, $feed, $unread,
// tags
- $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
+/* $result = db_query($link, "SELECT tag_name,count(ttrss_entries.id) AS count
FROM ttrss_tags,ttrss_entries,ttrss_user_entries WHERE
post_int_id = ttrss_user_entries.int_id AND
unread = true AND ref_id = ttrss_entries.id
AND ttrss_tags.owner_uid = '$owner_uid' GROUP BY tag_name
UNION
select tag_name,0 as count FROM ttrss_tags WHERE owner_uid = '$owner_uid'
- ORDER BY tag_name");
-
+ ORDER BY tag_name"); */
+
+ $result = db_query($link, "SELECT tag_name,SUM((SELECT COUNT(int_id)
+ FROM ttrss_user_entries WHERE int_id = post_int_id
+ AND unread = true)) AS count FROM ttrss_tags
+ WHERE owner_uid = 2 GROUP BY tag_name ORDER BY tag_name");
+
$tags = array();
while ($line = db_fetch_assoc($result)) {
$subop = $_GET["subop"];
+ if ($subop == "setpref") {
+ if (WEB_DEMO_MODE) {
+ return;
+ }
+
+ print "<rpc-reply>";
+
+ $key = db_escape_string($_GET["key"]);
+ $value = db_escape_string($_GET["value"]);
+
+ set_pref($link, $key, $value);
+
+ print "<param-set key=\"$key\" value=\"$value\"/>";
+
+ print "</rpc-reply>";
+
+ }
+
if ($subop == "getLabelCounters") {
$aid = $_GET["aid"];
print "<rpc-reply>";
}
if ($subop == "forceUpdateAllFeeds" || $subop == "updateAllFeeds") {
-
- update_all_feeds($link, $subop == "forceUpdateAllFeeds");
+
+ if (ENABLE_UPDATE_DAEMON) {
+
+ if ($subop == "forceUpdateAllFeeds") {
+
+ $result = db_query($link, "SELECT count(id) AS cid FROM
+ ttrss_scheduled_updates WHERE feed_id IS NULL AND
+ owner_uid = " . $_SESSION["uid"]);
+
+ $cid = db_fetch_result($result, 0, "cid");
+
+# print "<rpc-reply>";
+
+ if ($cid == 0) {
+
+ db_query($link, "INSERT INTO ttrss_scheduled_updates
+ (owner_uid, feed_id, entered) VALUES
+ (".$_SESSION["uid"].", NULL, NOW())");
+
+// print "<!-- ScheduledOK -->";
+
+ } else {
+// print "<!-- RequestAlreadyInQueue -->";
+ }
+
+# print "</rpc-reply>";
+ }
+
+ } else {
+ update_all_feeds($link, $subop == "forceUpdateAllFeeds");
+ }
$omode = $_GET["omode"];
if (strchr($omode, "l")) getLabelCounters($link);
if (strchr($omode, "f")) getFeedCounters($link);
if (strchr($omode, "t")) getTagCounters($link);
+ if (get_pref($link, 'ENABLE_FEED_CATS')) {
+ getCategoryCounters($link);
+ }
getGlobalCounters($link);
print "</rpc-reply>";
+
}
/* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */
}
if ($subop == "sanityCheck") {
-
- $error_code = 0;
-
- $result = db_query($link, "SELECT schema_version FROM ttrss_version");
-
- $schema_version = db_fetch_result($result, 0, "schema_version");
-
- if ($schema_version != SCHEMA_VERSION) {
- $error_code = 5;
+ if (sanity_check($link)) {
+ print "<error error-code=\"0\"/>";
}
-
- print "<error error-code='$error_code'/>";
}
if ($subop == "globalPurge") {
last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]);
}
+ if ($subop == "collapse") {
+ $cat_id = db_escape_string($_GET["cid"]);
+
+ db_query($link, "UPDATE ttrss_feed_categories SET
+ collapsed = NOT collapsed WHERE id = '$cat_id' AND owner_uid = " .
+ $_SESSION["uid"]);
+ return;
+ }
+
outputFeedList($link, $tags);
}
} else {
$comments_url = $line["link"];
}
- $entry_comments = "(<a href=\"$comments_url\">$num_comments comments</a>)";
+ $entry_comments = "<a href=\"$comments_url\">$num_comments comments</a>";
} else {
if ($line["comments"] && $line["link"] != $line["comments"]) {
- $entry_comments = "(<a href=\"".$line["comments"]."\">Comments</a>)";
+ $entry_comments = "<a href=\"".$line["comments"]."\">comments</a>";
}
}
print "<div class=\"postHeader\"><table width=\"100%\">";
- print "<tr><td>" . $line["title"] . "</td>";
+ print "<tr><td><a href=\"" . $line["link"] . "\">" . $line["title"] . "</a></td>";
$parsed_updated = date(get_pref($link, 'LONG_DATE_FORMAT'),
strtotime($line["updated"]));
$tags_str = preg_replace("/, $/", "", $tags_str);
$f_tags_str = preg_replace("/, $/", "", $f_tags_str);
- print "<tr><td width='50%'>
- <a href=\"" . $line["link"] . "\">".$line["link"]."</a>
- $entry_comments</td>
- <td align=\"right\">$tags_str</td></tr>";
+// $truncated_link = truncate_string($line["link"], 60);
-/* if ($tags_str) {
- print "<tr><td><b>Tags:</b></td>
- <td width='100%'>$tags_str</td></tr>";
- } */
+ if ($tags_str || $entry_comments) {
+ print "<tr><td width='50%'>
+ $entry_comments</td>
+ <td align=\"right\">$tags_str</td></tr>";
+ }
print "</table></div>";
$view_mode = $_GET["view"];
$addheader = $_GET["addheader"];
$limit = $_GET["limit"];
- $omode = $_GET["omode"];
-
- if ($omode == "xml") {
- header("Content-Type: application/xml");
- }
if (!$feed) {
return;
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<script type=\"text/javascript\" src=\"functions.js\"></script>
<script type=\"text/javascript\" src=\"viewfeed.js\"></script>
+ <!--[if gte IE 5.5000]>
+ <script type=\"text/javascript\" src=\"pngfix.js\"></script>
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"tt-rss-ie.css\">
+ <![endif]-->
</head><body onload='init()'>";
}
if ($subop == "ForceUpdate" && sprintf("%d", $feed) > 0) {
- $tmp_result = db_query($link, "SELECT feed_url FROM ttrss_feeds
- WHERE id = '$feed'");
+/* if (ENABLE_UPDATE_DAEMON) {
- $feed_url = db_fetch_result($tmp_result, 0, "feed_url");
+ if ($cid == 0) {
- update_rss_feed($link, $feed_url, $feed);
+ db_query($link, "INSERT INTO ttrss_scheduled_updates
+ (owner_uid, feed_id, entered) VALUES
+ (".$_SESSION["uid"].", '$feed', NOW())");
+ }
+
+ } else {
+ // fixme update_rss_feed...
+ } */
+ $tmp_result = db_query($link, "SELECT feed_url FROM ttrss_feeds
+ WHERE id = '$feed'");
+ $feed_url = db_fetch_result($tmp_result, 0, "feed_url");
+ update_rss_feed($link, $feed_url, $feed, ENABLE_UPDATE_DAEMON);
}
if ($subop == "MarkAllRead") {
if (sprintf("%d", $feed) != 0) {
if ($feed > 0) {
- db_query($link, "UPDATE ttrss_user_entries
- SET unread = false,last_read = NOW()
- WHERE feed_id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
+
+ $tmp_result = db_query($link, "SELECT id
+ FROM ttrss_feeds WHERE parent_feed = '$feed'
+ ORDER BY cat_id,title");
+
+ $parent_ids = array();
+
+ if (db_num_rows($tmp_result) > 0) {
+ while ($p = db_fetch_assoc($tmp_result)) {
+ array_push($parent_ids, "feed_id = " . $p["id"]);
+ }
+
+ $children_qpart = implode(" OR ", $parent_ids);
+
+ db_query($link, "UPDATE ttrss_user_entries
+ SET unread = false,last_read = NOW()
+ WHERE (feed_id = '$feed' OR $children_qpart)
+ AND owner_uid = " . $_SESSION["uid"]);
+
+ } else {
+ db_query($link, "UPDATE ttrss_user_entries
+ SET unread = false,last_read = NOW()
+ WHERE feed_id = '$feed' AND owner_uid = " . $_SESSION["uid"]);
+ }
} else if ($feed < 0 && $feed > -10) { // special, like starred
$search_mode = db_escape_string($_GET["smode"]);
if ($search) {
- $search_query_part = "(upper(title) LIKE upper('%$search%')
- OR content LIKE '%$search%') AND";
+ $search_query_part = "(upper(ttrss_entries.title) LIKE upper('%$search%')
+ OR ttrss_entries.content LIKE '%$search%') AND";
} else {
$search_query_part = "";
}
$view_query_part = "";
+ if ($view_mode == "Adaptive") {
+ if ($search) {
+ $view_query_part = " ";
+ } else if ($feed != -1) {
+ $unread = getFeedUnread($link, $feed);
+ if ($unread > 0) {
+ $view_query_part = " unread = true AND ";
+ }
+ }
+ }
+
if ($view_mode == "Starred") {
$view_query_part = " marked = true AND ";
}
$view_query_part = " unread = true AND ";
}
- if ($view_mode == "Unread or Starred") {
- $view_query_part = " (unread = true OR marked = true) AND ";
- }
-
- if ($view_mode == "Unread or Updated") {
- $view_query_part = " (unread = true OR last_read is NULL) AND ";
- }
-
-/* $result = db_query($link, "SELECT count(id) AS total_entries
- FROM ttrss_entries WHERE
- $search_query_part
- feed_id = '$feed'");
-
- $total_entries = db_fetch_result($result, 0, "total_entries"); */
-
-/* $result = db_query("SELECT count(id) AS unread_entries
- FROM ttrss_entries WHERE
- $search_query_part
- unread = true AND
- feed_id = '$feed'");
-
- $unread_entries = db_fetch_result($result, 0, "unread_entries"); */
-
if ($limit && $limit != "All") {
$limit_query_part = "LIMIT " . $limit;
}
// override query strategy and enable feed display when searching globally
if ($search && $search_mode == "All feeds") {
- $query_strategy_part = "id > 0";
- $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
- id = feed_id) as feed_title,";
+ $query_strategy_part = "ttrss_entries.id > 0";
+ $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
} else if (sprintf("%d", $feed) == 0) {
$query_strategy_part = "ttrss_entries.id > 0";
$vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
id = feed_id) as feed_title,";
} else if ($feed >= 0) {
- $query_strategy_part = "feed_id = '$feed'";
+
+ $tmp_result = db_query($link, "SELECT id
+ FROM ttrss_feeds WHERE parent_feed = '$feed'
+ ORDER BY cat_id,title");
+
+ $parent_ids = array();
+
+ if (db_num_rows($tmp_result) > 0) {
+ while ($p = db_fetch_assoc($tmp_result)) {
+ array_push($parent_ids, "feed_id = " . $p["id"]);
+ }
+
+ $query_strategy_part = sprintf("(feed_id = %d OR %s)",
+ $feed, implode(" OR ", $parent_ids));
+
+ $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
+ } else {
+ $query_strategy_part = "feed_id = '$feed'";
+ }
} else if ($feed == -1) { // starred virtual feed
$query_strategy_part = "marked = true";
- $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
- id = feed_id) as feed_title,";
+ $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
} else if ($feed <= -10) { // labels
$label_id = -$feed - 11;
$query_strategy_part = db_fetch_result($tmp_result, 0, "sql_exp");
- $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
- id = feed_id) as feed_title,";
+ $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
} else {
$query_strategy_part = "id > 0"; // dumb
}
$feed_title = "";
if ($search && $search_mode == "All feeds") {
- $feed_title = "Search results";
- } else if (sprintf("%d", $feed) == 0) {
- $feed_title = $feed;
+ $feed_title = "Global search results ($search)";
+ } else if ($search && sprintf("%d", $feed) == 0) {
+ $feed_title = "Feed search results ($search, $feed)";
} else if ($feed > 0) {
- $result = db_query($link, "SELECT title,site_url FROM ttrss_feeds
+ $result = db_query($link, "SELECT title,site_url,last_error FROM ttrss_feeds
WHERE id = '$feed'");
$feed_title = db_fetch_result($result, 0, "title");
$feed_site_url = db_fetch_result($result, 0, "site_url");
+ $last_error = db_fetch_result($result, 0, "last_error");
} else if ($feed == -1) {
$feed_title = "Starred articles";
if ($feed < -10) error_reporting (0);
+ print "<div id=\"headlinesContainer\">";
+
if (sprintf("%d", $feed) != 0) {
if ($feed > 0) {
$feed_kind = "Labels";
}
- if (!$vfeed_query_part) {
- $content_query_part = "SUBSTRING(content,1,300) as content_preview,";
- } else {
- $content_query_part = "";
- }
+// if (!$vfeed_query_part) {
+ $content_query_part = "content as content_preview,";
+// } else {
+// $content_query_part = "";
+// }
$result = db_query($link, "SELECT
- id,title,
+ ttrss_entries.id,ttrss_entries.title,
SUBSTRING(updated,1,16) as updated,
unread,feed_id,marked,link,last_read,
SUBSTRING(last_read,1,19) as last_read_noms,
$content_query_part
SUBSTRING(updated,1,19) as updated_noms
FROM
- ttrss_entries,ttrss_user_entries
+ ttrss_entries,ttrss_user_entries,ttrss_feeds
WHERE
+ ttrss_user_entries.feed_id = ttrss_feeds.id AND
ttrss_user_entries.ref_id = ttrss_entries.id AND
- owner_uid = '".$_SESSION["uid"]."' AND
+ ttrss_user_entries.owner_uid = '".$_SESSION["uid"]."' AND
$search_query_part
$view_query_part
$query_strategy_part ORDER BY $order_by
ttrss_entries.id as id,title,
SUBSTRING(updated,1,16) as updated,
unread,feed_id,
- marked,link,last_read,
+ marked,link,last_read,
SUBSTRING(last_read,1,19) as last_read_noms,
$vfeed_query_part
$content_query_part
}
if (!$result) {
- if ($omode != "xml") {
- print "<div align='center'>
- Could not display feed (query failed). Please check label match syntax or local configuration.</div>";
- return;
- } else {
- print "<error error-code=\"8\"/>";
-
- }
+ print "<div align='center'>
+ Could not display feed (query failed). Please check label match syntax or local configuration.</div>";
+ return;
}
if (db_num_rows($result) > 0) {
- if ($omode != "xml") {
+ print "<table class=\"headlinesSubToolbar\"
+ width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
+
+ if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
- print "<table class=\"headlinesSubToolbar\"
- width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
-
print "<td class=\"headlineActions\">
Select:
- <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
- 'RROW-', 'RCHK-', true)\">All</a>,
- <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
- 'RROW-', 'RCHK-', true, 'Unread')\">Unread</a>,
- <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
- 'RROW-', 'RCHK-', false)\">None</a>
-
- Toggle: <a href=\"javascript:selectionToggleUnread()\">Unread</a>,
- <a href=\"javascript:selectionToggleMarked()\">Starred</a>";
-
+ <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
+ 'RROW-', 'RCHK-', true, '', true)\">All</a>,
+ <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
+ 'RROW-', 'RCHK-', true, 'Unread', true)\">Unread</a>,
+ <a href=\"javascript:selectTableRowsByIdPrefix('headlinesList',
+ 'RROW-', 'RCHK-', false)\">None</a>
+
+ Toggle: <a href=\"javascript:selectionToggleUnread()\">Unread</a>,
+ <a href=\"javascript:selectionToggleMarked()\">Starred</a>";
print "</td>";
-
- print "<td class=\"headlineTitle\">";
-
- if ($feed_site_url) {
- print "<a target=\"_blank\" href=\"$feed_site_url\">$feed_title</a>";
- } else {
- print $feed_title;
- }
-
+
+ } else {
+
+ print "<td class=\"headlineActions\">
+ Select:
+ <a href=\"javascript:cdmSelectArticles('all')\">All</a>,
+ <a href=\"javascript:cdmSelectArticles('unread')\">Unread</a>,
+ <a href=\"javascript:cdmSelectArticles('none')\">None</a>
+
+ Toggle: <a href=\"javascript:selectionToggleUnread(true)\">Unread</a>,
+ <a href=\"javascript:selectionToggleMarked(true)\">Starred</a>";
+
print "</td>";
- print "</tr></table>";
+
+
+ }
+
+ if ($last_error) {
+ print "<td align='center' class='small'>
+ <a class=\"warning\" href=\"javascript:alert('TT-RSS encountered an error while trying to update this feed.\\n\\n$last_error')\">Could not update this feed.</a></td>";
+ }
+
+ print "<td class=\"headlineTitle\">";
+ if ($feed_site_url) {
+ print "<a target=\"_blank\" href=\"$feed_site_url\">$feed_title</a>";
+ } else {
+ print $feed_title;
+ }
+
+ print "</td>";
+ print "</tr></table>";
+
+ if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
print "<table class=\"headlinesList\" id=\"headlinesList\"
cellspacing=\"0\" width=\"100%\">";
-
- } else {
- print "<headlines feed=\"$feed\" title=\"$feed_title\" site_url=\"$feed_site_url\">";
}
-
+
$lnum = 0;
error_reporting (DEFAULT_ERROR_LEVEL);
if ($line["unread"] == "t" || $line["unread"] == "1") {
$class .= "Unread";
++$num_unread;
- $is_unread = 'true';
+ $is_unread = true;
} else {
- $is_unread = 'false';
+ $is_unread = false;
}
if ($line["marked"] == "t" || $line["marked"] == "1") {
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
$content_preview = truncate_string(strip_tags($line["content_preview"]),
- 200);
+ 100);
}
- if ($omode != "xml") {
+ if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
print "<tr class='$class' id='RROW-$id'>";
- // onclick=\"javascript:view($id,$feed_id)\">
print "<td class='hlUpdatePic'>$update_pic</td>";
if ($line["feed_title"]) {
print "<td class='hlContent'>$content_link</td>";
print "<td class='hlFeed'>
- <a href='javascript:viewfeed($feed_id)'>".$line["feed_title"]."</a> </td>";
+ <a href='javascript:viewfeed($feed_id)'>".
+ $line["feed_title"]."</a> </td>";
} else {
print "<td class='hlContent' valign='middle'>";
print "</tr>";
} else {
+
+ if ($is_unread) {
+ $add_class = "Unread";
+ } else {
+ $add_class = "";
+ }
+
+ print "<div class=\"cdmArticle$add_class\" id=\"RROW-$id\">";
+
+ print "<div class=\"cdmHeader\">";
- print "<entry unread='$is_unread' id='$id'>";
- print "<title><![CDATA[" . $line["title"] . "]]></title>";
- print "<link>" . $line["link"] . "</link>";
- print "<updated>$updated_fmt</updated>";
- if ($content_preview) {
- print "<preview><![CDATA[ $content_preview ]]></preview>";
- }
+ print "<div style=\"float : right\">$updated_fmt</div>";
+
+ print "<a target=\"new\" href=\"".$line["link"]."\">".$line["title"]."</a>";
- if ($line["feed_title"]) {
- print "<feed id='$feed_id'><![CDATA[" . $line["feed_title"] . "]]></feed>";
+ if ($line["feed_title"]) {
+ print " (<a href='javascript:viewfeed($feed_id)'>".$line["feed_title"]."</a>)";
}
- print "</entry>";
- }
-
+ print "</div>";
+
+ print "<div class=\"cdmContent\">" . $line["content_preview"] . "</div>";
+
+ print "<div style=\"float : right\">$marked_pic</div>
+ <div class=\"cdmFooter\">
+ <input type=\"checkbox\" onclick=\"toggleSelectRowById(this,
+ 'RROW-$id')\" class=\"feedCheckBox\" id=\"RCHK-$id\"></div>";
+
+ print "</div>";
+
+ }
++$lnum;
}
- if ($omode != "xml") {
+ if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
print "</table>";
- } else {
- print "</headlines>";
}
} else {
print "<div width='100%' align='center'>No articles found.</div>";
}
- if ($omode != "xml") {
+ print "</div>";
- print "<script type=\"text/javascript\">
- document.onkeydown = hotkey_handler;
- update_all_counters('$feed');
- </script>";
+ print "<script type=\"text/javascript\">
+ document.onkeydown = hotkey_handler;
+ update_all_counters('$feed');
+ </script>";
- if ($addheader) {
- print "</body></html>";
- }
+ if ($addheader) {
+ print "</body></html>";
}
}
feed_id = '$id' AND owner_uid = ".$_SESSION["uid"]);
}
- print "Marked selected feeds as read.";
+ print "Marked selected feeds as read.";
+
+ }
+
+ }
+
+ if ($op == "pref-feeds") {
+
+ $subop = $_REQUEST["subop"];
+ $quiet = $_REQUEST["quiet"];
+
+ if ($subop == "massSubscribe") {
+ $ids = split(",", db_escape_string($_GET["ids"]));
+
+ $subscribed = array();
+
+ foreach ($ids as $id) {
+ $result = db_query($link, "SELECT feed_url,title FROM ttrss_feeds
+ WHERE id = '$id'");
+
+ $feed_url = db_fetch_result($result, 0, "feed_url");
+ $title = db_fetch_result($result, 0, "title");
+
+ $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
+ feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
+
+ if (db_num_rows($result) == 0) {
+ $result = db_query($link,
+ "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id)
+ VALUES ('".$_SESSION["uid"]."', '$feed_url', '$title', NULL)");
+
+ array_push($subscribed, $title);
+ }
+ }
+
+ if (count($subscribed) > 0) {
+ print "<div class=\"notice\">";
+ print "<b>Subscribed to feeds:</b>";
+ print "<ul class=\"nomarks\">";
+ foreach ($subscribed as $title) {
+ print "<li>$title</li>";
+ }
+ print "</ul>";
+ print "</div>";
+ }
+ }
+
+ if ($subop == "browse") {
+
+ if (!ENABLE_FEED_BROWSER) {
+ print "Feed browser is administratively disabled.";
+ return;
+ }
+
+ print "<div class=\"infoBoxContents\">";
+
+ print "<h1>Feed browser</h1>";
+
+ print "<p>Showing top 50 registered feeds, sorted by popularity:</p>";
+
+ $result = db_query($link, "SELECT feed_url,count(id) AS subscribers
+ FROM ttrss_feeds
+ WHERE auth_login = '' AND auth_pass = '' AND private = false
+ GROUP BY feed_url ORDER BY subscribers DESC LIMIT 50");
+
+ print "<ul class='browseFeedList' id='browseFeedList'>";
+
+ $feedctr = 0;
+
+ while ($line = db_fetch_assoc($result)) {
+ $feed_url = $line["feed_url"];
+ $subscribers = $line["subscribers"];
+
+ $sub_result = db_query($link, "SELECT id
+ FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid =" .
+ $_SESSION["uid"]);
+
+ if (db_num_rows($sub_result) > 0) {
+ continue; // already subscribed
+ }
+
+ $det_result = db_query($link, "SELECT site_url,title,id
+ FROM ttrss_feeds WHERE feed_url = '$feed_url' LIMIT 1");
+
+ $details = db_fetch_assoc($det_result);
+
+ $icon_file = ICONS_DIR . "/" . $details["id"] . ".ico";
+
+ if (file_exists($icon_file) && filesize($icon_file) > 0) {
+ $feed_icon = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL .
+ "/".$details["id"].".ico\">";
+ } else {
+ $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
+ }
+
+ $check_box = "<input onclick='toggleSelectListRow(this)' class='feedBrowseCB'
+ type=\"checkbox\" id=\"FBCHK-" . $details["id"] . "\">";
+
+ $class = ($feedctr % 2) ? "even" : "odd";
+
+ print "<li class='$class' id=\"FBROW-".$details["id"]."\">$check_box".
+ "$feed_icon " . db_unescape_string($details["title"]) .
+ " <span class='subscribers'>($subscribers)</span></li>";
+
+ ++$feedctr;
+ }
+
+ if ($feedctr == 0) {
+ print "<li>No feeds found to subscribe.</li>";
+ }
- }
+ print "</ul>";
- }
+ print "<div align='center'>
+ <input type=\"submit\" class=\"button\"
+ onclick=\"feedBrowserSubscribe()\" value=\"Subscribe\">
+ <input type='submit' class='button'
+ onclick=\"closeInfoBox()\" value=\"Cancel\"></div>";
- if ($op == "pref-feeds") {
-
- $subop = $_GET["subop"];
- $quiet = $_GET["quiet"];
+ print "</div>";
+ return;
+ }
if ($subop == "editfeed") {
$feed_id = db_escape_string($_GET["id"]);
print "<td><input id=\"iedit_updintl\"
value=\"$update_interval\"></td></tr>";
+ $row_class = toggleEvenOdd($row_class);
+ print "<tr class='$row_class'><td>Link to:</td>";
+
+ $tmp_result = db_query($link, "SELECT COUNT(id) AS count
+ FROM ttrss_feeds WHERE parent_feed = '$feed_id'");
+
+ $linked_count = db_fetch_result($tmp_result, 0, "count");
+
+ $parent_feed = db_fetch_result($result, 0, "parent_feed");
+
+ if ($linked_count > 0) {
+ $disabled = "disabled";
+ }
+
+ print "<select $disabled id=\"iedit_parent_feed\">";
+
+ print "<option id=\"0\">Not linked</option>";
+
+ if (get_pref($link, 'ENABLE_FEED_CATS')) {
+ if ($cat_id) {
+ $cat_qpart = "AND cat_id = '$cat_id'";
+ } else {
+ $cat_qpart = "AND cat_id IS NULL";
+ }
+ }
+
+ $tmp_result = db_query($link, "SELECT id,title FROM ttrss_feeds
+ WHERE id != '$feed_id' AND owner_uid = ".$_SESSION["uid"]."
+ $cat_qpart ORDER BY title");
+
+ if (db_num_rows($tmp_result) > 0) {
+ print "<option disabled>--------</option>";
+ }
+
+ while ($tmp_line = db_fetch_assoc($tmp_result)) {
+ if ($tmp_line["id"] == $parent_feed) {
+ $is_selected = "selected";
+ } else {
+ $is_selected = "";
+ }
+ printf("<option $is_selected id='%d'>%s</option>",
+ $tmp_line["id"], $tmp_line["title"]);
+ }
+
+ print "</select></td>";
+ print "</td></tr>";
+
$purge_interval = db_fetch_result($result, 0, "purge_interval");
$row_class = toggleEvenOdd($row_class);
print "<td><input id=\"iedit_purgintl\"
value=\"$purge_interval\"></td></tr>";
+// print "<tr><td colspan=\"2\"><b>Authentication</b></td></tr>";
+
+ $row_class = toggleEvenOdd($row_class);
+ $auth_login = db_fetch_result($result, 0, "auth_login");
+
+ print "<tr class='$row_class'><td>Login:</td>";
+ print "<td><input id=\"iedit_login\"
+ value=\"$auth_login\"></td></tr>";
+
+ $row_class = toggleEvenOdd($row_class);
+ $auth_pass = db_fetch_result($result, 0, "auth_pass");
+
+ print "<tr class='$row_class'><td>Password:</td>";
+ print "<td><input type=\"password\" id=\"iedit_pass\"
+ value=\"$auth_pass\"></td></tr>";
+
+ $row_class = toggleEvenOdd($row_class);
+ $private = sql_bool_to_bool(db_fetch_result($result, 0, "private"));
+
+ if ($private) {
+ $checked = "checked";
+ } else {
+ $checked = "";
+ }
+
+ print "<tr class='$row_class'><td>Options:</td>";
+ print "<td><input type=\"checkbox\" id=\"iedit_private\"
+ $checked><label for=\"iedit_private\">Hide from feed browser</label>
+ </td></tr>";
+
print "</table>";
print "</div>";
print "<div align='center'>
- <input type='submit' class='button'
- onclick=\"feedEditCancel()\" value=\"Cancel\">
<input type=\"submit\" class=\"button\"
- onclick=\"feedEditSave()\" value=\"Save\"></div>";
+ onclick=\"feedEditSave()\" value=\"Save\">
+ <input type='submit' class='button'
+ onclick=\"feedEditCancel()\" value=\"Cancel\"></div>";
return;
}
if ($subop == "editSave") {
- $feed_title = db_escape_string($_GET["t"]);
- $feed_link = db_escape_string($_GET["l"]);
- $upd_intl = db_escape_string($_GET["ui"]);
- $purge_intl = db_escape_string($_GET["pi"]);
- $feed_id = db_escape_string($_GET["id"]);
- $cat_id = db_escape_string($_GET["catid"]);
+ $feed_title = db_escape_string($_POST["t"]);
+ $feed_link = db_escape_string($_POST["l"]);
+ $upd_intl = db_escape_string($_POST["ui"]);
+ $purge_intl = db_escape_string($_POST["pi"]);
+ $feed_id = db_escape_string($_POST["id"]);
+ $cat_id = db_escape_string($_POST["catid"]);
+ $auth_login = db_escape_string($_POST["login"]);
+ $auth_pass = db_escape_string($_POST["pass"]);
+ $parent_feed = db_escape_string($_POST["pfeed"]);
+ $private = db_escape_string($_POST["is_pvt"]);
if (strtoupper($upd_intl) == "DEFAULT")
$upd_intl = 0;
$category_qpart = 'cat_id = NULL';
}
+ if ($parent_feed != 0) {
+ $parent_qpart = "parent_feed = '$parent_feed'";
+ } else {
+ $parent_qpart = 'parent_feed = NULL';
+ }
+
$result = db_query($link, "UPDATE ttrss_feeds SET
$category_qpart,
+ $parent_qpart,
title = '$feed_title', feed_url = '$feed_link',
update_interval = '$upd_intl',
- purge_interval = '$purge_intl'
+ purge_interval = '$purge_intl',
+ auth_login = '$auth_login',
+ auth_pass = '$auth_pass',
+ private = '$private'
WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
}
if (!WEB_DEMO_MODE) {
$feed_link = db_escape_string(trim($_GET["link"]));
+ $cat_id = db_escape_string($_GET["cid"]);
+
+ if ($cat_id == "0" || !$cat_id) {
+ $cat_qpart = "NULL";
+ } else {
+ $cat_qpart = "'$cat_id'";
+ }
$result = db_query($link,
"SELECT id FROM ttrss_feeds
if (db_num_rows($result) == 0) {
$result = db_query($link,
- "INSERT INTO ttrss_feeds (owner_uid,feed_url,title)
- VALUES ('".$_SESSION["uid"]."', '$feed_link', '')");
+ "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id)
+ VALUES ('".$_SESSION["uid"]."', '$feed_link',
+ '[Unknown]', $cat_qpart)");
$result = db_query($link,
- "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'
+ "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'
AND owner_uid = " . $_SESSION["uid"]);
$feed_id = db_fetch_result($result, 0, "id");
if (db_num_rows($result) > 0) {
print "<div class=\"warning\">";
-
+
+// print"<img class=\"closeButton\"
+// onclick=\"javascript:hideParentElement(this);\" src=\"images/close.png\">";
+
print "<a href=\"javascript:showBlockElement('feedUpdateErrors')\">
<b>Feeds with update errors</b> (click to expand)</a>";
onchange=\"javascript:addFeed()\"
size=\"40\">
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:addFeed()\" value=\"Add feed\">
- </td><td align='right'>
+ onclick=\"javascript:addFeed()\" value=\"Add feed\">";
+
+ if (ENABLE_FEED_BROWSER) {
+ print " (<a href='javascript:browseFeeds()'>Top 50</a>)";
+ }
+
+ print "</td><td align='right'>
<input id=\"feed_search\" size=\"20\"
onchange=\"javascript:updateFeedList()\"
value=\"$feed_search\">
$_SESSION["pref_sort_feeds"] = $feeds_sort;
if ($feed_search) {
- $search_qpart = "(UPPER(title) LIKE UPPER('%$feed_search%') OR
- UPPER(feed_url) LIKE UPPER('%$feed_search%')) AND";
+ $search_qpart = "(UPPER(F1.title) LIKE UPPER('%$feed_search%') OR
+ UPPER(F1.feed_url) LIKE UPPER('%$feed_search%')) AND";
} else {
$search_qpart = "";
}
$result = db_query($link, "SELECT
- id,title,feed_url,substring(last_updated,1,16) as last_updated,
- update_interval,purge_interval,cat_id,
- (SELECT title FROM ttrss_feed_categories
- WHERE id = cat_id) AS category
+ F1.id,
+ F1.title,
+ F1.feed_url,
+ substring(F1.last_updated,1,16) AS last_updated,
+ F1.parent_feed,
+ F1.update_interval,
+ F1.purge_interval,
+ F1.cat_id,
+ F2.title AS parent_title,
+ C1.title AS category
FROM
- ttrss_feeds
+ ttrss_feeds AS F1
+ LEFT JOIN ttrss_feeds AS F2
+ ON (F1.parent_feed = F2.id)
+ LEFT JOIN ttrss_feed_categories AS C1
+ ON (F1.cat_id = C1.id)
WHERE
- $search_qpart owner_uid = '".$_SESSION["uid"]."'
+ $search_qpart F1.owner_uid = '".$_SESSION["uid"]."'
ORDER by category,$feeds_sort,title");
if (db_num_rows($result) != 0) {
if (!get_pref($link, 'ENABLE_FEED_CATS')) {
print "<tr class=\"title\">
- <td width='5%' align='center'></td>
+ <td width='5%' align='center'> </td>
<td width='30%'><a href=\"javascript:updateFeedList('title')\">Title</a></td>
<td width='30%'><a href=\"javascript:updateFeedList('feed_url')\">Feed</a></td>
<td width='15%'><a href=\"javascript:updateFeedList('update_interval')\">Update Interval</a></td>
print "<tr><td colspan=\"6\" class=\"feedEditCat\">$edit_cat</td></tr>";
print "<tr class=\"title\">
- <td width='5%' align='center'></td>
+ <td width='5%' align='center'> </td>
<td width='30%'><a href=\"javascript:updateFeedList('title')\">Title</a></td>
<td width='30%'><a href=\"javascript:updateFeedList('feed_url')\">Feed</a></td>
<td width='15%'><a href=\"javascript:updateFeedList('update_interval')\">Update Interval</a></td>
$edit_title = truncate_string($edit_title, 40);
$edit_link = truncate_string($edit_link, 60);
+ $parent_title = $line["parent_title"];
+ if ($parent_title) {
+ $parent_title = "<span class='groupPrompt'>(linked to
+ $parent_title)</span>";
+ }
+
print "<td><a href=\"javascript:editFeed($feed_id);\">" .
- "$feed_icon $edit_title" . "</a></td>";
+ "$feed_icon $edit_title $parent_title" . "</a></td>";
print "<td><a href=\"javascript:editFeed($feed_id);\">" .
$edit_link . "</a></td>";
ttrss_filter_types.description AS filter_type_descr,
feed_id,
ttrss_filter_actions.description AS action_description,
- (SELECT title FROM ttrss_feeds WHERE id = feed_id) AS feed_title
+ ttrss_feeds.title AS feed_title
FROM
- ttrss_filters,ttrss_filter_types,ttrss_filter_actions
+ ttrss_filter_types,ttrss_filter_actions,ttrss_filters LEFT JOIN
+ ttrss_feeds ON (ttrss_filters.feed_id = ttrss_feeds.id)
WHERE
filter_type = ttrss_filter_types.id AND
ttrss_filter_actions.id = action_id AND
</td</tr>";
print "<tr class=\"title\">
- <td align='center' width=\"5%\"></td>
+ <td align='center' width=\"5%\"> </td>
<td width=\"20%\">Filter expression</td>
<td width=\"20%\">Feed</td>
<td width=\"15%\">Match</td>
print "<p>";
if ($subop == "edit") {
- print "Edit feed:
+ print "Edit filter:
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:filterEditCancel()\" value=\"Cancel\">
+ onclick=\"javascript:filterEditSave()\" value=\"Save\">
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:filterEditSave()\" value=\"Save\">";
+ onclick=\"javascript:filterEditCancel()\" value=\"Cancel\">";
} else {
</td</tr>";
print "<tr class=\"title\">
- <td align='center' width=\"5%\"></td><td width=\"40%\">SQL expression
+ <td align='center' width=\"5%\"> </td>
+ <td width=\"40%\">SQL expression
<a class=\"helpLink\" href=\"javascript:displayHelpInfobox(1)\">(?)</a>
</td>
<td width=\"40%\">Caption</td></tr>";
<input type=\"submit\" class=\"button\"
onclick=\"javascript:labelTest()\" value=\"Test\">
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:labelEditCancel()\" value=\"Cancel\">
+ onclick=\"javascript:labelEditSave()\" value=\"Save\">
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:labelEditSave()\" value=\"Save\">";
+ onclick=\"javascript:labelEditCancel()\" value=\"Cancel\">";
} else {
print "
Feed URL: <input
onblur=\"javascript:enableHotkeys()\" onfocus=\"javascript:disableHotkeys()\"
- id=\"qafInput\">
- <input class=\"button\"
+ id=\"qafInput\">";
+
+ if (get_pref($link, 'ENABLE_FEED_CATS')) {
+ $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories
+ WHERE owner_uid = ".$_SESSION["uid"]."
+ ORDER BY title");
+
+ print " <select id=\"qafCat\">";
+ print "<option id=\"0\">Uncategorized</option>";
+
+ if (db_num_rows($result) != 0) {
+
+ print "<option disabled>--------</option>";
+
+ while ($line = db_fetch_assoc($result)) {
+ printf("<option id='%d'>%s</option>",
+ $line["id"], $line["title"]);
+ }
+ }
+
+ print "</select>";
+ }
+
+ print " <input class=\"button\"
type=\"submit\" onclick=\"javascript:qafAdd()\" value=\"Add feed\">
<input class=\"button\"
type=\"submit\" onclick=\"javascript:closeDlg()\"
if ($id == "search") {
+ $active_feed_id = db_escape_string($_GET["param"]);
+
print "<input id=\"searchbox\" class=\"extSearch\"
onblur=\"javascript:enableHotkeys()\" onfocus=\"javascript:disableHotkeys()\"
onchange=\"javascript:search()\">
<select id=\"searchmodebox\">
- <option selected>All feeds</option>
- <option>This feed</option>
- </select>
+ <option selected>All feeds</option>";
+
+ if ($active_feed_id) {
+ print "<option>This feed</option>";
+ } else {
+ print "<option disabled>This feed</option>";
+ }
+
+ print "</select>
<input type=\"submit\"
class=\"button\" onclick=\"javascript:search()\" value=\"Search\">
<input class=\"button\"
$_SESSION["prefs_op_result"] = "save-config";
+ $_SESSION["prefs_cache"] = false;
+
foreach (array_keys($_POST) as $pref_name) {
$pref_name = db_escape_string($pref_name);
print "Unknown option: $pref_name";
}
+ } else if ($subop == "Change e-mail") {
+
+ if (WEB_DEMO_MODE) {
+ header("Location: prefs.php");
+ return;
+ }
+
+ $email = db_escape_string($_GET["email"]);
+ $active_uid = $_SESSION["uid"];
+
+ if ($email) {
+ db_query($link, "UPDATE ttrss_users SET email = '$email'
+ WHERE id = '$active_uid'");
+ }
+
+ header("Location: prefs.php");
+
} else if ($subop == "Change password") {
if (WEB_DEMO_MODE) {
if (!SINGLE_USER_MODE) {
- $result = db_query($link, "SELECT id FROM ttrss_users
+ $result = db_query($link, "SELECT id,email FROM ttrss_users
WHERE id = ".$_SESSION["uid"]." AND (pwd_hash = 'password' OR
pwd_hash = 'SHA1:".sha1("password")."')");
$_SESSION["prefs_op_result"] = "";
+ print "<form action=\"backend.php\" method=\"GET\">";
+
+ print "<table width=\"100%\" class=\"prefPrefsList\">";
+ print "<tr><td colspan='3'><h3>Personal data</h3></tr></td>";
+
+ $result = db_query($link, "SELECT email FROM ttrss_users
+ WHERE id = ".$_SESSION["uid"]);
+
+ $email = db_fetch_result($result, 0, "email");
+
+ print "<tr><td width=\"40%\">E-mail</td>";
+ print "<td><input class=\"editbox\" name=\"email\"
+ value=\"$email\"></td></tr>";
+
+ print "</table>";
+
+ print "<input type=\"hidden\" name=\"op\" value=\"pref-prefs\">";
+
+ print "<p><input class=\"button\" type=\"submit\"
+ value=\"Change e-mail\" name=\"subop\">";
+
+ print "</form>";
+
print "<form action=\"backend.php\" method=\"POST\">";
print "<table width=\"100%\" class=\"prefPrefsList\">";
name=\"subop\" value=\"Save configuration\">";
print " <input class=\"button\" type=\"submit\"
- name=\"subop\" value=\"Reset to defaults\"></p>";
+ name=\"subop\" onclick=\"return validatePrefsReset()\"
+ value=\"Reset to defaults\"></p>";
print "</form>";
$login = db_escape_string($_GET["l"]);
$uid = db_escape_string($_GET["id"]);
$access_level = sprintf("%d", $_GET["al"]);
+ $email = db_escape_string($_GET["e"]);
- db_query($link, "UPDATE ttrss_users SET login = '$login', access_level = '$access_level' WHERE id = '$uid'");
+ db_query($link, "UPDATE ttrss_users SET login = '$login',
+ access_level = '$access_level', email = '$email' WHERE id = '$uid'");
}
} else if ($subop == "remove") {
$tmp_user_pwd = make_password(8);
$pwd_hash = 'SHA1:' . sha1($tmp_user_pwd);
- db_query($link, "INSERT INTO ttrss_users (login,pwd_hash,access_level)
- VALUES ('$login', '$pwd_hash', 0)");
+ db_query($link, "INSERT INTO ttrss_users
+ (login,pwd_hash,access_level,last_login)
+ VALUES ('$login', '$pwd_hash', 0, NOW())");
$result = db_query($link, "SELECT id FROM ttrss_users WHERE
$uid = db_escape_string($_GET["id"]);
- $result = db_query($link, "SELECT login FROM ttrss_users WHERE id = '$uid'");
+ $result = db_query($link, "SELECT login,email
+ FROM ttrss_users WHERE id = '$uid'");
$login = db_fetch_result($result, 0, "login");
+ $email = db_fetch_result($result, 0, "email");
$tmp_user_pwd = make_password(8);
$pwd_hash = 'SHA1:' . sha1($tmp_user_pwd);
WHERE id = '$uid'");
print "<div class=\"notice\">Changed password of
- user <b>$login</b> to <b>$tmp_user_pwd</b>.</div>";
+ user <b>$login</b> to <b>$tmp_user_pwd</b>.";
+
+ if (MAIL_RESET_PASS && $email) {
+ print " Notifying <b>$email</b>.";
+
+ mail("$login <$email>", "Password reset notification",
+ "Hi, $login.\n".
+ "\n".
+ "Your password for this TT-RSS installation was reset by".
+ " an administrator.\n".
+ "\n".
+ "Your new password is $tmp_user_pwd, please remember".
+ " it for later reference.\n".
+ "\n".
+ "Sincerely, TT-RSS Mail Daemon.", "From: " . MAIL_FROM);
+ }
+
+ print "</div>";
}
}
onclick=\"javascript:addUser()\" value=\"Add user\"></div>";
$result = db_query($link, "SELECT
- id,login,access_level,
+ id,login,access_level,email,
SUBSTRING(last_login,1,16) as last_login
FROM
ttrss_users
</td</tr>";
print "<tr class=\"title\">
- <td align='center' width=\"5%\"></td>
- <td width='30%'>Username</td>
- <td width='30%'>Access Level</td>
- <td width='30%'>Last login</td></tr>";
+ <td align='center' width=\"5%\"> </td>
+ <td width='20%'>Username</td>
+ <td width='20%'>E-mail</td>
+ <td width='20%'>Access Level</td>
+ <td width='20%'>Last login</td></tr>";
$lnum = 0;
$uid = $line["id"];
$edit_uid = $_GET["id"];
- if ($uid == $_SESSION["uid"] || ($subop == "edit" && $uid != $edit_uid)) {
+ if ($subop == "edit" && $uid != $edit_uid) {
$class .= "Grayed";
$this_row_id = "";
} else {
$line["last_login"] = date(get_pref($link, 'SHORT_DATE_FORMAT'),
strtotime($line["last_login"]));
- if ($uid == $_SESSION["uid"]) {
+/* if ($uid == $_SESSION["uid"]) {
print "<td align='center'><input disabled=\"true\" type=\"checkbox\"
id=\"UMCHK-".$line["id"]."\"></td>";
- print "<td>".$line["login"]."</td>";
- print "<td>".$line["access_level"]."</td>";
+ print "<td>".$line["login"]."</td>";
+ print "<td>".$line["email"]."</td>";
+ print "<td>".$line["access_level"]."</td>";
- } else if (!$edit_uid || $subop != "edit") {
+ } else */ if (!$edit_uid || $subop != "edit") {
print "<td align='center'><input onclick='toggleSelectRow(this);'
type=\"checkbox\" id=\"UMCHK-$uid\"></td>";
print "<td><a href=\"javascript:editUser($uid);\">" .
$line["login"] . "</td>";
-
+
+ print "<td><a href=\"javascript:editUser($uid);\">" .
+ $line["email"] . "</td>";
+
print "<td><a href=\"javascript:editUser($uid);\">" .
$line["access_level"] . "</td>";
} else if ($uid != $edit_uid) {
- print "<td><input disabled=\"true\" type=\"checkbox\"
+ print "<td align='center'><input disabled=\"true\" type=\"checkbox\"
id=\"UMCHK-".$line["id"]."\"></td>";
print "<td>".$line["login"]."</td>";
+ print "<td>".$line["email"]."</td>";
print "<td>".$line["access_level"]."</td>";
} else {
- print "<td><input disabled=\"true\" type=\"checkbox\" checked></td>";
+ print "<td align='center'>
+ <input disabled=\"true\" type=\"checkbox\" checked></td>";
print "<td><input id=\"iedit_ulogin\" value=\"".$line["login"].
"\"></td>";
+ print "<td><input id=\"iedit_email\" value=\"".$line["email"].
+ "\"></td>";
+
print "<td><input id=\"iedit_ulevel\" value=\"".$line["access_level"].
"\"></td>";
print "<p>";
if ($subop == "edit") {
- print "Edit label:
+ print "Edit user:
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:userEditCancel()\" value=\"Cancel\">
+ onclick=\"javascript:userEditSave()\" value=\"Save\">
<input type=\"submit\" class=\"button\"
- onclick=\"javascript:userEditSave()\" value=\"Save\">";
+ onclick=\"javascript:userEditCancel()\" value=\"Cancel\">";
} else {
print "<h1>Subscribed feeds</h1>";
$result = db_query($link, "SELECT id,title,site_url FROM ttrss_feeds
- WHERE owner_uid = '$uid' ORDER BY title LIMIT 20");
+ WHERE owner_uid = '$uid' ORDER BY title");
- print "<ul class=\"nomarks\">";
+ print "<ul class=\"userFeedList\">";
while ($line = db_fetch_assoc($result)) {
if ($op == "feed-details") {
- $feed_id = $_GET["id"];
-
- $result = db_query($link,
- "SELECT
- title,feed_url,
- SUBSTRING(last_updated,1,16) as last_updated,
- icon_url,site_url,
- (SELECT COUNT(int_id) FROM ttrss_user_entries
- WHERE feed_id = id) AS total,
- (SELECT COUNT(int_id) FROM ttrss_user_entries
- WHERE feed_id = id AND unread = true) AS unread,
- (SELECT COUNT(int_id) FROM ttrss_user_entries
- WHERE feed_id = id AND marked = true) AS marked
- FROM ttrss_feeds
- WHERE id = '$feed_id' AND owner_uid = ".$_SESSION["uid"]);
-
- if (db_num_rows($result) == 0) return;
-
- $title = db_unescape_string(db_fetch_result($result, 0, "title"));
- $last_updated = date(get_pref($link, 'LONG_DATE_FORMAT'),
- strtotime(db_fetch_result($result, 0, "last_updated")));
- $feed_url = db_fetch_result($result, 0, "feed_url");
- $icon_url = db_fetch_result($result, 0, "icon_url");
- $total = db_fetch_result($result, 0, "total");
- $unread = db_fetch_result($result, 0, "unread");
- $marked = db_fetch_result($result, 0, "marked");
- $site_url = db_fetch_result($result, 0, "site_url");
-
- $result = db_query($link, "SELECT COUNT(id) AS subscribed
- FROM ttrss_feeds WHERE feed_url = '$feed_url'");
+// $feed_id = $_GET["id"];
- $subscribed = db_fetch_result($result, 0, "subscribed");
+ $feed_ids = split(",", db_escape_string($_GET["id"]));
print "<div class=\"infoBoxContents\">";
- $icon_file = ICONS_DIR . "/$feed_id.ico";
+ foreach ($feed_ids as $feed_id) {
- if (file_exists($icon_file) && filesize($icon_file) > 0) {
- $feed_icon = "<img width=\"16\" height=\"16\"
- src=\"" . ICONS_URL . "/$feed_id.ico\">";
- } else {
- $feed_icon = "";
+ $result = db_query($link,
+ "SELECT
+ title,feed_url,
+ SUBSTRING(last_updated,1,16) as last_updated,
+ icon_url,site_url,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id) AS total,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id AND unread = true) AS unread,
+ (SELECT COUNT(int_id) FROM ttrss_user_entries
+ WHERE feed_id = id AND marked = true) AS marked
+ FROM ttrss_feeds
+ WHERE id = '$feed_id' AND owner_uid = ".$_SESSION["uid"]);
+
+ if (db_num_rows($result) == 0) return;
+
+ $title = db_unescape_string(db_fetch_result($result, 0, "title"));
+ $last_updated = date(get_pref($link, 'LONG_DATE_FORMAT'),
+ strtotime(db_fetch_result($result, 0, "last_updated")));
+ $feed_url = db_fetch_result($result, 0, "feed_url");
+ $icon_url = db_fetch_result($result, 0, "icon_url");
+ $total = db_fetch_result($result, 0, "total");
+ $unread = db_fetch_result($result, 0, "unread");
+ $marked = db_fetch_result($result, 0, "marked");
+ $site_url = db_fetch_result($result, 0, "site_url");
+
+ $result = db_query($link, "SELECT COUNT(id) AS subscribed
+ FROM ttrss_feeds WHERE feed_url = '$feed_url' AND private = false");
+
+ $subscribed = db_fetch_result($result, 0, "subscribed");
+
+ $icon_file = ICONS_DIR . "/$feed_id.ico";
+
+ if (file_exists($icon_file) && filesize($icon_file) > 0) {
+ $feed_icon = "<img width=\"16\" height=\"16\"
+ src=\"" . ICONS_URL . "/$feed_id.ico\">";
+ } else {
+ $feed_icon = "";
+ }
+
+ print "<h1>$feed_icon $title</h1>";
+
+ print "<table width='100%'>";
+
+ if ($site_url) {
+ print "<tr><td width='30%'>Link</td>
+ <td><a href=\"$site_url\">$site_url</a>
+ <a href=\"$feed_url\">(feed)</a></td>
+ </td></tr>";
+ } else {
+ print "<tr><td width='30%'>Feed URL</td>
+ <td><a href=\"$feed_url\">$feed_url</a></td></tr>";
+ }
+ print "<tr><td>Last updated</td><td>$last_updated</td></tr>";
+ print "<tr><td>Total articles</td><td>$total</td></tr>";
+ print "<tr><td>Unread articles</td><td>$unread</td></tr>";
+ print "<tr><td>Starred articles</td><td>$marked</td></tr>";
+ print "<tr><td>Subscribed users</td><td>$subscribed</td></tr>";
+
+ print "</table>";
+
+/* $result = db_query($link, "SELECT title,
+ SUBSTRING(updated,1,16) AS updated,unread
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE ref_id = id AND feed_id = '$feed_id'
+ ORDER BY date_entered DESC LIMIT 5");
+
+ if (db_num_rows($result) > 0) {
+
+ print "<h1>Latest headlines</h1>";
+
+ print "<ul class=\"nomarks\">";
+
+ while ($line = db_fetch_assoc($result)) {
+ if ($line["unread"] == "t" || $line["unread"] == "1") {
+ $line["title"] = "<b>" . $line["title"] . "</b>";
+ }
+ print "<li>" . $line["title"].
+ " <span class=\"insensitive\">(" .
+ date(get_pref($link, 'SHORT_DATE_FORMAT'),
+ strtotime($line["updated"])).
+ ")</span></li>";
+ }
+
+ print "</ul>";
+
+ } */
}
- print "<h1>$feed_icon $title</h1>";
+ print "</div>";
+
+ print "<div align='center'>
+ <input type='submit' class='button'
+ onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
+ }
- print "<table width='100%'>";
+ if ($op == "pref-feed-browser") {
- if ($site_url) {
- print "<tr><td width='30%'>Link</td>
- <td><a href=\"$site_url\">$site_url</a>
- <a href=\"$feed_url\">(feed)</a></td>
- </td></tr>";
- } else {
- print "<tr><td width='30%'>Feed URL</td>
- <td><a href=\"$feed_url\">$feed_url</a></td></tr>";
+ if (!ENABLE_FEED_BROWSER) {
+ print "Feed browser is administratively disabled.";
+ return;
}
- print "<tr><td>Last updated</td><td>$last_updated</td></tr>";
- print "<tr><td>Total articles</td><td>$total</td></tr>";
- print "<tr><td>Unread articles</td><td>$unread</td></tr>";
- print "<tr><td>Starred articles</td><td>$marked</td></tr>";
- print "<tr><td>Subscribed users</td><td>$subscribed</td></tr>";
- print "</table>";
+ $subop = $_REQUEST["subop"];
- $result = db_query($link, "SELECT title,
- SUBSTRING(updated,1,16) AS updated,unread
- FROM ttrss_entries,ttrss_user_entries
- WHERE ref_id = id AND feed_id = '$feed_id'
- ORDER BY date_entered DESC LIMIT 5");
+ if ($subop == "details") {
+ $id = db_escape_string($_GET["id"]);
- if (db_num_rows($result) > 0) {
+ print "<div class=\"browserFeedInfo\">";
+ print "<b>Feed information:</b>";
+ print "<div class=\"detailsPart\">";
+
+ $result = db_query($link, "SELECT
+ feed_url,site_url,
+ SUBSTRING(last_updated,1,19) AS last_updated
+ FROM ttrss_feeds WHERE id = '$id'");
- print "<h1>Latest headlines</h1>";
+ $feed_url = db_fetch_result($result, 0, "feed_url");
+ $site_url = db_fetch_result($result, 0, "site_url");
+ $last_updated = db_fetch_result($result, 0, "last_updated");
- print "<ul class=\"nomarks\">";
-
- while ($line = db_fetch_assoc($result)) {
- if ($line["unread"] == "t" || $line["unread"] == "1") {
- $line["title"] = "<b>" . $line["title"] . "</b>";
- }
- print "<li>" . $line["title"].
- " <span class=\"insensitive\">(" .
- date(get_pref($link, 'SHORT_DATE_FORMAT'),
- strtotime($line["updated"])).
- ")</span></li>";
+ if (get_pref($link, 'HEADLINES_SMART_DATE')) {
+ $last_updated = smart_date_time(strtotime($last_updated));
+ } else {
+ $short_date = get_pref($link, 'SHORT_DATE_FORMAT');
+ $last_updated = date($short_date, strtotime($last_updated));
}
-
- print "</ul>";
-
+
+ print "Site: <a href='$site_url'>$site_url</a> ".
+ "(<a href='$feed_url'>feed</a>), ".
+ "Last updated: $last_updated";
+
print "</div>";
-
- print "<div align='center'>
- <input type='submit' class='button'
- onclick=\"closeInfoBox()\" value=\"Close this window\"></div>";
+
+ $result = db_query($link, "SELECT
+ ttrss_entries.title,
+ content,
+ substring(date_entered,1,19) as date_entered,
+ substring(updated,1,19) as updated
+ FROM ttrss_entries,ttrss_user_entries
+ WHERE ttrss_entries.id = ref_id AND feed_id = '$id'
+ ORDER BY updated DESC LIMIT 5");
+
+ if (db_num_rows($result) > 0) {
+
+ print "<b>Last headlines:</b><br>";
+
+ print "<div class=\"detailsPart\">";
+ print "<ul class=\"compact\">";
+ while ($line = db_fetch_assoc($result)) {
+
+ if (get_pref($link, 'HEADLINES_SMART_DATE')) {
+ $entry_dt = smart_date_time(strtotime($line["updated"]));
+ } else {
+ $short_date = get_pref($link, 'SHORT_DATE_FORMAT');
+ $entry_dt = date($short_date, strtotime($line["updated"]));
+ }
+
+ print "<li>" . $line["title"] .
+ " <span class=\"insensitive\">($entry_dt)</span></li>";
+ }
+ print "</ul></div>";
+ }
+
+ print "</div>";
+
+ return;
+ }
+
+ $result = db_query($link, "SELECT feed_url,count(id) AS subscribers
+ FROM ttrss_feeds
+ WHERE auth_login = '' AND auth_pass = '' AND private = false
+ GROUP BY feed_url ORDER BY subscribers DESC LIMIT 100");
+
+ print "<ul class='nomarks' id='browseBigFeedList'>";
+
+ $feedctr = 0;
+
+ while ($line = db_fetch_assoc($result)) {
+ $feed_url = $line["feed_url"];
+ $subscribers = $line["subscribers"];
+
+ $sub_result = db_query($link, "SELECT id
+ FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid =" .
+ $_SESSION["uid"]);
+
+ if (db_num_rows($sub_result) > 0) {
+ continue; // already subscribed
+ }
+
+ $det_result = db_query($link, "SELECT site_url,title,id
+ FROM ttrss_feeds WHERE feed_url = '$feed_url' LIMIT 1");
+
+ $details = db_fetch_assoc($det_result);
+
+ $icon_file = ICONS_DIR . "/" . $details["id"] . ".ico";
+
+ if (file_exists($icon_file) && filesize($icon_file) > 0) {
+ $feed_icon = "<img class=\"tinyFeedIcon\" src=\"" . ICONS_URL .
+ "/".$details["id"].".ico\">";
+ } else {
+ $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
+ }
+
+ $check_box = "<input onclick='toggleSelectListRow(this)' class='feedBrowseCB'
+ type=\"checkbox\" id=\"FBCHK-" . $details["id"] . "\">";
+
+ $class = ($feedctr % 2) ? "even" : "odd";
+
+ print "<li class='$class' id=\"FBROW-".$details["id"]."\">$check_box".
+ "$feed_icon ";
+
+ print "<a href=\"javascript:browserToggleExpand('".$details["id"]."')\">" .
+ $details["title"] ."</a> " .
+ "<span class='subscribers'>($subscribers)</span>";
+
+ print "<div class=\"browserDetails\" id=\"BRDET-" . $details["id"] . "\">";
+ print "</div>";
+
+ print "</li>";
+
+ ++$feedctr;
}
+
+ if ($feedctr == 0) {
+ print "<li>No feeds found to subscribe.</li>";
+ }
+
+ print "</ul>";
+
+ print "<p>Selection:
+ <input type='submit' class='button' onclick=\"feedBrowserSubscribe()\"
+ value=\"Subscribe\"></p>";
+
+ print "</div>";
+
}
db_close($link);