From 23d1b994ccff17567391eb9b1572321b1731189c Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 10:38:49 +0100 Subject: [PATCH 1/6] Move [embed] bbtag from oembed plugin to core --- addon/oembed/oembed.php | 44 ------------------------------------- include/bbcode.php | 5 ++++- include/oembed.php | 48 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 include/oembed.php diff --git a/addon/oembed/oembed.php b/addon/oembed/oembed.php index 82183f3cc..4bbd75387 100644 --- a/addon/oembed/oembed.php +++ b/addon/oembed/oembed.php @@ -10,13 +10,11 @@ function oembed_install() { register_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool'); register_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header'); - register_hook('bbcode', 'addon/oembed/oembed.php', 'oembed_hook_bbcode'); } function oembed_uninstall() { unregister_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool'); unregister_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header'); - unregister_hook('bbcode', 'addon/oembed/oembed.php', 'oembed_hook_bbcode'); } function oembed_hook_page_header($a, &$b){ @@ -53,49 +51,7 @@ function oembed_hook_jot_tool($a, &$b) { '; } -function oembed_replacecb($matches){ - $embedurl=$matches[1]; - $ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl); - $txt = fetch_url($ourl); - $j = json_decode($txt); - $ret=""; - 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; - $ret = ""; - $ret.= ""; - $ret.= ""; - } else { - $ret=$j->html; - } - $ret.="
"; - }; break; - case "photo": { - $ret = ""; - $ret.="
"; - }; break; - case "link": { - //$ret = "".$j->title.""; - }; break; - case "rich": { - // not so safe.. - $ret = "
".$j->html."
"; - }; break; - } - - $embedlink = (isset($j->title))?$j->title:$embedurl; - $ret .= "$embedlink"; - if (isset($j->author_name)) $ret.=" by ".$j->author_name; - if (isset($j->provider_name)) $ret.=" on ".$j->provider_name; - $ret.=""; - return $ret; -} -function oembed_hook_bbcode($a, &$text){ - $text = preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text); -} ?> \ No newline at end of file diff --git a/include/bbcode.php b/include/bbcode.php index 8382cc804..c17e5dded 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -1,5 +1,5 @@ ', $Text); + // oembed tag + $Text = oembed_bbcode($Text); + call_hooks('bbcode',$Text); return $Text; diff --git a/include/oembed.php b/include/oembed.php new file mode 100644 index 000000000..d9bf9f67c --- /dev/null +++ b/include/oembed.php @@ -0,0 +1,48 @@ +"; + 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; + $ret = ""; + $ret.= ""; + $ret.= ""; + } else { + $ret=$j->html; + } + $ret.="
"; + }; break; + case "photo": { + $ret = ""; + $ret.="
"; + }; break; + case "link": { + //$ret = "".$j->title.""; + }; break; + case "rich": { + // not so safe.. + $ret = "
".$j->html."
"; + }; break; + } + + $embedlink = (isset($j->title))?$j->title:$embedurl; + $ret .= "$embedlink"; + if (isset($j->author_name)) $ret.=" by ".$j->author_name; + if (isset($j->provider_name)) $ret.=" on ".$j->provider_name; + $ret.=""; + return $ret; +} + +function oembed_bbcode($text){ + $stopoembed = get_config("system","no_oembed"); + if ($stopoembed == True): + return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", "$1" ,$text); + return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text); +} +?> \ No newline at end of file From 6ea87223d3ba5d9ecc1fa57453207e1645819fe5 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 11:00:35 +0100 Subject: [PATCH 2/6] Add 'system''no_oembed' config option --- htconfig.php | 5 ++++- include/oembed.php | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/htconfig.php b/htconfig.php index 13c065e69..5f5c76cbd 100644 --- a/htconfig.php +++ b/htconfig.php @@ -72,4 +72,7 @@ $a->config['system']['rino_encrypt'] = true; $a->config['system']['addon'] = 'js_upload'; - \ No newline at end of file +// Disable oembed embedding +// This disable the conversion of [embed]$url[/embed] tag in html +// $a->config['system']['no_oembed'] = true; + diff --git a/include/oembed.php b/include/oembed.php index d9bf9f67c..cec9cf75a 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -10,7 +10,7 @@ function oembed_replacecb($matches){ if (isset($j->thumbnail_url)) { $tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200; $th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180; - $ret = ""; + $ret = ""; $ret.= ""; $ret.= ""; } else { @@ -41,8 +41,9 @@ function oembed_replacecb($matches){ function oembed_bbcode($text){ $stopoembed = get_config("system","no_oembed"); - if ($stopoembed == True): - return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", "$1" ,$text); + if ($stopoembed == true){ + return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "". t('Embedding disabled') ." : $1" ,$text); + } return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text); } ?> \ No newline at end of file From 49ea05b8ff27c31924ddf94c582ab4260faf56c2 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 16:45:58 +0100 Subject: [PATCH 3/6] use microformat to mark html from [embed] tag, convert html with oembed microformat to [embed] tag --- include/bbcode.php | 2 +- include/items.php | 3 +++ include/oembed.php | 44 ++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index c17e5dded..eb0806dc5 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -94,7 +94,7 @@ function bbcode($Text) { $Text = preg_replace("/\[youtube\](.+?)\[\/youtube\]/", '', $Text); // oembed tag - $Text = oembed_bbcode($Text); + $Text = oembed_bbcode2html($Text); call_hooks('bbcode',$Text); diff --git a/include/items.php b/include/items.php index a5991d663..f204745bb 100644 --- a/include/items.php +++ b/include/items.php @@ -1,6 +1,7 @@ ]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', '[youtube]$1[/youtube]', $res['body']); + $res['body'] = oembed_html2bbcode($res['body']); + $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); diff --git a/include/oembed.php b/include/oembed.php index cec9cf75a..f9441b370 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -4,7 +4,7 @@ function oembed_replacecb($matches){ $ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl); $txt = fetch_url($ourl); $j = json_decode($txt); - $ret=""; + $ret=""; switch ($j->type) { case "video": { if (isset($j->thumbnail_url)) { @@ -32,18 +32,54 @@ function oembed_replacecb($matches){ } $embedlink = (isset($j->title))?$j->title:$embedurl; - $ret .= "$embedlink"; + $ret .= "$embedlink"; if (isset($j->author_name)) $ret.=" by ".$j->author_name; if (isset($j->provider_name)) $ret.=" on ".$j->provider_name; - $ret.=""; + $ret.=""; return $ret; } -function oembed_bbcode($text){ +function oembed_bbcode2html($text){ $stopoembed = get_config("system","no_oembed"); if ($stopoembed == true){ return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "". t('Embedding disabled') ." : $1" ,$text); } return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text); } + + +function oe_build_xpath($attr, $value){ + // http://westhoffswelt.de/blog/0036_xpath_to_select_html_by_class.html + return "contains( normalize-space( @$attr ), ' $value ' ) or substring( normalize-space( @$attr ), 1, string-length( '$value' ) + 1 ) = '$value ' or substring( normalize-space( @$attr ), string-length( @$attr ) - string-length( '$value' ) ) = ' $value' or @$attr = '$value'"; +} + +function oe_get_inner_html( $node ) { + $innerHTML= ''; + $children = $node->childNodes; + foreach ($children as $child) { + $innerHTML .= $child->ownerDocument->saveXML( $child ); + } + return $innerHTML; +} + +/** + * Find .... + * and replace it with [embed]url[/embed] + */ +function oembed_html2bbcode($text) { + $dom = DOMDocument::loadHTML($text); + $xpath = new DOMXPath($dom); + $attr = "oembed"; + + $xattr = oe_build_xpath("class","oembed"); + $entries = $xpath->query("//span[$xattr]"); + + $xattr = oe_build_xpath("rel","oembed"); + foreach($entries as $e) { + $href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue; + if(!is_null($href)) $e->parentNode->replaceChild(new DOMText("[embed]".$href."[embed]"), $e); + } + return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) ); +} + ?> \ No newline at end of file From 6efc78e0e42d651211116739579dc6319ca9c5b1 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 17:10:36 +0100 Subject: [PATCH 4/6] add cache table --- boot.php | 2 +- database.sql | 6 +++++- update.php | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/boot.php b/boot.php index 6cbb4f07c..ac010c19d 100644 --- a/boot.php +++ b/boot.php @@ -2,7 +2,7 @@ set_time_limit(0); -define ( 'BUILD_ID', 1033 ); +define ( 'BUILD_ID', 1034 ); define ( 'FRIENDIKA_VERSION', '2.10.0902' ); define ( 'DFRN_PROTOCOL_VERSION', '2.0' ); diff --git a/database.sql b/database.sql index 54950f0fd..817fd0922 100644 --- a/database.sql +++ b/database.sql @@ -471,4 +471,8 @@ CREATE TABLE IF NOT EXISTS `event` ( `deny_gid` MEDIUMTEXT NOT NULL ) ENGINE = MYISAM DEFAULT CHARSET=utf8; - +CREATE TABLE IF NOT EXISTS 'cache' ( + `k` CHAR( 255 ) NOT NULL PRIMARY KEY , + `v` TEXT NOT NULL, + `updated` DATETIME NOT NULL +) ENGINE = MYISAM DEFAULT CHARSET=utf8; diff --git a/update.php b/update.php index 0bd58d6d4..f7bf9da1e 100644 --- a/update.php +++ b/update.php @@ -320,3 +320,11 @@ function update_1031() { function update_1032() { q("ALTER TABLE `profile` ADD `pdesc` CHAR( 255 ) NOT NULL AFTER `name` "); } + +function update_1033() { + q("CREATE TABLE IF NOT EXISTS `cache` ( + `k` CHAR( 255 ) NOT NULL PRIMARY KEY , + `v` TEXT NOT NULL, + `updated` DATETIME NOT NULL + ) ENGINE = MYISAM DEFAULT CHARSET=utf8;"); +} From 3dbca2a8041540a9e8a336db21fc28fc3b6bc5d7 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 17:16:35 +0100 Subject: [PATCH 5/6] delete old cache in poller.php --- include/poller.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/poller.php b/include/poller.php index 4567a5cfc..2ba285b7b 100644 --- a/include/poller.php +++ b/include/poller.php @@ -30,6 +30,10 @@ function poller_run($argv, $argc){ $php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php'); //proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo)); proc_run($php_path,"include/queue.php"); + + // clear old cache + q("DELETE FROM `cache` WHERE `updated`<'%s'", + dbesc(datetime_convert('UTC','UTC',"now - 30 days"))); $hub_update = false; From bdbbfe17b0ab58a89a0673f5409d30870afd0b9d Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 31 Jan 2011 17:23:55 +0100 Subject: [PATCH 6/6] cache oembed request --- include/oembed.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/include/oembed.php b/include/oembed.php index f9441b370..a130357ab 100644 --- a/include/oembed.php +++ b/include/oembed.php @@ -1,8 +1,20 @@ "; switch ($j->type) {