From 84d952f141584c5788aba4d0119a66c8a043721c Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <fox@madoka.volgo-balt.ru>
Date: Sat, 23 Feb 2013 16:01:51 +0400
Subject: [PATCH] implement article render hooks

---
 classes/feeds.php      | 23 +++++++++++++----------
 classes/pluginhost.php |  2 ++
 include/functions.php  | 31 ++++++++++++++++---------------
 3 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/classes/feeds.php b/classes/feeds.php
index b257ca35e..183edb401 100644
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -494,6 +494,16 @@ class Feeds extends Handler_Protected {
 
 				} else {
 
+					$line["tags"] = get_article_tags($this->link, $id, $_SESSION["uid"], $line["tag_cache"]);
+					unset($line["tag_cache"]);
+
+					$line["content"] = sanitize($this->link, $line["content_preview"],
+							false, false, $feed_site_url);
+
+					foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE_CDM) as $p) {
+						$line = $p->hook_render_article_cdm($line);
+					}
+
 					if (get_pref($this->link, 'VFEED_GROUP_BY_FEED') && $line["feed_title"]) {
 						if ($feed_id != $vgroup_last_feed) {
 
@@ -627,9 +637,6 @@ class Feeds extends Handler_Protected {
 						$line["content_preview"] =& $line["cached_content"];
 					}
 
-					$article_content = sanitize($this->link, $line["content_preview"],
-							false, false, $feed_site_url);
-
 					$reply['content'] .= "<div id=\"POSTNOTE-$id\">";
 					if ($line['note']) {
 						$reply['content'] .= format_article_note($id, $line['note']);
@@ -637,7 +644,7 @@ class Feeds extends Handler_Protected {
 					$reply['content'] .= "</div>";
 
 					$reply['content'] .= "<span id=\"CWRAP-$id\">";
-					$reply['content'] .= $article_content;
+					$reply['content'] .= $line["content"];
 					$reply['content'] .= "</span>";
 
 /*					$tmp_result = db_query($this->link, "SELECT always_display_enclosures FROM
@@ -651,17 +658,13 @@ class Feeds extends Handler_Protected {
 					$always_display_enclosures = sql_bool_to_bool($line["always_display_enclosures"]);
 
 					$reply['content'] .= format_article_enclosures($this->link, $id, $always_display_enclosures,
-						$article_content);
+						$line["content"]);
 
 					$reply['content'] .= "</div>";
 
 					$reply['content'] .= "<div class=\"cdmFooter\">";
 
-					$tag_cache = $line["tag_cache"];
-
-					$tags_str = format_tags_string(
-						get_article_tags($this->link, $id, $_SESSION["uid"], $tag_cache),
-						$id);
+					$tags_str = format_tags_string($tags, $id);
 
 					$reply['content'] .= "<img src='".theme_image($this->link,
 							'images/tag.png')."' alt='Tags' title='Tags'>
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index a1ad7ef07..c6fcf6b57 100644
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -17,6 +17,8 @@ class PluginHost {
 	const HOOK_UPDATE_TASK = 7;
 	const HOOK_AUTH_USER = 8;
 	const HOOK_HOTKEY_MAP = 9;
+	const HOOK_RENDER_ARTICLE = 10;
+	const HOOK_RENDER_ARTICLE_CDM = 11;
 
 	const KIND_ALL = 1;
 	const KIND_SYSTEM = 2;
diff --git a/include/functions.php b/include/functions.php
index b0ccba313..a2b2c1c9a 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -2871,7 +2871,18 @@
 
 			$line = db_fetch_assoc($result);
 
-			$feed_site_url = $line['site_url'];
+			$tag_cache = $line["tag_cache"];
+
+			$line["tags"] = get_article_tags($link, $id, $owner_uid, $line["tag_cache"]);
+			unset($line["tag_cache"]);
+
+			$line["content"] = sanitize($link, $line["content"], false, $owner_uid,	$line["site_url"]);
+
+			global $pluginhost;
+
+			foreach ($pluginhost->get_hooks($pluginhost::HOOK_RENDER_ARTICLE) as $p) {
+				$line = $p->hook_render_article($line);
+			}
 
 			$num_comments = $line["num_comments"];
 			$entry_comments = "";
@@ -2929,15 +2940,8 @@
 				$rv['content'] .= "<div class='postTitle'>" . $line["title"] . "$entry_author</div>";
 			}
 
-			$tag_cache = $line["tag_cache"];
-
-			if (!$tag_cache)
-				$tags = get_article_tags($link, $id, $owner_uid);
-			else
-				$tags = explode(",", $tag_cache);
-
-			$tags_str = format_tags_string($tags, $id);
-			$tags_str_full = join(", ", $tags);
+			$tags_str = format_tags_string($line["tags"], $id);
+			$tags_str_full = join(", ", $line["tags"]);
 
 			if (!$tags_str_full) $tags_str_full = __("no tags");
 
@@ -3036,13 +3040,10 @@
 				$line["content"] =& $line["cached_content"];
 			}
 
-			$article_content = sanitize($link, $line["content"], false, $owner_uid,
-				$feed_site_url);
-
-			$rv['content'] .= $article_content;
+			$rv['content'] .= $line["content"];
 
 			$rv['content'] .= format_article_enclosures($link, $id,
-				$always_display_enclosures, $article_content);
+				$always_display_enclosures, $line["content"]);
 
 			$rv['content'] .= "</div>";
 
-- 
GitLab