X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=classes%2Ffeeds.php;h=7e48efd6c3bb7ff7521cb6865408bf998d3531da;hb=4508e3103d12f6cb9b99c3f0471b83e799d596e9;hp=70e8ade939655a8cb8ee218c561a922d88f9bcca;hpb=64312bfd7195e0c2af3f8c854025c44ade4af9a4;p=tt-rss.git diff --git a/classes/feeds.php b/classes/feeds.php index 70e8ade9..7e48efd6 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -64,7 +64,7 @@ class Feeds extends Handler_Protected { $target = "target=\"_blank\""; $reply .= "". - truncate_string($feed_title, 30).""; + truncate_string(strip_tags($feed_title), 30).""; if ($error) { $error = htmlspecialchars($error); @@ -72,7 +72,7 @@ class Feeds extends Handler_Protected { } } else { - $reply .= $feed_title; + $reply .= strip_tags($feed_title); } $reply .= ""; @@ -173,49 +173,10 @@ class Feeds extends Handler_Protected { $method_split = explode(":", $method); if ($method == "ForceUpdate" && $feed > 0 && is_numeric($feed)) { - // Update the feed if required with some basic flood control - - $any_needs_curl = false; - - if (ini_get("open_basedir")) { - $pluginhost = PluginHost::getInstance(); - foreach ($pluginhost->get_plugins() as $plugin) { - $flags = $plugin->flags(); - - if (isset($flags["needs_curl"]) && $flags["needs_curl"]) { - $any_needs_curl = true; - break; - } - } - } - - //if ($_REQUEST["debug"]) print ""; - - if (!$any_needs_curl) { - - $sth = $this->pdo->prepare("SELECT cache_images," . SUBSTRING_FOR_DATE . "(last_updated,1,19) AS last_updated - FROM ttrss_feeds WHERE id = ?"); - $sth->execute([$feed]); - - if ($row = $sth->fetch()) { - $last_updated = strtotime($row["last_updated"]); - $cache_images = $row["cache_images"]; - - if (!$cache_images && time() - $last_updated > 120) { - RSSUtils::update_rss_feed($feed, true); - } else { - $sth = $this->pdo->prepare("UPDATE ttrss_feeds - SET last_updated = '1970-01-01', last_update_started = '1970-01-01' - WHERE id = ?"); - $sth->execute([$feed]); - } - } - } else { - $sth = $this->pdo->prepare("UPDATE ttrss_feeds - SET last_updated = '1970-01-01', last_update_started = '1970-01-01' - WHERE id = ?"); - $sth->execute([$feed]); - } + $sth = $this->pdo->prepare("UPDATE ttrss_feeds + SET last_updated = '1970-01-01', last_update_started = '1970-01-01' + WHERE id = ?"); + $sth->execute([$feed]); } if ($method_split[0] == "MarkAllReadGR") { @@ -286,7 +247,7 @@ class Feeds extends Handler_Protected { if ($_REQUEST["debug"]) $timing_info = print_checkpoint("H1", $timing_info); - $result = $qfh_ret[0]; + $result = $qfh_ret[0]; // this could be either a PDO query result or a -1 if first id changed $feed_title = $qfh_ret[1]; $feed_site_url = $qfh_ret[2]; $last_error = $qfh_ret[3]; @@ -318,441 +279,417 @@ class Feeds extends Handler_Protected { if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PS", $timing_info); $expand_cdm = get_pref('CDM_EXPANDED'); - while ($line = $result->fetch()) { - - ++$headlines_count; - - $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"]; - $labels = false; - - if ($label_cache) { - $label_cache = json_decode($label_cache, true); - - if ($label_cache) { - if ($label_cache["no-labels"] == 1) - $labels = array(); - else - $labels = $label_cache; - } - } - - if (!is_array($labels)) $labels = Article::get_article_labels($id); - - $labels_str = ""; - $labels_str .= Article::format_article_labels($labels); - $labels_str .= ""; - - if (count($topmost_article_ids) < 3) { - array_push($topmost_article_ids, $id); - } - - $class = ""; - - if ($line["unread"]) { - $class .= " Unread"; - ++$num_unread; - } - - if ($line["marked"]) { - $marked_pic = "\"Unstar"; - $class .= " marked"; - } else { - $marked_pic = "\"Star"; - } - - if ($line["published"]) { - $published_pic = "\"Unpublish"; - $class .= " published"; - } else { - $published_pic = "\"Publish"; - } - - $updated_fmt = make_local_datetime($line["updated"], false, false, false, true); - $date_entered_fmt = T_sprintf("Imported at %s", - make_local_datetime($line["date_entered"], false)); - - $score = $line["score"]; - - $score_pic = "images/" . get_score_pic($score); - - $score_pic = ""; + if (is_object($result)) { + + while ($line = $result->fetch()) { + + ++$headlines_count; + + $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 ($score > 500) { - $hlc_suffix = "high"; - } else if ($score < -100) { - $hlc_suffix = "low"; - } else { - $hlc_suffix = ""; - } + if (get_pref('SHOW_CONTENT_PREVIEW')) { + $content_preview = $line["content_preview"]; + } - $entry_author = $line["author"]; + $id = $line["id"]; + $feed_id = $line["feed_id"]; + $label_cache = $line["label_cache"]; + $labels = false; - if ($entry_author) { - $entry_author = " — $entry_author"; - } + $mouseover_attrs = "onmouseover='postMouseIn(event, $id)' onmouseout='postMouseOut($id)'"; - $has_feed_icon = feed_has_icon($feed_id); + if ($label_cache) { + $label_cache = json_decode($label_cache, true); - if ($has_feed_icon) { - $feed_icon_img = "\"\""; - } else { - $feed_icon_img = "\"\""; - } + if ($label_cache) { + if ($label_cache["no-labels"] == 1) + $labels = array(); + else + $labels = $label_cache; + } + } - $entry_site_url = $line["site_url"]; + if (!is_array($labels)) $labels = Article::get_article_labels($id); - //setting feed headline background color, needs to change text color based on dark/light - $fav_color = $line['favicon_avg_color']; + $labels_str = ""; + $labels_str .= Article::format_article_labels($labels); + $labels_str .= ""; - require_once "colors.php"; + if (count($topmost_article_ids) < 3) { + array_push($topmost_article_ids, $id); + } - if ($fav_color && $fav_color != 'fail') { - if (!isset($rgba_cache[$feed_id])) { - $rgba_cache[$feed_id] = join(",", _color_unpack($fav_color)); - } - } + $class = ""; - if (!get_pref('COMBINED_DISPLAY_MODE')) { + if ($line["unread"]) { + $class .= " Unread"; + ++$num_unread; + } - if ($vfeed_group_enabled) { - if ($feed_id != $vgroup_last_feed && $line["feed_title"]) { + $marked_pic_src = $line["marked"] ? "mark_set.png" : "mark_unset.png"; + $class .= $line["marked"] ? " marked" : ""; + $marked_pic = ""; - $cur_feed_title = $line["feed_title"]; - $vgroup_last_feed = $feed_id; + $published_pic_src = $line["published"] ? "pub_set.png" : "pub_unset.png"; + $class .= $line["published"] ? " published" : ""; + $published_pic = ""; - $cur_feed_title = htmlspecialchars($cur_feed_title); + $updated_fmt = make_local_datetime($line["updated"], false, false, false, true); + $date_entered_fmt = T_sprintf("Imported at %s", + make_local_datetime($line["date_entered"], false)); - $vf_catchup_link = "".__('mark feed as read').""; + $score = $line["score"]; - $reply['content'] .= "
". - "
$feed_icon_img
". - "". - $line["feed_title"]." - $vf_catchup_link
"; + $score_pic = "images/" . get_score_pic($score); + $score_pic = ""; + + if ($score > 500) { + $hlc_suffix = "high"; + } else if ($score < -100) { + $hlc_suffix = "low"; + } else { + $hlc_suffix = ""; + } - } - } + $entry_author = $line["author"]; - $mouseover_attrs = "onmouseover='postMouseIn(event, $id)' - onmouseout='postMouseOut($id)'"; + if ($entry_author) { + $entry_author = " — $entry_author"; + } + + $has_feed_icon = feeds::feedHasIcon($feed_id); + + if ($has_feed_icon) { + $feed_icon_img = "\"\""; + } else { + $feed_icon_img = "\"\""; + } + + $entry_site_url = $line["site_url"]; + + //setting feed headline background color, needs to change text color based on dark/light + $fav_color = $line['favicon_avg_color']; + + require_once "colors.php"; + + if ($fav_color && $fav_color != 'fail') { + if (!isset($rgba_cache[$feed_id])) { + $rgba_cache[$feed_id] = join(",", _color_unpack($fav_color)); + } + } - $reply['content'] .= "
"; + if (!get_pref('COMBINED_DISPLAY_MODE')) { - $reply['content'] .= "
"; + if ($vfeed_group_enabled) { + if ($feed_id != $vgroup_last_feed && $line["feed_title"]) { - $reply['content'] .= ""; + + $reply['content'] .= "
". + "
$feed_icon_img
". + "". + $line["feed_title"]." + $vf_catchup_link
"; + + + } + } + + $reply['content'] .= "
"; + + $reply['content'] .= "
"; + + $reply['content'] .= ""; - $reply['content'] .= "$marked_pic"; - $reply['content'] .= "$published_pic"; + $reply['content'] .= "$marked_pic"; + $reply['content'] .= "$published_pic"; - $reply['content'] .= "
"; + $reply['content'] .= "
"; - $reply['content'] .= "
"; - $reply['content'] .= "" . - truncate_string($line["title"], 200); + truncate_string($line["title"], 200); - if (get_pref('SHOW_CONTENT_PREVIEW')) { - $reply['content'] .= "" . $line["content_preview"] . ""; - } + if (get_pref('SHOW_CONTENT_PREVIEW')) { + $reply['content'] .= "" . $line["content_preview"] . ""; + } - $reply['content'] .= ""; + $reply['content'] .= ""; - $reply['content'] .= $labels_str; + $reply['content'] .= $labels_str; - $reply['content'] .= "
"; + $reply['content'] .= "
"; - if (!$vfeed_group_enabled) { - if (@$line["feed_title"]) { - $rgba = @$rgba_cache[$feed_id]; + if (!$vfeed_group_enabled) { + if (@$line["feed_title"]) { + $rgba = @$rgba_cache[$feed_id]; - $reply['content'] .= "". - truncate_string($line["feed_title"],30).""; - } - } + $reply['content'] .= "". + truncate_string($line["feed_title"],30).""; + } + } - $reply['content'] .= ""; + $reply['content'] .= ""; - $reply['content'] .= "
$updated_fmt
+ $reply['content'] .= "
$updated_fmt
"; - $reply['content'] .= "
"; + $reply['content'] .= "
"; - $reply['content'] .= $score_pic; + $reply['content'] .= $score_pic; - if ($line["feed_title"] && !$vfeed_group_enabled) { + if ($line["feed_title"] && !$vfeed_group_enabled) { - $reply['content'] .= " $feed_icon_img"; - } - - $reply['content'] .= "
"; - $reply['content'] .= "
"; - - } else { + } - if ($line["tag_cache"]) - $tags = explode(",", $line["tag_cache"]); - else - $tags = false; + $reply['content'] .= "
"; + $reply['content'] .= ""; - $line["content"] = sanitize($line["content"], - $line['hide_images'], false, $entry_site_url, $highlight_words, $line["id"]); + } else { - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) { - $line = $p->hook_render_article_cdm($line); - } + if ($line["tag_cache"]) + $tags = explode(",", $line["tag_cache"]); + else + $tags = false; - if ($vfeed_group_enabled && $line["feed_title"]) { - if ($feed_id != $vgroup_last_feed) { + $line["content"] = sanitize($line["content"], + $line['hide_images'], false, $entry_site_url, $highlight_words, $line["id"]); - $cur_feed_title = $line["feed_title"]; - $vgroup_last_feed = $feed_id; + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) { + $line = $p->hook_render_article_cdm($line); + } - $cur_feed_title = htmlspecialchars($cur_feed_title); + $line['content'] = rewrite_cached_urls($line['content']); - $vf_catchup_link = "".__('mark feed as read').""; + if ($vfeed_group_enabled && $line["feed_title"]) { + if ($feed_id != $vgroup_last_feed) { - $has_feed_icon = feed_has_icon($feed_id); + $vgroup_last_feed = $feed_id; - if ($has_feed_icon) { - $feed_icon_img = "\"\""; - } else { - //$feed_icon_img = "\"\""; - } + $vf_catchup_link = "".__('mark feed as read').""; - $reply['content'] .= "
". - "
$feed_icon_img
". - "". - $line["feed_title"]." $vf_catchup_link
"; + $feed_icon_src = Feeds::getFeedIcon($feed_id); + $feed_icon_img = ""; - } - } + $reply['content'] .= "
". + "
$feed_icon_img
". + "". + $line["feed_title"]." $vf_catchup_link
"; - $mouseover_attrs = "onmouseover='postMouseIn(event, $id)' - onmouseout='postMouseOut($id)'"; + } + } - $expanded_class = $expand_cdm ? "expanded" : "expandable"; + $expanded_class = $expand_cdm ? "expanded" : "expandable"; - $tmp_content = "
"; - $tmp_content .= "
"; - $tmp_content .= "
"; + $tmp_content .= "
"; + $tmp_content .= "
"; - $tmp_content .= ""; - $tmp_content .= "$marked_pic"; - $tmp_content .= "$published_pic"; + $tmp_content .= "$marked_pic"; + $tmp_content .= "$published_pic"; - $tmp_content .= "
"; + $tmp_content .= "
"; - if ($highlight_words && count($highlight_words > 0)) { - foreach ($highlight_words as $word) { - $line["title"] = preg_replace("/(\Q$word\E)/i", - "$1", $line["title"]); - } - } + if ($highlight_words && count($highlight_words) > 0) { + foreach ($highlight_words as $word) { + $word = preg_quote($word, "/"); - // data-article-id included for context menu - $tmp_content .= "$1", $line["title"]); + } + } + + // data-article-id included for context menu + $tmp_content .= " + class=\"titleWrap hlMenuAttach $hlc_suffix\"> ". - $line["title"] . - " $entry_author"; + htmlspecialchars($line["link"])."\">". + $line["title"] . + " $entry_author"; - $tmp_content .= $labels_str; + $tmp_content .= $labels_str; - $tmp_content .= ""; + $tmp_content .= ""; - if (!$vfeed_group_enabled) { - if (@$line["feed_title"]) { - $rgba = @$rgba_cache[$feed_id]; + if (!$vfeed_group_enabled) { + if (@$line["feed_title"]) { + $rgba = @$rgba_cache[$feed_id]; - $tmp_content .= "
+ $tmp_content .= "
". - truncate_string($line["feed_title"],30)." + truncate_string($line["feed_title"],30)."
"; - } - } + } + } - $tmp_content .= "$updated_fmt"; + $tmp_content .= "$updated_fmt"; - $tmp_content .= "
"; - $tmp_content .= "$score_pic"; + $tmp_content .= "
"; + $tmp_content .= "$score_pic"; - if (!get_pref("VFEED_GROUP_BY_FEED") && $line["feed_title"]) { - $tmp_content .= "$feed_icon_img"; - } - $tmp_content .= "
"; //scoreWrap + } + $tmp_content .= "
"; //scoreWrap - $tmp_content .= "
"; //cdmHeader + $tmp_content .= "
"; //cdmHeader - $tmp_content .= "
"; - $tmp_content .= "
"; - if ($line['note']) { - $tmp_content .= Article::format_article_note($id, $line['note']); - } - $tmp_content .= "
"; //POSTNOTE + $tmp_content .= "
"; + if ($line['note']) { + $tmp_content .= Article::format_article_note($id, $line['note']); + } + $tmp_content .= "
"; //POSTNOTE - if (!$line['lang']) $line['lang'] = 'en'; + if (!$line['lang']) $line['lang'] = 'en'; - $tmp_content .= "
"; + $tmp_content .= "
"; - if ($line["orig_feed_id"]) { + if ($line["orig_feed_id"]) { - $ofgh = $this->pdo->prepare("SELECT * FROM ttrss_archived_feeds + $ofgh = $this->pdo->prepare("SELECT * FROM ttrss_archived_feeds WHERE id = ? AND owner_uid = ?"); - $ofgh->execute([$line["orig_feed_id"], $_SESSION['uid']]); + $ofgh->execute([$line["orig_feed_id"], $_SESSION['uid']]); - if ($tmp_line = $ofgh->fetch()) { + if ($tmp_line = $ofgh->fetch()) { - $tmp_content .= "
"; - $tmp_content .= __("Originally from:"); + $tmp_content .= "
"; + $tmp_content .= __("Originally from:"); - $tmp_content .= " "; + $tmp_content .= " "; - $tmp_content .= "" . - $tmp_line['title'] . ""; + $tmp_line['title'] . ""; - $tmp_content .= " "; + $tmp_content .= " "; - $tmp_content .= ""; - $tmp_content .= ""; + $tmp_content .= ""; + $tmp_content .= ""; - $tmp_content .= "
"; - } - } + $tmp_content .= "
"; + } + } - $tmp_content .= ""; - $tmp_content .= ""; - $tmp_content .= htmlspecialchars($line["content"]); - $tmp_content .= ""; - $tmp_content .= ""; + $tmp_content .= ""; + $tmp_content .= ""; + $tmp_content .= htmlspecialchars($line["content"]); + $tmp_content .= ""; + $tmp_content .= ""; - $tmp_content .= "
"; //cdmContentInner + $tmp_content .= "
"; //cdmContentInner - $tmp_content .= "
"; + $tmp_content .= "
"; - $always_display_enclosures = $line["always_display_enclosures"]; - $tmp_content .= Article::format_article_enclosures($id, $always_display_enclosures, - $line["content"], $line["hide_images"]); + $always_display_enclosures = $line["always_display_enclosures"]; + $tmp_content .= Article::format_article_enclosures($id, $always_display_enclosures, + $line["content"], $line["hide_images"]); - $tmp_content .= "
"; // cdmIntermediate + $tmp_content .= "
"; // cdmIntermediate - $tmp_content .= "
"; + $tmp_content .= "
"; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { - $tmp_content .= $p->hook_article_left_button($line); - } + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_LEFT_BUTTON) as $p) { + $tmp_content .= $p->hook_article_left_button($line); + } - $tags_str = Article::format_tags_string($tags, $id); + $tags_str = Article::format_tags_string($tags, $id); - $tmp_content .= ""; + $tmp_content .= ""; - $tmp_content .= "Tags + $tmp_content .= "Tags $tags_str (+)"; - $num_comments = (int) $line["num_comments"]; - $entry_comments = ""; + $num_comments = (int) $line["num_comments"]; + $entry_comments = ""; - if ($num_comments > 0) { - if ($line["comments"]) { - $comments_url = htmlspecialchars($line["comments"]); - } else { - $comments_url = htmlspecialchars($line["link"]); - } - $entry_comments = " 0) { + if ($line["comments"]) { + $comments_url = htmlspecialchars($line["comments"]); + } else { + $comments_url = htmlspecialchars($line["link"]); + } + $entry_comments = "$num_comments ". - _ngettext("comment", "comments", $num_comments).""; + _ngettext("comment", "comments", $num_comments).""; - } else { - if ($line["comments"] && $line["link"] != $line["comments"]) { - $entry_comments = "".__("comments").""; - } - } + } else { + if ($line["comments"] && $line["link"] != $line["comments"]) { + $entry_comments = "".__("comments").""; + } + } - if ($entry_comments) $tmp_content .= " ($entry_comments)"; + if ($entry_comments) $tmp_content .= " ($entry_comments)"; - $tmp_content .= ""; - $tmp_content .= "
"; + $tmp_content .= ""; + $tmp_content .= "
"; - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { - $tmp_content .= $p->hook_article_button($line); - } + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_BUTTON) as $p) { + $tmp_content .= $p->hook_article_button($line); + } - $tmp_content .= "
"; // buttons + $tmp_content .= "
"; // buttons - $tmp_content .= "
"; // cdmFooter - $tmp_content .= "
"; // cdmContent - $tmp_content .= "
"; // RROW.cdm + $tmp_content .= "
"; // cdmFooter + $tmp_content .= "
"; // cdmContent + $tmp_content .= ""; // RROW.cdm - foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ARTICLE_CDM) as $p) { - $tmp_content = $p->hook_format_article_cdm($tmp_content, $line); - } + foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ARTICLE_CDM) as $p) { + $tmp_content = $p->hook_format_article_cdm($tmp_content, $line); + } - $reply['content'] .= $tmp_content; - } + $reply['content'] .= $tmp_content; + } - ++$lnum; + ++$lnum; + } } if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PE", $timing_info); @@ -1024,6 +961,8 @@ class Feeds extends Handler_Protected { } function quickAddFeed() { + print "
"; + print_hidden("op", "rpc"); print_hidden("method", "addfeed"); @@ -1088,10 +1027,8 @@ class Feeds extends Handler_Protected {