From b30abdadd2f7d846d40eaa2ddb6343291df30a91 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 21 Feb 2013 22:24:06 +0400 Subject: [PATCH] prevent article filters from modifying article GUID; add separate plugin_data field for this --- include/rssfuncs.php | 33 +++++++++++++++++++++++++++++---- plugins/af_buttersafe/init.php | 4 ++-- plugins/af_explosm/init.php | 4 ++-- plugins/af_gocomics/init.php | 4 ++-- plugins/af_pennyarcade/init.php | 4 ++-- plugins/af_unburn/init.php | 4 ++-- 6 files changed, 39 insertions(+), 14 deletions(-) diff --git a/include/rssfuncs.php b/include/rssfuncs.php index a2e2a08c4..5cb22f8b8 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -516,12 +516,23 @@ _debug("update_rss_feed: applying plugin filters.."); } + // Todo unify with id checking below + $result = db_query($link, "SELECT plugin_data FROM ttrss_entries + WHERE guid = '".db_escape_string($entry_guid)."'"); + + if (db_num_rows($result) != 0) { + $entry_plugin_data = db_fetch_result($result, 0, "plugin_data"); + } else { + $entry_plugin_data = ""; + } + $article = array("owner_uid" => $owner_uid, // read only - "guid" => $entry_guid, + "guid" => $entry_guid, // read only "title" => $entry_title, "content" => $entry_content, "link" => $entry_link, "tags" => $entry_tags, + "plugin_data" => $entry_plugin_data, "author" => $entry_author); foreach ($pluginhost->get_hooks($pluginhost::HOOK_ARTICLE_FILTER) as $plugin) { @@ -529,11 +540,16 @@ } $entry_tags = $article["tags"]; - $entry_guid = db_escape_string($article["guid"]); + $entry_guid = db_escape_string($entry_guid); $entry_content = db_escape_string($article["content"], false); $entry_title = db_escape_string($article["title"]); $entry_author = db_escape_string($article["author"]); $entry_link = db_escape_string($article["link"]); + $entry_plugin_data = db_escape_string($article["plugin_data"]); + + if ($debug_enabled) { + _debug("update_rss_feed: plugin data: $entry_plugin_data"); + } if ($cache_images && is_writable(CACHE_DIR . '/images')) $entry_content = cache_images($entry_content, $site_url, $debug_enabled); @@ -567,6 +583,7 @@ date_entered, comments, num_comments, + plugin_data, author) VALUES ('$entry_title', @@ -581,6 +598,7 @@ NOW(), '$entry_comments', '$num_comments', + '$entry_plugin_data', '$entry_author')"); $article_labels = array(); @@ -602,7 +620,7 @@ // now it should exist, if not - bad luck then $result = db_query($link, "SELECT - id,content_hash,no_orig_date,title, + id,content_hash,no_orig_date,title,plugin_data, ".SUBSTRING_FOR_DATE."(date_updated,1,19) as date_updated, ".SUBSTRING_FOR_DATE."(updated,1,19) as updated, num_comments @@ -625,6 +643,7 @@ $orig_num_comments = db_fetch_result($result, 0, "num_comments"); $orig_date_updated = strtotime(db_fetch_result($result, 0, "date_updated")); + $orig_plugin_data = db_fetch_result($result, 0, "plugin_data"); $ref_id = db_fetch_result($result, 0, "id"); $entry_ref_id = $ref_id; @@ -764,6 +783,11 @@ $update_insignificant = true; } + if ($entry_plugin_data != $orig_plugin_data) { + $post_needs_update = true; + $update_insignificant = true; + } + if ($content_hash != $orig_content_hash) { $post_needs_update = true; $update_insignificant = false; @@ -788,7 +812,8 @@ SET title = '$entry_title', content = '$entry_content', content_hash = '$content_hash', updated = '$entry_timestamp_fmt', - num_comments = '$num_comments' + num_comments = '$num_comments', + plugin_data = '$entry_plugin_data' WHERE id = '$ref_id'"); if (!$update_insignificant) { diff --git a/plugins/af_buttersafe/init.php b/plugins/af_buttersafe/init.php index 2b4279501..0715be3aa 100644 --- a/plugins/af_buttersafe/init.php +++ b/plugins/af_buttersafe/init.php @@ -21,7 +21,7 @@ class Af_Buttersafe extends Plugin { $owner_uid = $article["owner_uid"]; if (strpos($article["guid"], "buttersafe.com") !== FALSE && - strpos($article["guid"], "buttersafe,$owner_uid:") === FALSE) { + strpos($article["plugin_data"], "buttersafe,$owner_uid:") === FALSE) { $doc = new DOMDocument(); @$doc->loadHTML(fetch_file_contents($article["link"])); @@ -48,7 +48,7 @@ class Af_Buttersafe extends Plugin { } } - $article["guid"] = "buttersafe,$owner_uid:" . $article["guid"]; + $article["plugin_data"] = "buttersafe,$owner_uid:" . $article["plugin_data"]; } return $article; diff --git a/plugins/af_explosm/init.php b/plugins/af_explosm/init.php index cd6efb2ee..b848bb0fb 100644 --- a/plugins/af_explosm/init.php +++ b/plugins/af_explosm/init.php @@ -21,7 +21,7 @@ class Af_Explosm extends Plugin { $owner_uid = $article["owner_uid"]; if (strpos($article["link"], "explosm.net/comics") !== FALSE && - strpos($article["guid"], "explosm,$owner_uid:") === FALSE) { + strpos($article["plugin_data"], "explosm,$owner_uid:") === FALSE) { $doc = new DOMDocument(); @$doc->loadHTML(fetch_file_contents($article["link"])); @@ -48,7 +48,7 @@ class Af_Explosm extends Plugin { } } - $article["guid"] = "explosm,$owner_uid:" . $article["guid"]; + $article["plugin_data"] = "explosm,$owner_uid:" . $article["plugin_data"]; } return $article; diff --git a/plugins/af_gocomics/init.php b/plugins/af_gocomics/init.php index 2a5d3ba3c..829dda999 100644 --- a/plugins/af_gocomics/init.php +++ b/plugins/af_gocomics/init.php @@ -20,7 +20,7 @@ class Af_GoComics extends Plugin { function hook_article_filter($article) { $owner_uid = $article["owner_uid"]; - if (strpos($article["guid"], "gocomics.com") !== FALSE && strpos($article["guid"], "gocomics,$owner_uid:") === FALSE) { + if (strpos($article["guid"], "gocomics.com") !== FALSE && strpos($article["plugin_data"], "gocomics,$owner_uid:") === FALSE) { $doc = new DOMDocument(); @$doc->loadHTML(fetch_file_contents($article["link"])); @@ -47,7 +47,7 @@ class Af_GoComics extends Plugin { } } - $article["guid"] = "gocomics,$owner_uid:" . $article["guid"]; + $article["plugin_data"] = "gocomics,$owner_uid:" . $article["plugin_data"]; } return $article; diff --git a/plugins/af_pennyarcade/init.php b/plugins/af_pennyarcade/init.php index e8c623f5e..5ac629914 100644 --- a/plugins/af_pennyarcade/init.php +++ b/plugins/af_pennyarcade/init.php @@ -21,7 +21,7 @@ class Af_PennyArcade extends Plugin { $owner_uid = $article["owner_uid"]; if (strpos($article["link"], "penny-arcade.com") !== FALSE && strpos($article["title"], "Comic:") !== FALSE && - strpos($article["guid"], "pennyarcade,$owner_uid:") === FALSE) { + strpos($article["plugin_data"], "pennyarcade,$owner_uid:") === FALSE) { $doc = new DOMDocument(); @$doc->loadHTML(fetch_file_contents($article["link"])); @@ -48,7 +48,7 @@ class Af_PennyArcade extends Plugin { } } - $article["guid"] = "pennyarcade,$owner_uid:" . $article["guid"]; + $article["plugin_data"] = "pennyarcade,$owner_uid:" . $article["plugin_data"]; } return $article; diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php index d2bcf75d0..d09e2ad36 100644 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -26,7 +26,7 @@ class Af_Unburn extends Plugin { if ((strpos($article["link"], "feedproxy.google.com") !== FALSE || strpos($article["link"], "/~r/") !== FALSE || strpos($article["link"], "feedsportal.com") !== FALSE) && - strpos($article["guid"], "unburn,$owner_uid:") === FALSE) { + strpos($article["plugin_data"], "unburn,$owner_uid:") === FALSE) { $ch = curl_init($article["link"]); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); @@ -62,7 +62,7 @@ class Af_Unburn extends Plugin { $real_url = preg_replace("/\?$/", "", $real_url); - $article["guid"] = "unburn,$owner_uid:" . $article["guid"]; + $article["plugin_data"] = "unburn,$owner_uid:" . $article["plugin_data"]; $article["link"] = $real_url; } }