require_once 'lib/phpmailer/class.phpmailer.php';
require_once 'lib/sphinxapi.php';
- define('MAGPIE_USER_AGENT_EXT', ' (Tiny Tiny RSS/' . VERSION . ')');
+ //define('MAGPIE_USER_AGENT_EXT', ' (Tiny Tiny RSS/' . VERSION . ')');
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
define('MAGPIE_CACHE_AGE', 60*15); // 15 minutes
+ define('SELF_USER_AGENT', 'Tiny Tiny RSS/' . VERSION . ' (http://tt-rss.org/)');
+ define('MAGPIE_USER_AGENT', SELF_USER_AGENT);
+
require_once "lib/simplepie/simplepie.inc";
require_once "lib/magpierss/rss_fetch.inc";
require_once 'lib/magpierss/rss_utils.inc';
require_once 'lib/htmlpurifier/library/HTMLPurifier.auto.php';
+ $config = HTMLPurifier_Config::createDefault();
+
+ $allowed = "p,a[href],i,em,b,strong,code,pre,blockquote,br,img[src|alt|title],ul,ol,li,h1,h2,h3,h4";
+
+ $config->set('HTML', 'Allowed', $allowed);
+ $purifier = new HTMLPurifier($config);
+
/**
* Print a timestamped debug message.
*
}
$rss = new SimplePie();
- $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT);
+ $rss->set_useragent(SELF_USER_AGENT);
# $rss->set_timeout(10);
$rss->set_feed_url($fetch_url);
$rss->set_output_encoding('UTF-8');
$icon_url = db_escape_string($rss->get_image_url());
}
+ $icon_url = substr($icon_url, 0, 250);
+
if ($icon_url && $orig_icon_url != $icon_url) {
if (USE_CURL_FOR_ICONS || url_validate($icon_url)) {
db_query($link, "UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'");
if (!$feed_title) $feed_title = getFeedTitle($link, $feed_id, false);
if (!$unread) $unread = getFeedUnread($link, $feed_id);
- if ($unread > 0) $class .= "Unread";
+ if ($unread > 0) $class .= " Unread";
if (!$icon_file) $icon_file = getFeedIcon($feed_id);
print "<span $rtl_tag id=\"FEEDN-$feed_id\">$feed</span>";
if ($unread != 0) {
- $fctr_class = "class=\"feedCtrHasUnread\"";
+ $fctr_class = "class=\"feedCtr Unread\"";
} else {
- $fctr_class = "class=\"feedCtrNoUnread\"";
+ $fctr_class = "class=\"feedCtr\"";
}
print " <span $rtl_tag $fctr_class id=\"FEEDCTR-$feed_id\">
$has_img = feed_has_icon($id);
+ if (date('Y') - date('Y', strtotime($line['last_updated'])) > 2)
+ $last_updated = '';
+
$cv = array("id" => $id,
"updated" => $last_updated,
"counter" => $count,
return ((!defined('TTRSS_SESSION_NAME')) ? "ttrss_sid" : TTRSS_SESSION_NAME);
}
- function make_init_param($param, $value) {
- return array("param" => $param, "value" => $value);
- }
-
function make_init_params($link) {
$params = array();
foreach (array("ON_CATCHUP_SHOW_NEXT_FEED", "HIDE_READ_FEEDS",
"ENABLE_FEED_CATS", "FEEDS_SORT_BY_UNREAD", "CONFIRM_FEED_CATCHUP",
- "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE",
- "HIDE_READ_SHOWS_SPECIAL", "HIDE_FEEDLIST") as $param) {
+ "CDM_AUTO_CATCHUP", "FRESH_ARTICLE_MAX_AGE", "DEFAULT_ARTICLE_LIMIT",
+ "HIDE_READ_SHOWS_SPECIAL", "HIDE_FEEDLIST", "COMBINED_DISPLAY_MODE") as $param) {
$params[strtolower($param)] = (int) get_pref($link, $param);
}
}
}
- function strip_tags_long($string, $allowed) {
-
- $config = HTMLPurifier_Config::createDefault();
-
- $config->set('HTML', 'Allowed', $allowed);
- $purifier = new HTMLPurifier($config);
-
- return $purifier->purify($string);
-
- }
-
- // http://ru2.php.net/strip-tags
-
-/* function strip_tags_long($textstring, $allowed){
- while($textstring != strip_tags($textstring, $allowed))
- {
- while (strlen($textstring) != 0)
- {
- if (strlen($textstring) > 1024) {
- $otherlen = 1024;
- } else {
- $otherlen = strlen($textstring);
- }
- $temptext = strip_tags(substr($textstring,0,$otherlen), $allowed);
- $safetext .= $temptext;
- $textstring = substr_replace($textstring,'',0,$otherlen);
- }
- $textstring = $safetext;
- }
- return $textstring;
-} */
-
-
function sanitize_rss($link, $str, $force_strip_tags = false, $owner = false, $site_url = false) {
+ global $purifier;
if (!$owner) $owner = $_SESSION["uid"];
$res = trim($str); if (!$res) return '';
if (get_pref($link, "STRIP_UNSAFE_TAGS", $owner) || $force_strip_tags) {
-
-// $res = strip_tags_long($res,
-// "<p><a><i><em><b><strong><code><pre><blockquote><br><img><ul><ol><li>");
-
- $res = strip_tags_long($res,
- "p,a[href],i,em,b,strong,code,pre,blockquote,br,img[src|alt|title],ul,ol,li,h1,h2,h3,h4");
-
+ $res = $purifier->purify($res);
}
if (get_pref($link, "STRIP_IMAGES", $owner)) {
if (DEFAULT_UPDATE_METHOD == "1") {
$rss = new SimplePie();
- $rss->set_useragent(SIMPLEPIE_USERAGENT . MAGPIE_USER_AGENT_EXT);
+ $rss->set_useragent(SELF_USER_AGENT);
$rss->set_feed_url($fetch_url);
$rss->set_output_encoding('UTF-8');
$rss->init();
$feed_id, $is_cat, $search, $match_on,
$search_mode, $view_mode) {
- print "<div class=\"headlinesSubToolbar\">";
+# print "<div class=\"headlinesSubToolbar\">";
$page_prev_link = "javascript:viewFeedGoPage(-1)";
$page_next_link = "javascript:viewFeedGoPage(1)";
print "</ul>";
- print "</div>";
+# print "</div>";
}
function printCategoryHeader($link, $cat_id, $hidden = false, $can_browse = true,
$collapse_pic = "cat-collapse.png";
}
- $catctr_class = ($cat_unread > 0) ? "catCtrHasUnread" : "catCtrNoUnread";
+ $catctr_class = ($cat_unread > 0) ? "catCtr Unread" : "catCtr";
if ($can_browse) {
$browse_cat_link = "onclick=\"javascript:viewCategory($cat_id)\"";
}
if ($actid == $feed_id) {
- $class .= "Selected";
+ $class .= " Selected";
}
$total_unread += $unread;
/// STOP //////////////////////////////////////////////////////////////////////////////////
+ print "<toolbar><![CDATA[";
+
if (!$offset) {
- print "<div id=\"headlinesContainer\" $rtl_tag>";
+// print "<div id=\"headlinesContainer\" $rtl_tag>";
if (!$result) {
print "<div align='center'>".__("Could not display feed (query failed). Please check label match syntax or local configuration.")."</div>";
print_headline_subtoolbar($link, $feed_site_url, $feed_title,
$feed, $cat_view, $search, $match_on, $search_mode, $view_mode);
- print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">";
+// print "<div id=\"headlinesInnerContainer\" onscroll=\"headlines_scroll_handler()\">";
}
}
+ print "]]></toolbar><content><![CDATA[";
+
$headlines_count = db_num_rows($result);
if (db_num_rows($result) > 0) {
-# print "\{$offset}";
-
- if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) {
- print "<table class=\"headlinesList\" id=\"headlinesList\"
- cellspacing=\"0\">";
- }
-
$lnum = $limit*$offset;
$num_unread = 0;
}
if ($line["unread"] == "t" || $line["unread"] == "1") {
- $class .= "Unread";
+ $class .= " Unread";
++$num_unread;
$is_unread = true;
} else {
$vf_catchup_link = "(<a onclick='javascript:catchupFeedInGroup($feed_id);' href='#'>".__('mark as read')."</a>)";
- print "<tr class='feedTitle'><td colspan='7'>".
+ print "<div class='cdmFeedTitle'>".
"<div style=\"float : right\">$feed_icon_img</div>".
"<a href=\"#\" onclick=\"viewfeed($feed_id)\">".
- $line["feed_title"]."</a> $vf_catchup_link</td></tr>";
+ $line["feed_title"]."</a> $vf_catchup_link</div>";
+
}
}
$mouseover_attrs = "onmouseover='postMouseIn($id)'
onmouseout='postMouseOut($id)'";
- print "<tr class='$class' id='RROW-$id' $mouseover_attrs>";
-
- print "<td class='hlUpdPic'>$update_pic</td>";
-
- print "<td class='hlSelectRow'>
- <input type=\"checkbox\" onclick=\"tSR(this)\"
- id=\"RCHK-$id\">
- </td>";
+ print "<div class='$class' id='RROW-$id' $mouseover_attrs>";
+
+ print "<div class='hlUpdPic'>$update_pic</div>";
+
+ print "<div class='hlLeft'>";
+
+ print "<input type=\"checkbox\" onclick=\"tSR(this)\"
+ id=\"RCHK-$id\">";
- print "<td class='hlMarkedPic'>$marked_pic</td>";
- print "<td class='hlMarkedPic'>$published_pic</td>";
+ print "$marked_pic";
+ print "$published_pic";
- print "<td onclick='return hlClicked(event,$id)'
- class='hlContent$hlc_suffix' valign='middle' id='HLC-$id'>";
+ print "</div>";
+ print "<div onclick='return hlClicked(event, $id)'
+ class=\"hlTitle\"><span class='hlContent$hlc_suffix'>";
print "<a id=\"RTITLE-$id\"
href=\"" . htmlspecialchars($line["link"]) . "\"
- onclick=\"return false\">" .
+ onclick=\"return false;\">" .
$line["title"];
if (get_pref($link, 'SHOW_CONTENT_PREVIEW')) {
}
}
- print "</a>";
+ print "</a></span>";
print $labels_str;
}
} */
- print "</td>";
+ print "</div>";
-
- print "<td class=\"hlUpdated\"
- onclick='return hlClicked(event,$id)'><nobr>$updated_fmt
- </nobr></td>";
+ print "<div class=\"hlRight\">";
+ print "<span class=\"hlUpdated\">$updated_fmt</span>";
+ print $score_pic;
- print "<td class='hlMarkedPic'>$score_pic</td>";
+ if ($line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) {
- if (@$line["feed_title"] && !get_pref($link, 'VFEED_GROUP_BY_FEED')) {
- print "<td onclick=\"viewfeed($feed_id)\"
- title=\"".htmlspecialchars($line['feed_title'])."\"
- class=\"hlFeedIcon\">$feed_icon_img</td>";
+ print "<span onclick=\"viewfeed($feed_id)\"
+ title=\"".htmlspecialchars($line['feed_title'])."\">
+ $feed_icon_img<span>";
}
- print "</tr>";
+ print "</div>";
+ print "</div>";
} else {
}
}
- if ($is_unread) {
- $add_class = "Unread";
- } else {
- $add_class = "";
- }
-
$expand_cdm = get_pref($link, 'CDM_EXPANDED');
$mouseover_attrs = "onmouseover='postMouseIn($id)'
print "<div style='float : right'>";
print "<span class='updated'>$updated_fmt</span>";
- print "$marked_pic";
- print "$published_pic";
print "$score_pic";
if (!get_pref($link, "VFEED_GROUP_BY_FEED") && $line["feed_title"]) {
title=\"".htmlspecialchars($line["feed_title"])."\"
onclick=\"viewfeed($feed_id)\">$feed_icon_img</span>";
}
+ print "<div class=\"updPic\">$update_pic</div>";
+
print "</div>";
-
+
print "<input type=\"checkbox\" onclick=\"toggleSelectRowById(this,
- 'RROW-$id')\" class=\"feedCheckBox\" id=\"RCHK-$id\"/>";
+ 'RROW-$id')\" id=\"RCHK-$id\"/>";
+
+ print "$marked_pic";
+ print "$published_pic";
print "<span id=\"RTITLE-$id\"
onclick=\"return cdmExpandArticle($id)\"
class=\"titleWrap$hlc_suffix\">
<a class=\"title\"
target=\"_blank\" href=\"".$line["link"]."\">".$line["title"]."</a>
+ $entry_author
</span>";
print $labels_str;
}
}
- $article_content = sanitize_rss($link, $line["content_preview"],
- false, false, $feed_site_url);
+ if ($expand_cdm) {
+ $article_content = sanitize_rss($link, $line["content_preview"],
+ false, false, $feed_site_url);
- if (!$article_content) $article_content = " ";
+ if (!$article_content) $article_content = " ";
+ } else {
+ $article_content = '';
+ }
print "<div id=\"POSTNOTE-$id\">";
if ($line['note']) {
}
print "</div>";
- print $article_content;
+ print "<span id=\"CWRAP-$id\">$article_content</span>";
$tmp_result = db_query($link, "SELECT always_display_enclosures FROM
ttrss_feeds WHERE id = ".
++$lnum;
}
- if (!get_pref($link, 'COMBINED_DISPLAY_MODE') && !$offset) {
- print "</table>";
- }
-
} else {
$message = "";
}
}
- if (!$offset) {
- if ($headlines_count > 0) print "</div>";
- print "</div>";
- }
+# if (!$offset) {
+# if ($headlines_count > 0) print "</div>";
+# print "</div>";
+# }
+
+ print "]]></content>";
return array($topmost_article_ids, $headlines_count, $feed, $disable_cache, $vgroup_last_feed);
}
// Send feed digests by email if needed.
if (DAEMON_SENDS_DIGESTS) send_headlines_digests($link);
- purge_orphans($link);
-
} // function update_daemon_common
function sanitize_article_content($text) {
return $ids;
}
+ function cleanup_tags($link, $days = 14, $limit = 1000) {
+
+ if (DB_TYPE == "pgsql") {
+ $interval_query = "date_updated < NOW() - INTERVAL '$days days'";
+ } else if (DB_TYPE == "mysql") {
+ $interval_query = "date_updated < DATE_SUB(NOW(), INTERVAL $days DAY)";
+ }
+
+ $tags_deleted = 0;
+
+ while ($limit > 0) {
+ $limit_part = 500;
+
+ $query = "SELECT ttrss_tags.id AS id
+ FROM ttrss_tags, ttrss_user_entries, ttrss_entries
+ WHERE post_int_id = int_id AND $interval_query AND
+ ref_id = ttrss_entries.id AND tag_cache != '' LIMIT $limit_part";
+
+ $result = db_query($link, $query);
+
+ $ids = array();
+
+ while ($line = db_fetch_assoc($result)) {
+ array_push($ids, $line['id']);
+ }
+
+ if (count($ids) > 0) {
+ $ids = join(",", $ids);
+ print ".";
+
+ $tmp_result = db_query($link, "DELETE FROM ttrss_tags WHERE id IN ($ids)");
+ $tags_deleted += db_affected_rows($link, $tmp_result);
+ } else {
+ break;
+ }
+
+ $limit -= $limit_part;
+ }
+
+ print "\n";
+
+ return $tags_deleted;
+ }
+
?>