diff options
author | Andrew Dolgov <[email protected]> | 2006-07-31 12:35:50 +0100 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2006-07-31 12:35:50 +0100 |
commit | 186649709a15de3b36411ae250d28abb574b1c53 (patch) | |
tree | f2c0658007fed939da9c77b1517061d66dc30202 | |
parent | 53c98a9af8cd005b536b2609d831b1001cf7ed44 (diff) |
add aggregated feed generator
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | backend.php | 34 | ||||
-rw-r--r-- | functions.php | 69 | ||||
-rw-r--r-- | images/feed-icon-12x12.png | bin | 0 -> 552 bytes |
4 files changed, 99 insertions, 5 deletions
@@ -2,6 +2,7 @@ v1.2.2 (Aug xx, 2006) * Bugfixes * Support for HTTP Digest authentication (via included Snoopy class) + * Support for generation of aggregated feeds v1.2.1 (Jul 17, 2006) diff --git a/backend.php b/backend.php index ff19595f5..107074fb4 100644 --- a/backend.php +++ b/backend.php @@ -33,11 +33,12 @@ 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"); } - if (!$_SESSION["uid"] && $op != "globalUpdateFeeds") { + if (!$_SESSION["uid"] && $op != "globalUpdateFeeds" && $op != "rss") { if ($op == "rpc") { print_error_xml(6); die; @@ -805,7 +806,8 @@ } 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) { $class = "headlinesSubToolbar"; @@ -861,6 +863,13 @@ } else { 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 "</tr></table>"; @@ -870,7 +879,7 @@ if (db_num_rows($result) > 0) { print_headline_subtoolbar($link, $feed_site_url, $feed_title, false, - $rtl_content); + $rtl_content, $feed, $cat_view); if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) { 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() { if (!defined('SESSION_EXPIRE_TIME')) { return "config: SESSION_EXPIRE_TIME is undefined"; diff --git a/functions.php b/functions.php index 686cecfeb..e77f2d5a0 100644 --- a/functions.php +++ b/functions.php @@ -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) { if (!SINGLE_USER_MODE) { @@ -1406,7 +1428,13 @@ 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"]); $cat_feeds = array(); @@ -1414,6 +1442,8 @@ array_push($cat_feeds, "feed_id = " . $line["id"]); } + if (count($cat_feeds) == 0) return 0; + $match_part = implode(" OR ", $cat_feeds); $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>"; + + } + ?> diff --git a/images/feed-icon-12x12.png b/images/feed-icon-12x12.png Binary files differnew file mode 100644 index 000000000..291000eab --- /dev/null +++ b/images/feed-icon-12x12.png |