Browse Source

add HOOK_RENDER_ENCLOSURE & af_youtube_embed plugin

Andrew Dolgov 5 years ago
parent
commit
945346cbff
3 changed files with 71 additions and 21 deletions
  1. 1 0
      classes/pluginhost.php
  2. 30 21
      include/functions2.php
  3. 40 0
      plugins/af_youtube_embed/init.php

+ 1 - 0
classes/pluginhost.php

@@ -43,6 +43,7 @@ class PluginHost {
 	const HOOK_FORMAT_ENCLOSURES = 26;
 	const HOOK_SUBSCRIBE_FEED = 27;
 	const HOOK_HEADLINES_BEFORE = 28;
+	const HOOK_RENDER_ENCLOSURE = 29;
 
 	const KIND_ALL = 1;
 	const KIND_SYSTEM = 2;

+ 30 - 21
include/functions2.php

@@ -1940,28 +1940,37 @@
 
 					foreach ($entries as $entry) {
 
-						if (preg_match("/image/", $entry["type"]) ||
-								preg_match("/\.(jpg|png|gif|bmp)/i", $entry["filename"])) {
-
-								if (!$hide_images) {
-									$encsize = '';
-									if ($entry['height'] > 0)
-										$encsize .= ' height="' . intval($entry['width']) . '"';
-									if ($entry['width'] > 0)
-										$encsize .= ' width="' . intval($entry['height']) . '"';
-									$rv .= "<p><img
-									alt=\"".htmlspecialchars($entry["filename"])."\"
-									src=\"" .htmlspecialchars($entry["url"]) . "\"
-									" . $encsize . " /></p>";
-								} else {
-									$rv .= "<p><a target=\"_blank\"
-									href=\"".htmlspecialchars($entry["url"])."\"
-									>" .htmlspecialchars($entry["url"]) . "</a></p>";
-								}
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ENCLOSURE) as $plugin)
+						$retval = $plugin->hook_render_enclosure($entry, $hide_images);
 
-								if ($entry['title']) {
-									$rv.= "<div class=\"enclosure_title\">${entry['title']}</div>";
-								}
+
+						if ($retval) {
+							$rv .= $retval;
+						} else {
+
+							if (preg_match("/image/", $entry["type"]) ||
+									preg_match("/\.(jpg|png|gif|bmp)/i", $entry["filename"])) {
+
+									if (!$hide_images) {
+										$encsize = '';
+										if ($entry['height'] > 0)
+											$encsize .= ' height="' . intval($entry['width']) . '"';
+										if ($entry['width'] > 0)
+											$encsize .= ' width="' . intval($entry['height']) . '"';
+										$rv .= "<p><img
+										alt=\"".htmlspecialchars($entry["filename"])."\"
+										src=\"" .htmlspecialchars($entry["url"]) . "\"
+										" . $encsize . " /></p>";
+									} else {
+										$rv .= "<p><a target=\"_blank\"
+										href=\"".htmlspecialchars($entry["url"])."\"
+										>" .htmlspecialchars($entry["url"]) . "</a></p>";
+									}
+
+									if ($entry['title']) {
+										$rv.= "<div class=\"enclosure_title\">${entry['title']}</div>";
+									}
+							}
 						}
 					}
 				}

+ 40 - 0
plugins/af_youtube_embed/init.php

@@ -0,0 +1,40 @@
+<?php
+class Af_Youtube_Embed extends Plugin {
+	private $host;
+
+	function about() {
+		return array(1.0,
+			"Embed videos in Youtube RSS feeds",
+			"fox");
+	}
+
+	function init($host) {
+		$this->host = $host;
+
+		$host->add_hook($host::HOOK_RENDER_ENCLOSURE, $this);
+	}
+
+	function hook_render_enclosure($entry, $hide_images) {
+
+		$matches = array();
+
+		if (preg_match("/\/\/www\.youtube\.com\/v\/([\w-]+)/", $entry["url"], $matches) ||
+			preg_match("/\/\/www\.youtube\.com\/watch?v=([\w-]+)/", $entry["url"], $matches) ||
+			preg_match("/\/\/youtu.be\/([\w-]+)/", $entry["url"], $matches)) {
+
+			$vid_id = $matches[1];
+
+			return "<iframe class=\"youtube-player\"
+				type=\"text/html\" width=\"640\" height=\"385\"
+				src=\"https://www.youtube.com/embed/$vid_id\"
+				allowfullscreen frameborder=\"0\"></iframe>";
+
+		}
+	}
+
+	function api_version() {
+		return 2;
+	}
+
+}
+?>