summaryrefslogtreecommitdiff
path: root/classes/feeds.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/feeds.php')
-rw-r--r--classes/feeds.php197
1 files changed, 112 insertions, 85 deletions
diff --git a/classes/feeds.php b/classes/feeds.php
index 83736925c..5ec109614 100644
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -13,12 +13,6 @@ class Feeds extends Handler_Protected {
$feed_id, $is_cat, $search,
$search_mode, $view_mode, $error, $feed_last_updated) {
- $page_prev_link = "viewFeedGoPage(-1)";
- $page_next_link = "viewFeedGoPage(1)";
- $page_first_link = "viewFeedGoPage(0)";
-
- $catchup_page_link = "catchupPage()";
- $catchup_feed_link = "catchupCurrentFeed()";
$catchup_sel_link = "catchupSelection()";
$archive_sel_link = "archiveSelection()";
@@ -43,14 +37,24 @@ class Feeds extends Handler_Protected {
$search_q = "";
}
+ $reply .= "<span class=\"holder\">";
+
$rss_link = htmlspecialchars(get_self_url_prefix() .
"/public.php?op=rss&id=$feed_id$cat_q$search_q");
// right part
- $reply .= "<span class='r'>";
- $reply .= "<span id='selected_prompt'></span>";
- $reply .= "<span id='feed_title'>";
+ $error_class = $error ? "error" : "";
+
+ $reply .= "<span class='r'>
+ <a href=\"#\"
+ title=\"".__("View as RSS feed")."\"
+ onclick=\"displayDlg('".__("View as RSS")."','generatedFeed', '$feed_id:$is_cat:$rss_link')\">
+ <img class=\"noborder\" src=\"images/pub_set.png\"></a>";
+
+
+# $reply .= "<span>";
+ $reply .= "<span id='feed_title' class='$error_class'>";
if ($feed_site_url) {
$last_updated = T_sprintf("Last updated: %s",
@@ -58,10 +62,11 @@ class Feeds extends Handler_Protected {
$target = "target=\"_blank\"";
$reply .= "<a title=\"$last_updated\" $target href=\"$feed_site_url\">".
- truncate_string($feed_title,30)."</a>";
+ truncate_string($feed_title, 30)."</a>";
if ($error) {
- $reply .= " (<span class=\"error\" title=\"$error\">Error</span>)";
+ $error = htmlspecialchars($error);
+ $reply .= "&nbsp;<img title=\"$error\" src='images/error.png' alt='error' class=\"noborder\">";
}
} else {
@@ -70,17 +75,16 @@ class Feeds extends Handler_Protected {
$reply .= "</span>";
- $reply .= "
- <a href=\"#\"
- title=\"".__("View as RSS feed")."\"
- onclick=\"displayDlg('".__("View as RSS")."','generatedFeed', '$feed_id:$is_cat:$rss_link')\">
- <img class=\"noborder\" style=\"vertical-align : middle\" src=\"images/pub_set.svg\"></a>";
-
$reply .= "</span>";
+# $reply .= "</span>";
+
// left part
- $reply .= __('Select:')."
+ $reply .= "<span class=\"main\">";
+ $reply .= "<span id='selected_prompt'></span>";
+
+ $reply .= "
<a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
<a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
<a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
@@ -129,14 +133,14 @@ class Feeds extends Handler_Protected {
$reply .= "</select>";
- //$reply .= "</div>";
-
//$reply .= "</h2";
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HEADLINE_TOOLBAR_BUTTON) as $p) {
- echo $p->hook_headline_toolbar_button($feed_id, $is_cat);
+ $reply .= $p->hook_headline_toolbar_button($feed_id, $is_cat);
}
+ $reply .= "</span></span>";
+
return $reply;
}
@@ -145,7 +149,7 @@ class Feeds extends Handler_Protected {
$override_order = false, $include_children = false) {
if (isset($_REQUEST["DevForceUpdate"]))
- header("Content-Type: text/plain");
+ header("Content-Type: text/plain; charset=utf-8");
$disable_cache = false;
@@ -244,6 +248,8 @@ class Feeds extends Handler_Protected {
false, 0, $include_children);
}
+ $vfeed_group_enabled = get_pref("VFEED_GROUP_BY_FEED") && $feed != -6;
+
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("H1", $timing_info);
$result = $qfh_ret[0];
@@ -252,6 +258,7 @@ class Feeds extends Handler_Protected {
$last_error = $qfh_ret[3];
$last_updated = strpos($qfh_ret[4], '1970-') === FALSE ?
make_local_datetime($qfh_ret[4], false) : __("Never");
+ $highlight_words = $qfh_ret[5];
$vgroup_last_feed = $vgr_last_feed;
@@ -274,6 +281,12 @@ class Feeds extends Handler_Protected {
}
} */
+ if ($offset == 0) {
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_HEADLINES_BEFORE) as $p) {
+ $reply['content'] .= $p->hook_headlines_before($feed, $cat_view, $qfh_ret);
+ }
+ }
+
if ($this->dbh->num_rows($result) > 0) {
$lnum = $offset;
@@ -281,13 +294,21 @@ class Feeds extends Handler_Protected {
$num_unread = 0;
$cur_feed_title = '';
- $fresh_intl = get_pref("FRESH_ARTICLE_MAX_AGE") * 60 * 60;
-
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PS", $timing_info);
$expand_cdm = get_pref('CDM_EXPANDED');
while ($line = $this->dbh->fetch_assoc($result)) {
+ $line["content_preview"] = "&mdash; " . truncate_string(strip_tags($line["content"]), 250);
+
+ foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
+ $line = $p->hook_query_headlines($line, 250, false);
+ }
+
+ if (get_pref('SHOW_CONTENT_PREVIEW')) {
+ $content_preview = $line["content_preview"];
+ }
+
$id = $line["id"];
$feed_id = $line["feed_id"];
$label_cache = $line["label_cache"];
@@ -306,7 +327,7 @@ class Feeds extends Handler_Protected {
if (!is_array($labels)) $labels = get_article_labels($id);
- $labels_str = "<span id=\"HLLCTR-$id\">";
+ $labels_str = "<span class=\"HLLCTR-$id\">";
$labels_str .= format_article_labels($labels, $id);
$labels_str .= "</span>";
@@ -323,24 +344,24 @@ class Feeds extends Handler_Protected {
if (sql_bool_to_bool($line["marked"])) {
$marked_pic = "<img
- src=\"images/mark_set.svg\"
+ src=\"images/mark_set.png\"
class=\"markedPic\" alt=\"Unstar article\"
onclick='toggleMark($id)'>";
$class .= " marked";
} else {
$marked_pic = "<img
- src=\"images/mark_unset.svg\"
+ src=\"images/mark_unset.png\"
class=\"markedPic\" alt=\"Star article\"
onclick='toggleMark($id)'>";
}
if (sql_bool_to_bool($line["published"])) {
- $published_pic = "<img src=\"images/pub_set.svg\"
+ $published_pic = "<img src=\"images/pub_set.png\"
class=\"pubPic\"
alt=\"Unpublish article\" onclick='togglePub($id)'>";
$class .= " published";
} else {
- $published_pic = "<img src=\"images/pub_unset.svg\"
+ $published_pic = "<img src=\"images/pub_unset.png\"
class=\"pubPic\"
alt=\"Publish article\" onclick='togglePub($id)'>";
}
@@ -360,11 +381,6 @@ class Feeds extends Handler_Protected {
$date_entered_fmt = T_sprintf("Imported at %s",
make_local_datetime($line["date_entered"], false));
- if (get_pref('SHOW_CONTENT_PREVIEW')) {
- $content_preview = truncate_string(strip_tags($line["content_preview"]),
- 250);
- }
-
$score = $line["score"];
$score_pic = "images/" . get_score_pic($score);
@@ -377,9 +393,9 @@ class Feeds extends Handler_Protected {
title=\"$score\">";
if ($score > 500) {
- $hlc_suffix = "H";
+ $hlc_suffix = "high";
} else if ($score < -100) {
- $hlc_suffix = "L";
+ $hlc_suffix = "low";
} else {
$hlc_suffix = "";
}
@@ -395,7 +411,7 @@ class Feeds extends Handler_Protected {
if ($has_feed_icon) {
$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"".ICONS_URL."/$feed_id.ico\" alt=\"\">";
} else {
- $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/pub_set.svg\" alt=\"\">";
+ $feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/pub_set.png\" alt=\"\">";
}
$entry_site_url = $line["site_url"];
@@ -413,7 +429,7 @@ class Feeds extends Handler_Protected {
if (!get_pref('COMBINED_DISPLAY_MODE')) {
- if (get_pref('VFEED_GROUP_BY_FEED')) {
+ if ($vfeed_group_enabled) {
if ($feed_id != $vgroup_last_feed && $line["feed_title"]) {
$cur_feed_title = $line["feed_title"];
@@ -421,12 +437,12 @@ class Feeds extends Handler_Protected {
$cur_feed_title = htmlspecialchars($cur_feed_title);
- $vf_catchup_link = "(<a class='catchup' onclick='catchupFeedInGroup($feed_id);' href='#'>".__('Mark as read')."</a>)";
+ $vf_catchup_link = "<a class='catchup' onclick='catchupFeedInGroup($feed_id);' href='#'>".__('mark feed as read')."</a>";
- $reply['content'] .= "<div class='cdmFeedTitle'>".
- "<div style=\"float : right\">$feed_icon_img</div>".
- "<a class='title' href=\"#\" onclick=\"viewfeed($feed_id)\">".
- $line["feed_title"]."</a> $vf_catchup_link</div>";
+ $reply['content'] .= "<div id='FTITLE-$feed_id' class='cdmFeedTitle'>".
+ "<div style='float : right'>$feed_icon_img</div>".
+ "<a class='title' href=\"#\" onclick=\"viewfeed($feed_id)\">". $line["feed_title"]."</a>
+ $vf_catchup_link</div>";
}
}
@@ -434,7 +450,7 @@ class Feeds extends Handler_Protected {
$mouseover_attrs = "onmouseover='postMouseIn(event, $id)'
onmouseout='postMouseOut($id)'";
- $reply['content'] .= "<div class='hl $class' id='RROW-$id' $mouseover_attrs>";
+ $reply['content'] .= "<div class='hl $class' orig-feed-id='$feed_id' id='RROW-$id' $mouseover_attrs>";
$reply['content'] .= "<div class='hlLeft'>";
@@ -448,16 +464,14 @@ class Feeds extends Handler_Protected {
$reply['content'] .= "</div>";
$reply['content'] .= "<div onclick='return hlClicked(event, $id)'
- class=\"hlTitle\"><span class='hlContent$hlc_suffix'>";
- $reply['content'] .= "<a id=\"RTITLE-$id\" class=\"title\"
+ class=\"hlTitle\"><span class='hlContent $hlc_suffix'>";
+ $reply['content'] .= "<a id=\"RTITLE-$id\" class=\"title $hlc_suffix\"
href=\"" . htmlspecialchars($line["link"]) . "\"
onclick=\"\">" .
truncate_string($line["title"], 200);
if (get_pref('SHOW_CONTENT_PREVIEW')) {
- if ($content_preview) {
- $reply['content'] .= "<span class=\"contentPreview\"> - $content_preview</span>";
- }
+ $reply['content'] .= "<span class=\"contentPreview\">" . $line["content_preview"] . "</span>";
}
$reply['content'] .= "</a></span>";
@@ -466,17 +480,18 @@ class Feeds extends Handler_Protected {
$reply['content'] .= "</div>";
- $reply['content'] .= "<span class=\"hlUpdated\">";
-
- if (!get_pref('VFEED_GROUP_BY_FEED')) {
+ if (!$vfeed_group_enabled) {
if (@$line["feed_title"]) {
$rgba = @$rgba_cache[$feed_id];
- $reply['content'] .= "<a class=\"hlFeed\" style=\"background : rgba($rgba, 0.3)\" href=\"#\" onclick=\"viewfeed($feed_id)\">".
- truncate_string($line["feed_title"],30)."</a>";
+ $reply['content'] .= "<span class=\"hlFeed\"><a style=\"background : rgba($rgba, 0.3)\" href=\"#\" onclick=\"viewfeed($feed_id)\">".
+ truncate_string($line["feed_title"],30)."</a></span>";
}
}
+
+ $reply['content'] .= "<span class=\"hlUpdated\">";
+
$reply['content'] .= "<div title='$date_entered_fmt'>$updated_fmt</div>
</span>";
@@ -484,12 +499,12 @@ class Feeds extends Handler_Protected {
$reply['content'] .= $score_pic;
- if ($line["feed_title"] && !get_pref('VFEED_GROUP_BY_FEED')) {
+ if ($line["feed_title"] && !$vfeed_group_enabled) {
$reply['content'] .= "<span onclick=\"viewfeed($feed_id)\"
style=\"cursor : pointer\"
title=\"".htmlspecialchars($line['feed_title'])."\">
- $feed_icon_img<span>";
+ $feed_icon_img</span>";
}
$reply['content'] .= "</div>";
@@ -502,14 +517,14 @@ class Feeds extends Handler_Protected {
else
$tags = false;
- $line["content"] = sanitize($line["content_preview"],
- sql_bool_to_bool($line['hide_images']), false, $entry_site_url);
+ $line["content"] = sanitize($line["content"],
+ sql_bool_to_bool($line['hide_images']), false, $entry_site_url, $highlight_words, $line["id"]);
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) {
$line = $p->hook_render_article_cdm($line);
}
- if (get_pref('VFEED_GROUP_BY_FEED') && $line["feed_title"]) {
+ if ($vfeed_group_enabled && $line["feed_title"]) {
if ($feed_id != $vgroup_last_feed) {
$cur_feed_title = $line["feed_title"];
@@ -517,7 +532,7 @@ class Feeds extends Handler_Protected {
$cur_feed_title = htmlspecialchars($cur_feed_title);
- $vf_catchup_link = "(<a class='catchup' onclick='javascript:catchupFeedInGroup($feed_id);' href='#'>".__('mark as read')."</a>)";
+ $vf_catchup_link = "<a class='catchup' onclick='catchupFeedInGroup($feed_id);' href='#'>".__('mark feed as read')."</a>";
$has_feed_icon = feed_has_icon($feed_id);
@@ -527,7 +542,7 @@ class Feeds extends Handler_Protected {
//$feed_icon_img = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\" alt=\"\">";
}
- $reply['content'] .= "<div class='cdmFeedTitle'>".
+ $reply['content'] .= "<div id='FTITLE-$feed_id' class='cdmFeedTitle'>".
"<div style=\"float : right\">$feed_icon_img</div>".
"<a href=\"#\" class='title' onclick=\"viewfeed($feed_id)\">".
$line["feed_title"]."</a> $vf_catchup_link</div>";
@@ -539,10 +554,10 @@ class Feeds extends Handler_Protected {
$expanded_class = $expand_cdm ? "expanded" : "expandable";
- $reply['content'] .= "<div class=\"cdm $expanded_class $class\"
- id=\"RROW-$id\" $mouseover_attrs>";
+ $reply['content'] .= "<div class=\"cdm $hlc_suffix $expanded_class $class\"
+ id=\"RROW-$id\" orig-feed-id='$feed_id' $mouseover_attrs>";
- $reply['content'] .= "<div class=\"cdmHeader\" style=\"$row_background\">";
+ $reply['content'] .= "<div class=\"cdmHeader\">";
$reply['content'] .= "<div style=\"vertical-align : middle\">";
$reply['content'] .= "<input dojoType=\"dijit.form.CheckBox\"
@@ -554,10 +569,17 @@ class Feeds extends Handler_Protected {
$reply['content'] .= "</div>";
+ if ($highlight_words && count($highlight_words > 0)) {
+ foreach ($highlight_words as $word) {
+ $line["title"] = preg_replace("/(\Q$word\E)/i",
+ "<span class=\"highlight\">$1</span>", $line["title"]);
+ }
+ }
+
$reply['content'] .= "<span id=\"RTITLE-$id\"
onclick=\"return cdmClicked(event, $id);\"
- class=\"titleWrap$hlc_suffix\">
- <a class=\"title\"
+ class=\"titleWrap $hlc_suffix\">
+ <a class=\"title $hlc_suffix\"
target=\"_blank\" href=\"".
htmlspecialchars($line["link"])."\">".
$line["title"] .
@@ -574,11 +596,11 @@ class Feeds extends Handler_Protected {
else
$excerpt_hidden = "style=\"display : none\"";
- $reply['content'] .= "<span $excerpt_hidden
- id=\"CEXC-$id\" class=\"cdmExcerpt\"> - $content_preview</span>";
+ $reply['content'] .= "<span $excerpt_hidden id=\"CEXC-$id\" class=\"cdmExcerpt\">" . $content_preview . "</span>";
+
$reply['content'] .= "</span>";
- if (!get_pref('VFEED_GROUP_BY_FEED')) {
+ if (!$vfeed_group_enabled) {
if (@$line["feed_title"]) {
$rgba = @$rgba_cache[$feed_id];
@@ -615,7 +637,9 @@ class Feeds extends Handler_Protected {
}
$reply['content'] .= "</div>";
- $reply['content'] .= "<div class=\"cdmContentInner\">";
+ if (!$line['lang']) $line['lang'] = 'en';
+
+ $reply['content'] .= "<div class=\"cdmContentInner\" lang=\"".$line['lang']."\">";
if ($line["orig_feed_id"]) {
@@ -638,7 +662,7 @@ class Feeds extends Handler_Protected {
$reply['content'] .= "&nbsp;";
$reply['content'] .= "<a target='_blank' href='" . htmlspecialchars($tmp_line['feed_url']) . "'>";
- $reply['content'] .= "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_unset.svg'></a>";
+ $reply['content'] .= "<img title='".__('Feed URL')."'class='tinyFeedIcon' src='images/pub_unset.png'></a>";
$reply['content'] .= "</div>";
}
@@ -685,10 +709,13 @@ class Feeds extends Handler_Protected {
} else {
$comments_url = htmlspecialchars($line["link"]);
}
- $entry_comments = "<a target='_blank' href=\"$comments_url\">$num_comments comments</a>";
+ $entry_comments = "<a class=\"postComments\"
+ target='_blank' href=\"$comments_url\">$num_comments ".
+ _ngettext("comment", "comments", $num_comments)."</a>";
+
} else {
if ($line["comments"] && $line["link"] != $line["comments"]) {
- $entry_comments = "<a target='_blank' href=\"".htmlspecialchars($line["comments"])."\">comments</a>";
+ $entry_comments = "<a class=\"postComments\" target='_blank' href=\"".htmlspecialchars($line["comments"])."\">".__("comments")."</a>";
}
}
@@ -706,7 +733,7 @@ class Feeds extends Handler_Protected {
$reply['content'] .= "</div>";
$reply['content'] .= "</div>";
- $reply['content'] .= "</div><hr/>";
+ $reply['content'] .= "</div>";
$reply['content'] .= "</div>";
@@ -784,8 +811,6 @@ class Feeds extends Handler_Protected {
if ($_REQUEST["debug"]) $timing_info = print_checkpoint("0", $timing_info);
- $omode = $this->dbh->escape_string($_REQUEST["omode"]);
-
$feed = $this->dbh->escape_string($_REQUEST["feed"]);
$method = $this->dbh->escape_string($_REQUEST["m"]);
$view_mode = $this->dbh->escape_string($_REQUEST["view_mode"]);
@@ -863,7 +888,7 @@ class Feeds extends Handler_Protected {
$override_order = "ttrss_entries.title";
break;
case "date_reverse":
- $override_order = "date_entered, updated";
+ $override_order = "score DESC, date_entered, updated";
break;
case "feed_dates":
$override_order = "updated DESC";
@@ -878,7 +903,7 @@ class Feeds extends Handler_Protected {
//$topmost_article_ids = $ret[0];
$headlines_count = $ret[1];
- $returned_feed = $ret[2];
+ /* $returned_feed = $ret[2]; */
$disable_cache = $ret[3];
$vgroup_last_feed = $ret[4];
@@ -959,6 +984,10 @@ class Feeds extends Handler_Protected {
print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"rpc\">";
print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"addfeed\">";
+ print "<div id='fadd_multiple_notify' style='display : none'>";
+ print_notice("Provided URL is a HTML page referencing multiple feeds, please select required feed from the dropdown menu below.");
+ print "<p></div>";
+
print "<div class=\"dlgSec\">".__("Feed or site URL")."</div>";
print "<div class=\"dlgSecCont\">";
@@ -1054,20 +1083,18 @@ class Feeds extends Handler_Protected {
print " <select dojoType=\"dijit.form.Select\" name=\"limit\" onchange=\"dijit.byId('feedBrowserDlg').update()\">";
foreach (array(25, 50, 100, 200) as $l) {
- $issel = ($l == $limit) ? "selected=\"1\"" : "";
- print "<option $issel value=\"$l\">$l</option>";
+ //$issel = ($l == $limit) ? "selected=\"1\"" : "";
+ print "<option value=\"$l\">$l</option>";
}
print "</select> ";
print "</div>";
- $owner_uid = $_SESSION["uid"];
-
require_once "feedbrowser.php";
print "<ul class='browseFeedList' id='browseFeedList'>";
- print make_feed_browser($search, 25);
+ print make_feed_browser("", 25);
print "</ul>";
print "<div align='center'>
@@ -1126,9 +1153,9 @@ class Feeds extends Handler_Protected {
print "<div class=\"dlgButtons\">";
- if (!SPHINX_ENABLED) {
+ if (count(PluginHost::getInstance()->get_hooks(PluginHost::HOOK_SEARCH)) == 0) {
print "<div style=\"float : left\">
- <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/wiki/SearchSyntax\">Search syntax</a>
+ <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/wiki/SearchSyntax\">".__("Search syntax")."</a>
</div>";
}