add aggregated feed generator
This commit is contained in:
parent
53c98a9af8
commit
186649709a
4 changed files with 99 additions and 5 deletions
1
NEWS
1
NEWS
|
@ -2,6 +2,7 @@ v1.2.2 (Aug xx, 2006)
|
||||||
|
|
||||||
* Bugfixes
|
* Bugfixes
|
||||||
* Support for HTTP Digest authentication (via included Snoopy class)
|
* Support for HTTP Digest authentication (via included Snoopy class)
|
||||||
|
* Support for generation of aggregated feeds
|
||||||
|
|
||||||
v1.2.1 (Jul 17, 2006)
|
v1.2.1 (Jul 17, 2006)
|
||||||
|
|
||||||
|
|
34
backend.php
34
backend.php
|
@ -33,11 +33,12 @@
|
||||||
print_error_xml(9, $err_msg); die;
|
print_error_xml(9, $err_msg); die;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!$op || $op == "rpc" || $op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
|
if ((!$op || $op == "rpc" || $op == "rss" ||
|
||||||
|
$op == "globalUpdateFeeds") && !$_REQUEST["noxml"]) {
|
||||||
header("Content-Type: application/xml");
|
header("Content-Type: application/xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$_SESSION["uid"] && $op != "globalUpdateFeeds") {
|
if (!$_SESSION["uid"] && $op != "globalUpdateFeeds" && $op != "rss") {
|
||||||
|
|
||||||
if ($op == "rpc") {
|
if ($op == "rpc") {
|
||||||
print_error_xml(6); die;
|
print_error_xml(6); die;
|
||||||
|
@ -805,7 +806,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_headline_subtoolbar($link, $feed_site_url, $feed_title,
|
function print_headline_subtoolbar($link, $feed_site_url, $feed_title,
|
||||||
$bottom = false, $rtl_content = false) {
|
$bottom = false, $rtl_content = false, $feed_id = 0,
|
||||||
|
$is_cat = false) {
|
||||||
|
|
||||||
if (!$bottom) {
|
if (!$bottom) {
|
||||||
$class = "headlinesSubToolbar";
|
$class = "headlinesSubToolbar";
|
||||||
|
@ -861,6 +863,13 @@
|
||||||
} else {
|
} else {
|
||||||
print $feed_title;
|
print $feed_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print "
|
||||||
|
<a target=\"_new\"
|
||||||
|
href=\"backend.php?op=rss&id=$feed_id&is_cat=$is_cat\"
|
||||||
|
<img class=\"noborder\"
|
||||||
|
alt=\"Generated feed\" src=\"images/feed-icon-12x12.png\">
|
||||||
|
</a>";
|
||||||
|
|
||||||
print "</td>";
|
print "</td>";
|
||||||
print "</tr></table>";
|
print "</tr></table>";
|
||||||
|
@ -870,7 +879,7 @@
|
||||||
if (db_num_rows($result) > 0) {
|
if (db_num_rows($result) > 0) {
|
||||||
|
|
||||||
print_headline_subtoolbar($link, $feed_site_url, $feed_title, false,
|
print_headline_subtoolbar($link, $feed_site_url, $feed_title, false,
|
||||||
$rtl_content);
|
$rtl_content, $feed, $cat_view);
|
||||||
|
|
||||||
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
|
||||||
print "<table class=\"headlinesList\" id=\"headlinesList\"
|
print "<table class=\"headlinesList\" id=\"headlinesList\"
|
||||||
|
@ -3647,6 +3656,23 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($op == "rss") {
|
||||||
|
$feed = db_escape_string($_GET["id"]);
|
||||||
|
$user = db_escape_string($_GET["user"]);
|
||||||
|
$pass = db_escape_string($_GET["pass"]);
|
||||||
|
$is_cat = $_GET["is_cat"] != false;
|
||||||
|
|
||||||
|
if (!$_SESSION["uid"] && $user && $pass) {
|
||||||
|
authenticate_user($link, $user, $pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SESSION["uid"] ||
|
||||||
|
http_authenticate_user($link)) {
|
||||||
|
|
||||||
|
generate_syndicated_feed($link, $feed, $is_cat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function check_configuration_variables() {
|
function check_configuration_variables() {
|
||||||
if (!defined('SESSION_EXPIRE_TIME')) {
|
if (!defined('SESSION_EXPIRE_TIME')) {
|
||||||
return "config: SESSION_EXPIRE_TIME is undefined";
|
return "config: SESSION_EXPIRE_TIME is undefined";
|
||||||
|
|
|
@ -948,6 +948,28 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function http_authenticate_user($link) {
|
||||||
|
|
||||||
|
if (!$_SERVER["PHP_AUTH_USER"]) {
|
||||||
|
|
||||||
|
header('WWW-Authenticate: Basic realm="Tiny Tiny RSS RSSGen"');
|
||||||
|
header('HTTP/1.0 401 Unauthorized');
|
||||||
|
exit;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$auth_result = authenticate_user($link,
|
||||||
|
$_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]);
|
||||||
|
|
||||||
|
if (!$auth_result) {
|
||||||
|
header('WWW-Authenticate: Basic realm="Tiny Tiny RSS RSSGen"');
|
||||||
|
header('HTTP/1.0 401 Unauthorized');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function authenticate_user($link, $login, $password) {
|
function authenticate_user($link, $login, $password) {
|
||||||
|
|
||||||
if (!SINGLE_USER_MODE) {
|
if (!SINGLE_USER_MODE) {
|
||||||
|
@ -1406,7 +1428,13 @@
|
||||||
|
|
||||||
function getCategoryUnread($link, $cat) {
|
function getCategoryUnread($link, $cat) {
|
||||||
|
|
||||||
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE cat_id = '$cat'
|
if ($cat != 0) {
|
||||||
|
$cat_query = "cat_id = '$cat'";
|
||||||
|
} else {
|
||||||
|
$cat_query = "cat_id IS NULL";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = db_query($link, "SELECT id FROM ttrss_feeds WHERE $cat_query
|
||||||
AND owner_uid = " . $_SESSION["uid"]);
|
AND owner_uid = " . $_SESSION["uid"]);
|
||||||
|
|
||||||
$cat_feeds = array();
|
$cat_feeds = array();
|
||||||
|
@ -1414,6 +1442,8 @@
|
||||||
array_push($cat_feeds, "feed_id = " . $line["id"]);
|
array_push($cat_feeds, "feed_id = " . $line["id"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (count($cat_feeds) == 0) return 0;
|
||||||
|
|
||||||
$match_part = implode(" OR ", $cat_feeds);
|
$match_part = implode(" OR ", $cat_feeds);
|
||||||
|
|
||||||
$result = db_query($link, "SELECT COUNT(int_id) AS unread
|
$result = db_query($link, "SELECT COUNT(int_id) AS unread
|
||||||
|
@ -2179,4 +2209,41 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function generate_syndicated_feed($link, $feed, $is_cat) {
|
||||||
|
|
||||||
|
$qfh_ret = queryFeedHeadlines($link, $feed,
|
||||||
|
30, false, $is_cat, false, false, false);
|
||||||
|
|
||||||
|
$result = $qfh_ret[0];
|
||||||
|
$feed_title = $qfh_ret[1];
|
||||||
|
$feed_site_url = $qfh_ret[2];
|
||||||
|
$last_error = $qfh_ret[3];
|
||||||
|
|
||||||
|
print "<rss version=\"2.0\">
|
||||||
|
<channel>
|
||||||
|
<title>$feed_title</title>
|
||||||
|
<link>$feed_site_url</link>
|
||||||
|
<generator>Tiny Tiny RSS v".VERSION."</generator>";
|
||||||
|
|
||||||
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
print "<item>";
|
||||||
|
print "<link>" . htmlspecialchars($line["link"]) . "</link>";
|
||||||
|
|
||||||
|
$rfc822_date = date('r', strtotime($line["updated"]));
|
||||||
|
|
||||||
|
print "<pubDate>$rfc822_date</pubDate>";
|
||||||
|
|
||||||
|
print "<title>" .
|
||||||
|
htmlspecialchars($line["title"]) . "</title>";
|
||||||
|
|
||||||
|
print "<description>" .
|
||||||
|
htmlspecialchars($line["content_preview"]) . "</description>";
|
||||||
|
|
||||||
|
print "</item>";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</channel></rss>";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
BIN
images/feed-icon-12x12.png
Normal file
BIN
images/feed-icon-12x12.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 552 B |
Loading…
Reference in a new issue