$entry_title : $entry_content_unescaped
";
print_r($entry_tags);
print "
TAGS: "; print_r($entry_tags); print "
"; if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { print_r($entry_tags); } if (count($entry_tags) > 0) { db_query($link, "BEGIN"); foreach ($entry_tags as $tag) { $tag = sanitize_tag($tag); $tag = db_escape_string($tag); if (!tag_is_valid($tag)) continue; $result = db_query($link, "SELECT id FROM ttrss_tags WHERE tag_name = '$tag' AND post_int_id = '$entry_int_id' AND owner_uid = '$owner_uid' LIMIT 1"); // print db_fetch_result($result, 0, "id"); if ($result && db_num_rows($result) == 0) { db_query($link, "INSERT INTO ttrss_tags (owner_uid,tag_name,post_int_id) VALUES ('$owner_uid','$tag', '$entry_int_id')"); } } db_query($link, "COMMIT"); } if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { _debug("update_rss_feed: article processed"); } } db_query($link, "UPDATE ttrss_feeds SET last_updated = NOW(), last_error = '' WHERE id = '$feed'"); // db_query($link, "COMMIT"); } else { if ($use_simplepie) { $error_msg = mb_substr($rss->error(), 0, 250); } else { $error_msg = mb_substr(magpie_error(), 0, 250); } if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { _debug("update_rss_feed: error fetching feed: $error_msg"); } $error_msg = db_escape_string($error_msg); db_query($link, "UPDATE ttrss_feeds SET last_error = '$error_msg', last_updated = NOW() WHERE id = '$feed'"); } if ($use_simplepie) { unset($rss); } if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) { _debug("update_rss_feed: done"); } } function print_select($id, $default, $values, $attributes = "") { print ""; } function print_select_hash($id, $default, $values, $attributes = "") { print ""; } function get_article_filters($filters, $title, $content, $link) { $matches = array(); if ($filters["title"]) { foreach ($filters["title"] as $filter) { $reg_exp = $filter["reg_exp"]; $inverse = $filter["inverse"]; if ((!$inverse && preg_match("/$reg_exp/i", $title)) || ($inverse && !preg_match("/$reg_exp/i", $title))) { array_push($matches, array($filter["action"], $filter["action_param"])); } } } if ($filters["content"]) { foreach ($filters["content"] as $filter) { $reg_exp = $filter["reg_exp"]; $inverse = $filter["inverse"]; if ((!$inverse && preg_match("/$reg_exp/i", $content)) || ($inverse && !preg_match("/$reg_exp/i", $content))) { array_push($matches, array($filter["action"], $filter["action_param"])); } } } if ($filters["both"]) { foreach ($filters["both"] as $filter) { $reg_exp = $filter["reg_exp"]; $inverse = $filter["inverse"]; if ($inverse) { if (!preg_match("/$reg_exp/i", $title) || !preg_match("/$reg_exp/i", $content)) { array_push($matches, array($filter["action"], $filter["action_param"])); } } else { if (preg_match("/$reg_exp/i", $title) || preg_match("/$reg_exp/i", $content)) { array_push($matches, array($filter["action"], $filter["action_param"])); } } } } if ($filters["link"]) { $reg_exp = $filter["reg_exp"]; foreach ($filters["link"] as $filter) { $reg_exp = $filter["reg_exp"]; $inverse = $filter["inverse"]; if ((!$inverse && preg_match("/$reg_exp/i", $link)) || ($inverse && !preg_match("/$reg_exp/i", $link))) { array_push($matches, array($filter["action"], $filter["action_param"])); } } } return $matches; } function find_article_filter($filters, $filter_name) { foreach ($filters as $f) { if ($f[0] == $filter_name) { return $f; }; } return false; } function calculate_article_score($filters) { $score = 0; foreach ($filters as $f) { if ($f[0] == "score") { $score += $f[1]; }; } return $score; } function printFeedEntry($feed_id, $class, $feed_title, $unread, $icon_file, $link, $rtl_content = false, $last_updated = false, $last_error = false) { if (file_exists($icon_file) && filesize($icon_file) > 0) { $feed_icon = ""; } else { $feed_icon = ""; } if ($rtl_content) { $rtl_tag = "dir=\"rtl\""; } else { $rtl_tag = "dir=\"ltr\""; } $error_notify_msg = ""; if ($last_error) { $link_title = "Error: $last_error ($last_updated)"; $error_notify_msg = "(Error)"; } else if ($last_updated) { $link_title = "Updated: $last_updated"; } $feed = "$feed_title"; print "
";
}
function printCategoryHeader($link, $cat_id, $hidden = false, $can_browse = true) {
$tmp_category = getCategoryTitle($link, $cat_id);
$cat_unread = getCategoryUnread($link, $cat_id);
if ($hidden) {
$holder_style = "display:none;";
$ellipsis = "…";
} else {
$holder_style = "";
$ellipsis = "";
}
$catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
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()";
$catchup_sel_link = "javascript:catchupSelection()";
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()";
$tog_published_link = "javascript:selectionTogglePublished()";
} 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)";
$tog_published_link = "javascript:selectionTogglePublished(true)";
}
if (!$dashboard_menu) {
if (strpos($_SESSION["client.userAgent"], "MSIE") === false) {
print "
";
} else {
// old style subtoolbar:
print "
";
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 " ";
}
} else { // dashboard menu actions
// not implemented
print "";
}
print "";
print "Search: ";
print "";
if ($feed_site_url) {
if (!$bottom) {
$target = "target=\"_new\"";
}
print "".
truncate_string($feed_title,30)."";
} 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 && !$disable_feed) {
print "
";
} else if ($feed_small_icon) {
print "";
}
print "";
print " ";
print "";
}
function outputFeedList($link, $tags = false) {
print "
";
$owner_uid = $_SESSION["uid"];
/* virtual feeds */
if (get_pref($link, 'ENABLE_FEED_CATS')) {
if ($_COOKIE["ttrss_vf_vclps"] == 1) {
$cat_hidden = true;
} else {
$cat_hidden = false;
}
# print "
";
# print "
";
# $cat_unread = getCategoryUnread($link, -1);
# $tmp_category = __("Special");
# $catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
printCategoryHeader($link, -1, $cat_hidden, false);
}
if (defined('_ENABLE_DASHBOARD')) {
printFeedEntry(-4, "virt", __("Dashboard"), 0,
"images/tag.png", $link);
}
$num_starred = getFeedUnread($link, -1);
$num_published = getFeedUnread($link, -2);
$num_fresh = getFeedUnread($link, -3);
$class = "virt";
if ($num_fresh > 0) $class .= "Unread";
printFeedEntry(-3, $class, __("Fresh articles"), $num_fresh,
"images/fresh.png", $link);
$class = "virt";
if ($num_starred > 0) $class .= "Unread";
$is_ie = (strpos($_SESSION["client.userAgent"], "MSIE") !== false);
if ($is_ie) {
$mark_img_ext = "gif";
} else {
$mark_img_ext = "png";
}
printFeedEntry(-1, $class, __("Starred articles"), $num_starred,
"images/mark_set.$mark_img_ext", $link);
$class = "virt";
if ($num_published > 0) $class .= "Unread";
printFeedEntry(-2, $class, __("Published articles"), $num_published,
"images/pub_set.gif", $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')) {
if ($_COOKIE["ttrss_vf_lclps"] == 1) {
$cat_hidden = true;
} else {
$cat_hidden = false;
}
printCategoryHeader($link, -2, $cat_hidden, false);
# print "";
} else {
print "
";
}
}
}
if (!get_pref($link, 'ENABLE_FEED_CATS')) {
print "";
}
printFeedEntry($feed_id, $class, $feed, $unread,
ICONS_URL."/$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, $owner_uid = 0) {
$a_id = db_escape_string($id);
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
$tmp_result = db_query($link, "SELECT DISTINCT tag_name,
owner_uid as owner FROM
ttrss_tags WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE
ref_id = '$a_id' AND owner_uid = '$owner_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 "";
}
$age_qpart = getMaxAgeSubquery();
$result = db_query($link, "SELECT tag_name,SUM((SELECT COUNT(int_id)
FROM ttrss_user_entries,ttrss_entries WHERE int_id = post_int_id
AND ref_id = id AND $age_qpart
AND unread = true)) AS count FROM ttrss_tags
WHERE owner_uid = ".$_SESSION['uid']." GROUP BY tag_name
ORDER BY count DESC LIMIT 50");
$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 = $limit*$offset;
error_reporting (DEFAULT_ERROR_LEVEL);
$num_unread = 0;
$cur_feed_title = '';
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;
}
$is_ie = (strpos($_SESSION["client.userAgent"], "MSIE") !== false);
if ($is_ie) {
$mark_img_ext = "gif";
} else {
$mark_img_ext = "png";
}
if ($line["marked"] == "t" || $line["marked"] == "1") {
$marked_pic = "";
} else {
$marked_pic = "";
}
if ($line["published"] == "t" || $line["published"] == "1") {
$published_pic = "";
} else {
$published_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_noms"]));
} else {
$short_date = get_pref($link, 'SHORT_DATE_FORMAT');
$updated_fmt = date($short_date, strtotime($line["updated_noms"]));
}
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
$content_preview = truncate_string(strip_tags($line["content_preview"]),
100);
}
$score = $line["score"];
$score_pic = get_score_pic($score);
$score_title = __("(Click to change)");
$score_pic = "";
if ($score > 500) {
$hlc_suffix = "H";
} else if ($score < -100) {
$hlc_suffix = "L";
} else {
$hlc_suffix = "";
}
$entry_author = $line["author"];
if ($entry_author) {
$entry_author = " - $entry_author";
}
if (!get_pref($link, 'COMBINED_DISPLAY_MODE')) {
if (get_pref($link, 'VFEED_GROUP_BY_FEED')) {
if ($feed_id != $vgroup_last_feed && $line["feed_title"]) {
$cur_feed_title = $line["feed_title"];
$vgroup_last_feed = $feed_id;
$cur_feed_title = htmlspecialchars($cur_feed_title);
$vf_catchup_link = "(mark as read)";
print "
";
}
// print_headline_subtoolbar($link,
// "javascript:catchupPage()", "Mark page as read", true, $rtl_content);
} else {
$message = "";
switch ($view_mode) {
case "unread":
$message = __("No unread articles found to display.");
break;
case "marked":
$message = __("No starred articles found to display.");
break;
default:
$message = __("No articles found to display.");
}
if (!$offset) print " ";
}
}
$mouseover_attrs = "onmouseover='postMouseIn($id)'
onmouseout='postMouseOut($id)'";
print "".
"".
$line["feed_title"]." $vf_catchup_link: ";
print " ";
} else {
if (get_pref($link, 'VFEED_GROUP_BY_FEED') && $line["feed_title"]) {
if ($feed_id != $vgroup_last_feed) {
$cur_feed_title = $line["feed_title"];
$vgroup_last_feed = $feed_id;
$cur_feed_title = htmlspecialchars($cur_feed_title);
$vf_catchup_link = "(mark as read)";
print "$update_pic ";
print "
";
print "$marked_pic ";
print "$published_pic ";
# if ($line["feed_title"]) {
# print "$content_link ";
# print "
# ".
# truncate_string($line["feed_title"],30)." ";
# } else {
print "";
print "" .
$line["title"];
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
if ($content_preview) {
print " - $content_preview";
}
}
print "";
# ".
# $line["feed_title"]."
if (!get_pref($link, 'VFEED_GROUP_BY_FEED')) {
if ($line["feed_title"]) {
print "
(".
$line["feed_title"].")
";
}
}
print " ";
# }
print " ";
print "$score_pic ";
print "
";
// print "";
print "
";
}
?>
";
print " $header ";
print " ";
}
function rounded_table_end($footer = " ") {
print " ";
print " $footer