Merge branch 'hookhead' of git://github.com/justauserx/Tiny-Tiny-RSS into justauserx-hookhead

master
Andrew Dolgov 11 years ago
commit f48d89fd58

@ -638,6 +638,11 @@ class API extends Handler {
$headlines = array(); $headlines = array();
while ($line = db_fetch_assoc($result)) { while ($line = db_fetch_assoc($result)) {
$line["content_preview"] = truncate_string(strip_tags($line["content_preview"]), 100);
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
$line = $p->hook_query_headlines($line, 100, true);
}
$is_updated = ($line["last_read"] == "" && $is_updated = ($line["last_read"] == "" &&
($line["unread"] != "t" && $line["unread"] != "1")); ($line["unread"] != "t" && $line["unread"] != "1"));
@ -664,24 +669,22 @@ class API extends Handler {
$headline_row['attachments'] = get_article_enclosures( $headline_row['attachments'] = get_article_enclosures(
$line['id']); $line['id']);
if ($show_excerpt) { if (!$show_excerpt )
$excerpt = truncate_string(strip_tags($line["content_preview"]), 100); $headline_row["excerpt"] = $ine["content_preview"];
$headline_row["excerpt"] = $excerpt;
}
if ($show_content) { if ($show_content) {
if ($line["cached_content"] != "") { if ($line["cached_content"] != "") {
$line["content_preview"] =& $line["cached_content"]; $line["content"] =& $line["cached_content"];
} }
if ($sanitize_content) { if ($sanitize_content) {
$headline_row["content"] = sanitize( $headline_row["content"] = sanitize(
$line["content_preview"], $line["content"],
sql_bool_to_bool($line['hide_images']), sql_bool_to_bool($line['hide_images']),
false, $line["site_url"]); false, $line["site_url"]);
} else { } else {
$headline_row["content"] = $line["content_preview"]; $headline_row["content"] = $line["content"];
} }
} }
@ -699,6 +702,7 @@ class API extends Handler {
$headline_row["always_display_attachments"] = sql_bool_to_bool($line["always_display_enclosures"]); $headline_row["always_display_attachments"] = sql_bool_to_bool($line["always_display_enclosures"]);
$headline_row["author"] = $line["author"]; $headline_row["author"] = $line["author"];
$headline_row["score"] = (int)$line["score"]; $headline_row["score"] = (int)$line["score"];
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) { foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) {

@ -288,6 +288,10 @@ class Feeds extends Handler_Protected {
$expand_cdm = get_pref('CDM_EXPANDED'); $expand_cdm = get_pref('CDM_EXPANDED');
while ($line = $this->dbh->fetch_assoc($result)) { while ($line = $this->dbh->fetch_assoc($result)) {
$line["content_preview"] = "— " . truncate_string(strip_tags($line["content_preview"]),250);
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
$line = $p->hook_query_headlines($line, 250, false);
}
$id = $line["id"]; $id = $line["id"];
$feed_id = $line["feed_id"]; $feed_id = $line["feed_id"];
$label_cache = $line["label_cache"]; $label_cache = $line["label_cache"];
@ -360,9 +364,8 @@ class Feeds extends Handler_Protected {
$date_entered_fmt = T_sprintf("Imported at %s", $date_entered_fmt = T_sprintf("Imported at %s",
make_local_datetime($line["date_entered"], false)); make_local_datetime($line["date_entered"], false));
if (get_pref('SHOW_CONTENT_PREVIEW')) { if (get_pref('SHOW_CONTENT_PREVIEW') ) {
$content_preview = " — " . truncate_string(strip_tags($line["content_preview"]), $content_preview = $line["content_preview"];
250);
} }
$score = $line["score"]; $score = $line["score"];
@ -455,9 +458,7 @@ class Feeds extends Handler_Protected {
truncate_string($line["title"], 200); truncate_string($line["title"], 200);
if (get_pref('SHOW_CONTENT_PREVIEW')) { if (get_pref('SHOW_CONTENT_PREVIEW')) {
if ($content_preview) { $reply['content'] .= "<span class=\"contentPreview\">" . $line["content_preview"] . "</span>";
$reply['content'] .= "<span class=\"contentPreview\">$content_preview</span>";
}
} }
$reply['content'] .= "</a></span>"; $reply['content'] .= "</a></span>";
@ -502,7 +503,7 @@ class Feeds extends Handler_Protected {
else else
$tags = false; $tags = false;
$line["content"] = sanitize($line["content_preview"], $line["content"] = sanitize($line["content"],
sql_bool_to_bool($line['hide_images']), false, $entry_site_url); sql_bool_to_bool($line['hide_images']), false, $entry_site_url);
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) { foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_CDM) as $p) {
@ -574,8 +575,8 @@ class Feeds extends Handler_Protected {
else else
$excerpt_hidden = "style=\"display : none\""; $excerpt_hidden = "style=\"display : none\"";
$reply['content'] .= "<span $excerpt_hidden $reply['content'] .= "<span $excerpt_hidden id=\"CEXC-$id\" class=\"cdmExcerpt\">" . $line["content_preview"] . "</span>";
id=\"CEXC-$id\" class=\"cdmExcerpt\">$content_preview</span>";
$reply['content'] .= "</span>"; $reply['content'] .= "</span>";
if (!get_pref('VFEED_GROUP_BY_FEED')) { if (!get_pref('VFEED_GROUP_BY_FEED')) {

@ -85,8 +85,11 @@ class Handler_Public extends Handler {
} }
$tpl->setVariable('SELF_URL', htmlspecialchars(get_self_url_prefix()), true); $tpl->setVariable('SELF_URL', htmlspecialchars(get_self_url_prefix()), true);
$line["content_preview"] = truncate_string(strip_tags($line["content_preview"]), 100, '...');
while ($line = $this->dbh->fetch_assoc($result)) { while ($line = $this->dbh->fetch_assoc($result)) {
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
$line = $p->hook_query_headlines($line);
}
$tpl->setVariable('ARTICLE_ID', $tpl->setVariable('ARTICLE_ID',
htmlspecialchars($orig_guid ? $line['link'] : htmlspecialchars($orig_guid ? $line['link'] :
@ -94,10 +97,9 @@ class Handler_Public extends Handler {
"/public.php?url=" . urlencode($line['link'])), true); "/public.php?url=" . urlencode($line['link'])), true);
$tpl->setVariable('ARTICLE_LINK', htmlspecialchars($line['link']), true); $tpl->setVariable('ARTICLE_LINK', htmlspecialchars($line['link']), true);
$tpl->setVariable('ARTICLE_TITLE', htmlspecialchars($line['title']), true); $tpl->setVariable('ARTICLE_TITLE', htmlspecialchars($line['title']), true);
$tpl->setVariable('ARTICLE_EXCERPT', $tpl->setVariable('ARTICLE_EXCERPT', $line["content_preview"], true);
truncate_string(strip_tags($line["content_preview"]), 100, '...'), true);
$content = sanitize($line["content_preview"], false, $owner_uid); $content = sanitize($line["content"], false, $owner_uid);
if ($line['note']) { if ($line['note']) {
$content = "<div style=\"$note_style\">Article note: " . $line['note'] . "</div>" . $content = "<div style=\"$note_style\">Article note: " . $line['note'] . "</div>" .
@ -170,13 +172,17 @@ class Handler_Public extends Handler {
$feed['articles'] = array(); $feed['articles'] = array();
while ($line = $this->dbh->fetch_assoc($result)) { while ($line = $this->dbh->fetch_assoc($result)) {
$line["content_preview"] = truncate_string(strip_tags($line["content_preview"]), 100, '...');
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
$line = $p->hook_query_headlines($line, 100);
}
$article = array(); $article = array();
$article['id'] = $line['link']; $article['id'] = $line['link'];
$article['link'] = $line['link']; $article['link'] = $line['link'];
$article['title'] = $line['title']; $article['title'] = $line['title'];
$article['excerpt'] = truncate_string(strip_tags($line["content_preview"]), 100, '...'); $article['excerpt'] = $line["content_preview"];
$article['content'] = sanitize($line["content_preview"], false, $owner_uid); $article['content'] = sanitize($line["content"], false, $owner_uid);
$article['updated'] = date('c', strtotime($line["updated"])); $article['updated'] = date('c', strtotime($line["updated"]));
if ($line['note']) $article['note'] = $line['note']; if ($line['note']) $article['note'] = $line['note'];

@ -37,6 +37,7 @@ class PluginHost {
const HOOK_PREFS_EDIT_FEED = 20; const HOOK_PREFS_EDIT_FEED = 20;
const HOOK_PREFS_SAVE_FEED = 21; const HOOK_PREFS_SAVE_FEED = 21;
const HOOK_FETCH_FEED = 22; const HOOK_FETCH_FEED = 22;
const HOOK_QUERY_HEADLINES = 23;
const KIND_ALL = 1; const KIND_ALL = 1;
const KIND_SYSTEM = 2; const KIND_SYSTEM = 2;

@ -95,14 +95,16 @@ class Pref_Filters extends Handler_Protected {
print "<div class=\"filterTestHolder\">"; print "<div class=\"filterTestHolder\">";
print "<table width=\"100%\" cellspacing=\"0\" id=\"prefErrorFeedList\">"; print "<table width=\"100%\" cellspacing=\"0\" id=\"prefErrorFeedList\">";
$line["content_preview"] = strip_tags($line["content_preview"]), 100, '...');
while ($line = $this->dbh->fetch_assoc($result)) { while ($line = $this->dbh->fetch_assoc($result)) {
foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
$line = $p->hook_query_headlines($line, 100);
}
$entry_timestamp = strtotime($line["updated"]); $entry_timestamp = strtotime($line["updated"]);
$entry_tags = get_article_tags($line["id"], $_SESSION["uid"]); $entry_tags = get_article_tags($line["id"], $_SESSION["uid"]);
$content_preview = truncate_string( $content_preview = $line["content_preview"];
strip_tags($line["content_preview"]), 100, '...');
if ($line["feed_title"]) if ($line["feed_title"])
$feed_title = $line["feed_title"]; $feed_title = $line["feed_title"];
@ -118,7 +120,7 @@ class Pref_Filters extends Handler_Protected {
print "&nbsp;("; print "&nbsp;(";
print "<b>" . $feed_title . "</b>"; print "<b>" . $feed_title . "</b>";
print "):&nbsp;"; print "):&nbsp;";
print "<span class=\"insensitive\">" . $content_preview . "</span>"; print "<span class=\"insensitive\">" . $line["content_preview"] . "</span>";
print " " . mb_substr($line["date_entered"], 0, 16); print " " . mb_substr($line["date_entered"], 0, 16);
print "</td></tr>"; print "</td></tr>";

@ -71,7 +71,6 @@
"hu_HU" => "Magyar (Hungarian)", "hu_HU" => "Magyar (Hungarian)",
"it_IT" => "Italiano", "it_IT" => "Italiano",
"ja_JP" => "日本語 (Japanese)", "ja_JP" => "日本語 (Japanese)",
"ko_KR" => "한국어 (Korean)",
"lv_LV" => "Latviešu", "lv_LV" => "Latviešu",
"nb_NO" => "Norwegian bokmål", "nb_NO" => "Norwegian bokmål",
"nl_NL" => "Dutch", "nl_NL" => "Dutch",
@ -1059,7 +1058,7 @@
$date_qpart = "date_entered < DATE_SUB(NOW(), INTERVAL 1 WEEK) "; $date_qpart = "date_entered < DATE_SUB(NOW(), INTERVAL 1 WEEK) ";
} }
break; break;
case "2week": case "2weeks":
if (DB_TYPE == "pgsql") { if (DB_TYPE == "pgsql") {
$date_qpart = "date_entered < NOW() - INTERVAL '2 week' "; $date_qpart = "date_entered < NOW() - INTERVAL '2 week' ";
} else { } else {
@ -2579,7 +2578,9 @@
} }
} }
$content_query_part = "content as content_preview, cached_content, ";
$content_query_part = "content, content AS content_preview, cached_content, ";
if (is_numeric($feed)) { if (is_numeric($feed)) {
@ -2750,13 +2751,10 @@
if ($site_url) { if ($site_url) {
if ($entry->hasAttribute('href')) { if ($entry->hasAttribute('href'))
$entry->setAttribute('href', $entry->setAttribute('href',
rewrite_relative_url($site_url, $entry->getAttribute('href'))); rewrite_relative_url($site_url, $entry->getAttribute('href')));
$entry->setAttribute('rel', 'noreferrer');
}
if ($entry->hasAttribute('src')) { if ($entry->hasAttribute('src')) {
$src = rewrite_relative_url($site_url, $entry->getAttribute('src')); $src = rewrite_relative_url($site_url, $entry->getAttribute('src'));

@ -0,0 +1,50 @@
<?php
class Query_Headlines extends Plugin {
// example of the use of the HOOK_QUERY_HEADLINES
// this example will change the author and tags to be empty string so they don't display
// the arguements are:
// - the array of elements that are returned by queryFeedHeadlines
// - the length that the caller wants to truncate the content preview to
// - a boolean that indicates if the caller is from an API call
// The field content_preview has been shortened and sanitized, as appropriate
// before the plugin is called. If you want to do your own preview handling
// use the content field and create the preview from that
//NOTE:**** You have to make this a system plugin if you want it to also work
// on API calls. If you just make it a user plugin it will work on web page output
// but not on API calls
private $host;
function about() {
return array(1.0,
"Example of use of HOOK_QUERY_HEADLINES",
"justauser" );
}
function init($host) {
$this->host = $host;
$host->add_hook($host::HOOK_QUERY_HEADLINES, $this);
}
// passes in the array for an item
// second argument is the length of the preview the caller is using
// create a key called "modified_preview" if you change the preview and don't want
// caller to override with their default
function hook_query_headlines($line, $preview_length = 100,$api_call=false) {
//make the author field empty
$line["author"] = "";
// and toss tags, since I don't use
$line["tag_cache"] = "";
return $line;
}
function api_version() {
return 2;
}
}
?>
Loading…
Cancel
Save