diff options
author | Friendika <info@friendika.com> | 2011-10-24 15:49:28 -0700 |
---|---|---|
committer | Friendika <info@friendika.com> | 2011-10-24 15:49:28 -0700 |
commit | ea9d3b06f6dbe2d7bf036ea1785a1e472f6bf890 (patch) | |
tree | c6619ec376c662c381caf03fbc1e72db887bfa8d | |
parent | f48fd5aa1651cdc801473e9d24c1736304533e63 (diff) | |
parent | 2905df527f2fbc9b426ebc89a53adc5c6cf1ee47 (diff) | |
download | volse-hubzilla-ea9d3b06f6dbe2d7bf036ea1785a1e472f6bf890.tar.gz volse-hubzilla-ea9d3b06f6dbe2d7bf036ea1785a1e472f6bf890.tar.bz2 volse-hubzilla-ea9d3b06f6dbe2d7bf036ea1785a1e472f6bf890.zip |
Merge pull request #35 from fabrixxm/master
Use oembed if possible without the addon
Awesome!
-rw-r--r-- | boot.php | 1 | ||||
-rw-r--r-- | images/icons/10/play.png | bin | 0 -> 420 bytes | |||
-rw-r--r-- | images/icons/16/play.png | bin | 0 -> 508 bytes | |||
-rw-r--r-- | images/icons/22/play.png | bin | 0 -> 601 bytes | |||
-rw-r--r-- | images/icons/48/play.png | bin | 0 -> 1017 bytes | |||
-rw-r--r-- | images/icons/Makefile | 3 | ||||
-rw-r--r-- | images/icons/play.png | bin | 0 -> 6285 bytes | |||
-rw-r--r-- | include/bbcode.php | 44 | ||||
-rw-r--r-- | include/cache.php | 29 | ||||
-rw-r--r-- | include/oembed.php | 62 | ||||
-rw-r--r-- | include/poller.php | 3 | ||||
-rw-r--r-- | mod/item.php | 1 | ||||
-rw-r--r-- | view/oembed_video.tpl | 4 |
13 files changed, 109 insertions, 38 deletions
@@ -6,6 +6,7 @@ require_once('include/plugin.php'); require_once('include/text.php'); require_once("include/pgettext.php"); require_once('include/nav.php'); +require_once('include/cache.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); define ( 'FRIENDIKA_VERSION', '2.3.1143' ); diff --git a/images/icons/10/play.png b/images/icons/10/play.png Binary files differnew file mode 100644 index 000000000..a9f99e4d1 --- /dev/null +++ b/images/icons/10/play.png diff --git a/images/icons/16/play.png b/images/icons/16/play.png Binary files differnew file mode 100644 index 000000000..19ad05bf2 --- /dev/null +++ b/images/icons/16/play.png diff --git a/images/icons/22/play.png b/images/icons/22/play.png Binary files differnew file mode 100644 index 000000000..a7a8b6124 --- /dev/null +++ b/images/icons/22/play.png diff --git a/images/icons/48/play.png b/images/icons/48/play.png Binary files differnew file mode 100644 index 000000000..fce589370 --- /dev/null +++ b/images/icons/48/play.png diff --git a/images/icons/Makefile b/images/icons/Makefile index 39428d154..6a96fb676 100644 --- a/images/icons/Makefile +++ b/images/icons/Makefile @@ -1,7 +1,8 @@ IMAGES=add.png edit.png gear.png info.png menu.png \ notify_off.png star.png delete.png feed.png group.png \ - lock.png notice.png notify_on.png user.png link.png + lock.png notice.png notify_on.png user.png link.png \ + play.png DESTS=10/ 16/ 22/ 48/ \ $(addprefix 10/, $(IMAGES)) \ diff --git a/images/icons/play.png b/images/icons/play.png Binary files differnew file mode 100644 index 000000000..7c942072e --- /dev/null +++ b/images/icons/play.png diff --git a/include/bbcode.php b/include/bbcode.php index b33be686e..a8c66d30f 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -9,6 +9,22 @@ function stripcode_br_cb($s) { return '[code]' . str_replace('<br />', '', $s[1]) . '[/code]'; } +function tryoembed($match){ + $url = ((count($match)==2)?$match[1]:$match[2]); + + $o = oembed_fetch_url($url); + + //echo "<pre>"; var_dump($match, $url, $o); killme(); + + if ($o->type=="error") return $match[0]; + + $html = oembed_format_object($o); + + return $html; + +} + + // BBcode 2 HTML was written by WAY2WEB.net // extended to work with Mistpark/Friendika - Mike Macgirvin @@ -40,11 +56,14 @@ function bbcode($Text,$preserve_nl = false) { // Set up the parameters for a MAIL search string $MAILSearchString = $URLSearchString; - // Perform URL Search - + // Perform URL Search $Text = preg_replace("/([^\]\=]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="external-link">$2</a>', $Text); + + $Text = preg_replace_callback("/\[bookmark\=([^\]]*)\].*?\[\/bookmark\]/ism",'tryoembed',$Text); + $Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$Text); + $Text = preg_replace_callback("/\[url\]([$URLSearchString]*)\[\/url\]/ism",'tryoembed',$Text); $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="external-link">$1</a>', $Text); $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" target="external-link">$2</a>', $Text); //$Text = preg_replace("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="_blank">$2</a>', $Text); @@ -120,6 +139,13 @@ function bbcode($Text,$preserve_nl = false) { // [img]pathtoimage[/img] $Text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text); + + + // Try to Oembed + $Text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", 'tryoembed', $Text); + $Text = preg_replace_callback("/\[audio\](.*?)\[\/audio\]/ism", 'tryoembed', $Text); + + // html5 video and audio $Text = preg_replace("/\[video\](.*?)\[\/video\]/ism", '<video src="$1" controls="controls" width="425" height="350"><a href="$1">$1</a></video>', $Text); @@ -129,17 +155,25 @@ function bbcode($Text,$preserve_nl = false) { $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/ism", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text); - if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){ + /*if (get_pconfig(local_user(), 'oembed', 'use_for_youtube' )==1){ // use oembed for youtube links $Text = preg_replace("/\[youtube\]/",'[embed]',$Text); $Text = preg_replace("/\[\/youtube\]/",'[/embed]',$Text); - } else { + } else {*/ // Youtube extensions + $Text = preg_replace_callback("/\[youtube\](https?:\/\/www.youtube.com\/watch\?v\=.*?)\[\/youtube\]/ism", 'tryoembed', $Text); + $Text = preg_replace_callback("/\[youtube\](https?:\/\/youtu.be\/.*?)\[\/youtube\]/ism",'tryoembed',$Text); + $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'[youtube]$1[/youtube]',$Text); + + $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '<iframe width="425" height="350" src="http://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $Text); - } + //} + + $Text = preg_replace_callback("/\[vimeo\](https?:\/\/player.vimeo.com\/video\/[0-9]+).*?\[\/vimeo\]/ism",'tryoembed',$Text); + $Text = preg_replace_callback("/\[vimeo\](https?:\/\/vimeo.com\/[0-9]+).*?\[\/vimeo\]/ism",'tryoembed',$Text); $Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); $Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); diff --git a/include/cache.php b/include/cache.php new file mode 100644 index 000000000..082974c61 --- /dev/null +++ b/include/cache.php @@ -0,0 +1,29 @@ +<?php + /** + * cache api + */ + + class Cache { + public static function get($key){ + $r = q("SELECT `v` FROM `cache` WHERE `k`='%s'", + dbesc($key) + ); + + if (count($r)) return $r[0]['v']; + return null; + } + + public static function set($key,$value) { + q("INSERT INTO `cache` VALUES ('%s','%s','%s')", + dbesc($key), + dbesc($value), + dbesc(datetime_convert())); + } + + public static function clear(){ + q("DELETE FROM `cache` WHERE `updated` < '%s'", + dbesc(datetime_convert('UTC','UTC',"now - 30 days"))); + } + + } + diff --git a/include/oembed.php b/include/oembed.php index a8f6636ff..924e61289 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -7,30 +7,27 @@ function oembed_replacecb($matches){ function oembed_fetch_url($embedurl){ - - $r = q("SELECT v FROM `cache` WHERE k='%s'", - dbesc($embedurl)); + + $txt = Cache::get($embedurl); - if(count($r)){ - $txt = $r[0]['v']; - } else { + if(is_null($txt)){ $txt = ""; // try oembed autodiscovery $redirects = 0; $html_text = fetch_url($embedurl, false, $redirects, 15); - if(! $html_text) - return; - $dom = @DOMDocument::loadHTML($html_text); - if ($dom){ - $xpath = new DOMXPath($dom); - $attr = "oembed"; - - $xattr = oe_build_xpath("class","oembed"); - $entries = $xpath->query("//link[@type='application/json+oembed']"); - foreach($entries as $e){ - $href = $e->getAttributeNode("href")->nodeValue; - $txt = fetch_url($href); + if($html_text){ + $dom = @DOMDocument::loadHTML($html_text); + if ($dom){ + $xpath = new DOMXPath($dom); + $attr = "oembed"; + + $xattr = oe_build_xpath("class","oembed"); + $entries = $xpath->query("//link[@type='application/json+oembed']"); + foreach($entries as $e){ + $href = $e->getAttributeNode("href")->nodeValue; + $txt = fetch_url($href); + } } } @@ -44,10 +41,8 @@ function oembed_fetch_url($embedurl){ if ($txt[0]!="{") $txt='{"type":"error"}'; //save in cache - /*q("INSERT INTO `cache` VALUES ('%s','%s','%s')", - dbesc($embedurl), - dbesc($txt), - dbesc(datetime_convert()));*/ + Cache::set($embedurl,$txt); + } $j = json_decode($txt); @@ -61,12 +56,20 @@ function oembed_format_object($j){ switch ($j->type) { case "video": { if (isset($j->thumbnail_url)) { - /*$tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200; - $th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180;*/ - $tw=150; $th=120; - $ret.= "<a href='".$embedurl."' onclick='this.innerHTML=unescape(\"".urlencode($j->html)."\").replace(/\+/g,\" \"); return false;' style='float:left; margin: 1em; '>"; - $ret.= "<img width='$tw' height='$th' src='".$j->thumbnail_url."'>"; - $ret.= "</a>"; + $tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200; + $th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180; + $tr = $tw/$th; + + $th=120; $tw = $th*$tr; + $tpl=get_markup_template('oembed_video.tpl'); + $ret.=replace_macros($tpl, array( + '$embedurl'=>$embedurl, + '$escapedhtml'=>urlencode($j->html), + '$tw'=>$tw, + '$th'=>$th, + '$turl'=>$j->thumbnail_url, + )); + } else { $ret=$j->html; } @@ -154,4 +157,5 @@ function oembed_html2bbcode($text) { } } -?> + + diff --git a/include/poller.php b/include/poller.php index cef0647b5..a19f0716f 100644 --- a/include/poller.php +++ b/include/poller.php @@ -64,8 +64,7 @@ function poller_run($argv, $argc){ } // clear old cache - q("DELETE FROM `cache` WHERE `updated` < '%s'", - dbesc(datetime_convert('UTC','UTC',"now - 30 days"))); + Cache::clear(); $manual_id = 0; $generation = 0; diff --git a/mod/item.php b/mod/item.php index ab104735b..0e855d54d 100644 --- a/mod/item.php +++ b/mod/item.php @@ -338,7 +338,6 @@ function item_post(&$a) { $bookmark = 0; if(preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$body,$match)) { $bookmark = 1; - $body = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'[url=$1]$2[/url]',$body); } diff --git a/view/oembed_video.tpl b/view/oembed_video.tpl new file mode 100644 index 000000000..29b5149ba --- /dev/null +++ b/view/oembed_video.tpl @@ -0,0 +1,4 @@ +<a href='$embedurl' onclick='this.innerHTML=unescape("$escapedhtml").replace(/\+/g," "); return false;' style='float:left; margin: 1em; position: relative;'> + <img width='$tw' height='$th' src='$turl' > + <div style='position: absolute; top: 0px; left: 0px; width: $twpx; height: $thpx; background: url(images/icons/48/play.png) no-repeat center center;'></div> +</a> |