]+>(.*?)<\/div>$/is', $j['html'], $o)) ? $o[1] : $j['html']);
} else {
$ret .= $jhtml;
}
break;
}
// add link to source if not present in "rich" type
if ($j['type'] != 'rich' || !strpos($j['html'], $embedurl)) {
$embedlink = (isset($j['title'])) ? $j['title'] : $embedurl;
$ret .= '
' . "
$embedlink";
$ret .= "
";
if (isset($j['author_name'])) {
$ret .= t(' by ') . $j['author_name'];
}
if (isset($j['provider_name'])) {
$ret .= t(' on ') . $j['provider_name'];
}
} else {
// add
for html2bbcode conversion
$ret .= "
$embedurl";
}
$ret .= "
";
return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret));
}
public static function iframe($src, $width, $height)
{
$scroll = ' scrolling="no" ';
if (! $width || strstr($width, '%')) {
$width = '640';
$scroll = ' scrolling="auto" ';
}
if (! $height || strstr($height, '%')) {
$height = '300';
$scroll = ' scrolling="auto" ';
}
// try and leave some room for the description line.
$height = intval($height) + 80;
$width = intval($width) + 40;
$s = z_root() . '/oembed/' . base64url_encode($src);
// Make sure any children are sandboxed within their own iframe.
return '
';
}
public static function bbcode2html($text, $export = false, $target = '')
{
$stopoembed = get_config("system", "no_oembed");
if ($stopoembed || $export) {
return preg_replace("/\[embed\](.+?)\[\/embed\]/is", '
$1', $text);
}
return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", ['\\Code\\Lib\\Oembed','replacecb'], $text);
}
public static function 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'";
}
public static function 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]
*/
public static function html2bbcode($text)
{
// start parser only if 'oembed' is in text
if (strpos($text, "oembed")) {
// convert non ascii chars to html entities
$html_text = mb_convert_encoding($text, 'HTML-ENTITIES', mb_detect_encoding($text));
// If it doesn't parse at all, just return the text.
$dom = new DOMDocument();
@$dom->loadHTML($html_text);
if ($dom) {
$xpath = new DOMXPath($dom);
$attr = "oembed";
$xattr = self::build_xpath("class", "oembed");
$entries = $xpath->query("//span[$xattr]");
$xattr = "@rel='oembed'";//self::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 self::get_inner_html($dom->getElementsByTagName("body")->item(0));
}
}
return $text;
}
}