Disabled script: ", $res); $res = preg_replace('/<\/script.*?>/i', "
", $res); */ /* $res = preg_replace('/(Disabled html object - flash or other embedded content)
", $res); */ if (get_pref("STRIP_UNSAFE_TAGS")) { $res = strip_tags($res, "
");
}
return $res;
}
function send_headlines_digests($link, $limit = 100) {
if (!DIGEST_ENABLE) return false;
$user_limit = DIGEST_EMAIL_LIMIT;
$days = 1;
print "Sending digests, batch of max $user_limit users, days = $days, headline limit = $limit\n\n";
if (DB_TYPE == "pgsql") {
$interval_query = "last_digest_sent < NOW() - INTERVAL '$days days'";
} else if (DB_TYPE == "mysql") {
$interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL $days DAY)";
}
$result = db_query($link, "SELECT id,email FROM ttrss_users
WHERE email != '' AND (last_digest_sent IS NULL OR $interval_query)");
while ($line = db_fetch_assoc($result)) {
if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) {
print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... ";
$tuple = prepare_headlines_digest($link, $line["id"], $days, $limit);
$digest = $tuple[0];
$headlines_count = $tuple[1];
if ($headlines_count > 0) {
$rc = mail($line["login"] . " <" . $line["email"] . ">",
"[tt-rss] New headlines for last 24 hours", $digest,
"From: " . MAIL_FROM . "\n".
"Content-Type: text/plain; charset=\"utf-8\"\n".
"Content-Transfer-Encoding: 8bit\n");
print "RC=$rc\n";
db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW()
WHERE id = " . $line["id"]);
} else {
print "No headlines\n";
}
}
}
// $digest = prepare_headlines_digest($link, $user_id, $days, $limit);
}
function prepare_headlines_digest($link, $user_id, $days = 1, $limit = 100) {
$tmp = __("New headlines for last 24 hours, as of ") . date("Y/m/d H:m") . "\n";
$tmp .= "=======================================================\n\n";
if (DB_TYPE == "pgsql") {
$interval_query = "ttrss_entries.date_entered > NOW() - INTERVAL '$days days'";
} else if (DB_TYPE == "mysql") {
$interval_query = "ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL $days DAY)";
}
$result = db_query($link, "SELECT ttrss_entries.title,
ttrss_feeds.title AS feed_title,
date_entered,
link,
SUBSTRING(last_updated,1,19) AS last_updated
FROM
ttrss_user_entries,ttrss_entries,ttrss_feeds
WHERE
ref_id = ttrss_entries.id AND feed_id = ttrss_feeds.id
AND include_in_digest = true
AND $interval_query
AND ttrss_user_entries.owner_uid = $user_id
AND unread = true ORDER BY ttrss_feeds.title, date_entered DESC
LIMIT $limit");
$cur_feed_title = "";
$headlines_count = db_num_rows($result);
while ($line = db_fetch_assoc($result)) {
$updated = smart_date_time(strtotime($line["last_updated"]));
$feed_title = $line["feed_title"];
if ($cur_feed_title != $feed_title) {
$cur_feed_title = $feed_title;
$tmp .= "$feed_title\n\n";
}
$tmp .= " * " . trim($line["title"]) . " - $updated\n";
$tmp .= " " . trim($line["link"]) . "\n";
$tmp .= "\n";
}
$tmp .= "--- \n";
$tmp .= __("You have been sent this email because you have enabled daily digests in Tiny Tiny RSS at ") .
DIGEST_HOSTNAME . "\n".
__("To unsubscribe, visit your configuration options or contact instance owner.\n");
return array($tmp, $headlines_count);
}
function check_for_update($link, $brief_fmt = true) {
$releases_feed = "http://tt-rss.spb.ru/releases.rss";
if (!CHECK_FOR_NEW_VERSION || $_SESSION["access_level"] < 10) {
return;
}
error_reporting(0);
$rss = fetch_rss($releases_feed);
error_reporting (DEFAULT_ERROR_LEVEL);
if ($rss) {
$items = $rss->items;
if (!$items || !is_array($items)) $items = $rss->entries;
if (!$items || !is_array($items)) $items = $rss;
if (!is_array($items) || count($items) == 0) {
return;
}
$latest_item = $items[0];
$latest_version = trim(preg_replace("/(Milestone)|(completed)/", "", $latest_item["title"]));
$release_url = sanitize_rss($latest_item["link"]);
$content = sanitize_rss($latest_item["description"]);
if (version_compare(VERSION, $latest_version) == -1) {
if ($brief_fmt) {
return format_notice("
New version of Tiny-Tiny RSS ($latest_version) is available (click for details)
";
}
function outputFeedList($link, $tags = false) {
print "";
if ($rtl_content) {
$rtl_cpart = "RTL";
} else {
$rtl_cpart = "";
}
$page_prev_link = "javascript:viewFeedGoPage(-1)";
$page_next_link = "javascript:viewFeedGoPage(1)";
$page_first_link = "javascript:viewFeedGoPage(0)";
$catchup_page_link = "javascript:catchupPage()";
$catchup_feed_link = "javascript:catchupCurrentFeed()";
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
$sel_all_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, '', true)";
$sel_unread_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true)";
$sel_none_link = "javascript:selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false)";
$tog_unread_link = "javascript:selectionToggleUnread()";
$tog_marked_link = "javascript:selectionToggleMarked()";
} else {
$sel_all_link = "javascript:cdmSelectArticles('all')";
$sel_unread_link = "javascript:cdmSelectArticles('unread')";
$sel_none_link = "javascript:cdmSelectArticles('none')";
$tog_unread_link = "javascript:selectionToggleUnread(true)";
$tog_marked_link = "javascript:selectionToggleMarked(true)";
}
if (strpos($_SESSION["client.userAgent"], "MSIE") === false) {
print "
";
}
print "
";
} else {
// old style subtoolbar:
print "
";
}
if ($search && $feed_id >= 0 && get_pref($link, 'ENABLE_LABELS') && GLOBAL_ENABLE_LABELS) {
print "
".
__('Select:')."
".__('All').",
".__('Unread').",
".__('None')."
".
__('Toggle:')." ".__('Unread').",
".__('Starred')."
".
__('Mark as read:')."
".__('Page').",
".__('Feed')."";
if ($search && $feed_id >= 0 && get_pref($link, 'ENABLE_LABELS') && GLOBAL_ENABLE_LABELS) {
print "
".__('Convert to label')."";
}
print " ";
}
/* if ($search && $feed_id >= 0 && get_pref($link, 'ENABLE_LABELS') && GLOBAL_ENABLE_LABELS) {
print "
".__('Convert to Label')." ";
} */
print "";
if ($feed_site_url) {
if (!$bottom) {
$target = "target=\"_blank\"";
}
print "$feed_title";
} else {
print $feed_title;
}
if ($search) {
$search_q = "&q=$search&m=$match_on&smode=$search_mode";
}
if ($user_page_offset > 1) {
print " [$user_page_offset] ";
}
if (!$bottom) {
print "
";
}
print " ";
print "";
$owner_uid = $_SESSION["uid"];
/* virtual feeds */
if (get_pref($link, 'ENABLE_FEED_CATS')) {
print "
";
}
$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 = "feedCatHolder";
$ellipsis = "";
}
$cat_id = sprintf("%d", $cat_id);
$cat_unread = getCategoryUnread($link, $cat_id);
$catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
print "";
}
$num_starred = getFeedUnread($link, -1);
$class = "virt";
if ($num_starred > 0) $class .= "Unread";
printFeedEntry(-1, $class, __("Starred articles"), $num_starred,
"images/mark_set.png", $link);
if (get_pref($link, 'ENABLE_FEED_CATS')) {
print "
";
}
if (!$tags) {
if (GLOBAL_ENABLE_LABELS && get_pref($link, 'ENABLE_LABELS')) {
$result = db_query($link, "SELECT id,sql_exp,description FROM
ttrss_labels WHERE owner_uid = '$owner_uid' ORDER by description");
if (db_num_rows($result) > 0) {
if (get_pref($link, 'ENABLE_FEED_CATS')) {
print "";
} else {
print "
";
}
}
}
if (!get_pref($link, 'ENABLE_FEED_CATS')) {
print "";
}
printFeedEntry($feed_id, $class, $feed, $unread,
ICONS_DIR."/$feed_id.ico", $link, $rtl_content,
$last_updated, $line["last_error"]);
++$lnum;
}
if (db_num_rows($result) == 0) {
print "
";
}
function get_article_tags($link, $id) {
$a_id = db_escape_string($id);
$tmp_result = db_query($link, "SELECT DISTINCT tag_name FROM
ttrss_tags WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE
ref_id = '$a_id' AND owner_uid = '".$_SESSION["uid"]."' LIMIT 1) ORDER BY tag_name");
$tags = array();
while ($tmp_line = db_fetch_assoc($tmp_result)) {
array_push($tags, $tmp_line["tag_name"]);
}
return $tags;
}
function trim_value(&$value) {
$value = trim($value);
}
function trim_array($array) {
$tmp = $array;
array_walk($tmp, 'trim_value');
return $tmp;
}
function tag_is_valid($tag) {
if ($tag == '') return false;
if (preg_match("/^[0-9]*$/", $tag)) return false;
$tag = iconv("utf-8", "utf-8", $tag);
if (!$tag) return false;
return true;
}
function render_login_form($link, $mobile = false) {
if (!$mobile) {
require_once "login_form.php";
} else {
require_once "mobile/login_form.php";
}
}
// from http://developer.apple.com/internet/safari/faq.html
function no_cache_incantation() {
header("Expires: Mon, 22 Dec 1980 00:00:00 GMT"); // Happy birthday to me :)
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
}
function format_warning($msg, $id = "") {
return "";
}
$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 = ".$_SESSION['uid']." GROUP BY tag_name ORDER BY tag_name");
$tags = array();
while ($line = db_fetch_assoc($result)) {
$tags[$line["tag_name"]] += $line["count"];
}
foreach (array_keys($tags) as $tag) {
$unread = $tags[$tag];
$class = "tag";
if ($unread > 0) {
$class .= "Unread";
}
printFeedEntry($tag, $class, $tag, $unread, "images/tag.png", $link);
}
if (db_num_rows($result) == 0) {
print "
";
}
}
print "";
}
$lnum = 0;
error_reporting (DEFAULT_ERROR_LEVEL);
$num_unread = 0;
while ($line = db_fetch_assoc($result)) {
$class = ($lnum % 2) ? "even" : "odd";
$id = $line["id"];
$feed_id = $line["feed_id"];
if (count($topmost_article_ids) < 5) {
array_push($topmost_article_ids, $id);
}
if ($line["last_read"] == "" &&
($line["unread"] != "t" && $line["unread"] != "1")) {
$update_pic = "";
} else {
$update_pic = "";
}
if ($line["unread"] == "t" || $line["unread"] == "1") {
$class .= "Unread";
++$num_unread;
$is_unread = true;
} else {
$is_unread = false;
}
if ($line["marked"] == "t" || $line["marked"] == "1") {
$marked_pic = "";
} else {
$marked_pic = "";
}
# $content_link = "" .
# $line["title"] . "";
$content_link = "" .
$line["title"] . "";
# $content_link = "" .
# $line["title"] . "";
if (get_pref($link, 'HEADLINES_SMART_DATE')) {
$updated_fmt = smart_date_time(strtotime($line["updated"]));
} else {
$short_date = get_pref($link, 'SHORT_DATE_FORMAT');
$updated_fmt = date($short_date, strtotime($line["updated"]));
}
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
$content_preview = truncate_string(strip_tags($line["content_preview"]),
100);
}
$entry_author = $line["author"];
if ($entry_author) {
$entry_author = " - by $entry_author";
}
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
print "
";
}
// print_headline_subtoolbar($link,
// "javascript:catchupPage()", "Mark page as read", true, $rtl_content);
} else {
print "";
print " ";
} else {
if ($is_unread) {
$add_class = "Unread";
} else {
$add_class = "";
}
print "$update_pic ";
print "
";
print "$marked_pic ";
if ($line["feed_title"]) {
print "$content_link ";
print "
".
$line["feed_title"]." ";
} else {
print "";
print "" .
$line["title"];
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
if ($content_preview) {
print " - $content_preview";
}
}
print "";
print " ";
}
print " ";
print "
";
print " ";
# print "";
print "