diff options
-rw-r--r-- | classes/pluginhost.php | 1 | ||||
-rw-r--r-- | include/functions2.php | 51 | ||||
-rw-r--r-- | plugins/af_youtube_embed/init.php | 40 |
3 files changed, 71 insertions, 21 deletions
diff --git a/classes/pluginhost.php b/classes/pluginhost.php index 1ad7afd60..457698291 100644 --- a/classes/pluginhost.php +++ b/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; diff --git a/include/functions2.php b/include/functions2.php index a73f9a7a7..27b1933d0 100644 --- a/include/functions2.php +++ b/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>"; + } + } } } } diff --git a/plugins/af_youtube_embed/init.php b/plugins/af_youtube_embed/init.php new file mode 100644 index 000000000..782011340 --- /dev/null +++ b/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; + } + +} +?> |