diff options
Diffstat (limited to 'classes/feeds.php')
-rw-r--r-- | classes/feeds.php | 197 |
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 .= " <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"] = "— " . 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'] .= " "; $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>"; } |