Move tryoembed to Content\OEmbed

- Add bbcode functions documentation
- Add Exception handling to OEmbed::getHTML
- Fix formatting
This commit is contained in:
Hypolite Petovan 2018-01-07 00:44:23 -05:00
parent 1cd8001833
commit d8a312d286
2 changed files with 67 additions and 48 deletions

View File

@ -40,8 +40,19 @@ function bb_map_location($match) {
return str_replace($match[0], '<div class="map" >' . Map::byLocation($match[1]) . '</div>', $match[0]); return str_replace($match[0], '<div class="map" >' . Map::byLocation($match[1]) . '</div>', $match[0]);
} }
function bb_attachment($Text, $simplehtml = false, $tryoembed = true) { /**
* Processes [attachment] tags
*
* Note: Can produce a [bookmark] tag in the returned string
*
* @brief Processes [attachment] tags
* @param string $Text
* @param bool|int $simplehtml
* @param bool $tryoembed
* @return string
*/
function bb_attachment($Text, $simplehtml = false, $tryoembed = true)
{
$data = get_attachment_data($Text); $data = get_attachment_data($Text);
if (!$data) { if (!$data) {
return $Text; return $Text;
@ -52,10 +63,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$data["title"] = str_replace(array("http://", "https://"), "", $data["title"]); $data["title"] = str_replace(array("http://", "https://"), "", $data["title"]);
} }
if (((strpos($data["text"], "[img=") !== false) if (((strpos($data["text"], "[img=") !== false) || (strpos($data["text"], "[img]") !== false) || Config::get('system', 'always_show_preview')) && ($data["image"] != "")) {
|| (strpos($data["text"], "[img]") !== false)
|| Config::get('system', 'always_show_preview'))
&& ($data["image"] != "")) {
$data["preview"] = $data["image"]; $data["preview"] = $data["image"];
$data["image"] = ""; $data["image"] = "";
} }
@ -69,11 +77,13 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$text = sprintf('<span class="type-%s">', $data["type"]); $text = sprintf('<span class="type-%s">', $data["type"]);
} }
$bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $data["url"], $data["title"]), $data["url"], $data["title"]); $oembed = sprintf('[bookmark=%s]%s[/bookmark]', $data['url'], $data['title']);
if ($tryoembed) { if ($tryoembed) {
$oembed = tryoembed($bookmark); try {
} else { $oembed = OEmbed::getHTML($data['url'], $data['title']);
$oembed = $bookmark[0]; } catch (Exception $e) {
// $oembed isn't modified
}
} }
if (stripos($oembed, "<iframe ") !== false) { if (stripos($oembed, "<iframe ") !== false) {
@ -100,7 +110,7 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$text .= '</span>'; $text .= '</span>';
} }
} }
return trim($data["text"].' '.$text.' '.$data["after"]); return trim($data["text"] . ' ' . $text . ' ' . $data["after"]);
} }
function bb_remove_share_information($Text, $plaintext = false, $nolink = false) { function bb_remove_share_information($Text, $plaintext = false, $nolink = false) {
@ -223,32 +233,6 @@ function stripcode_br_cb($s) {
return '[code]' . str_replace('<br />', '', $s[1]) . '[/code]'; return '[code]' . str_replace('<br />', '', $s[1]) . '[/code]';
} }
function tryoembed($match) {
$url = $match[1];
// Always embed the SSL version
$url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
array("https://www.youtube.com/", "https://player.vimeo.com/"), $url);
$o = OEmbed::fetchURL($url);
if (!is_object($o)) {
return $match[0];
}
if (isset($match[2])) {
$o->title = $match[2];
}
if ($o->type == "error") {
return $match[0];
}
$html = OEmbed::formatObject($o);
return $html;
}
/* /*
* [noparse][i]italic[/i][/noparse] turns into * [noparse][i]italic[/i][/noparse] turns into
* [noparse][ i ]italic[ /i ][/noparse], * [noparse][ i ]italic[ /i ][/noparse],
@ -432,6 +416,16 @@ function bb_replace_images($body, $images) {
return $newbody; return $newbody;
} }
/**
* Processes [share] tags
*
* Note: Can produce a [bookmark] tag in the output
*
* @brief Processes [share] tags
* @param array $share preg_match_callback result array
* @param bool|int $simplehtml
* @return string
*/
function bb_ShareAttributes($share, $simplehtml) function bb_ShareAttributes($share, $simplehtml)
{ {
$attributes = $share[2]; $attributes = $share[2];
@ -520,7 +514,6 @@ function bb_ShareAttributes($share, $simplehtml)
} }
$preshare = trim($share[1]); $preshare = trim($share[1]);
if ($preshare != "") { if ($preshare != "") {
$preshare .= "<br /><br />"; $preshare .= "<br /><br />";
} }
@ -588,8 +581,13 @@ function bb_ShareAttributes($share, $simplehtml)
default: default:
// Transforms quoted tweets in rich attachments to avoid nested tweets // Transforms quoted tweets in rich attachments to avoid nested tweets
if (stripos(normalise_link($link), 'http://twitter.com/') === 0 && OEmbed::isAllowedURL($link)) { if (stripos(normalise_link($link), 'http://twitter.com/') === 0 && OEmbed::isAllowedURL($link)) {
$bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $link, $preshare), $link, $preshare); try {
$text = $preshare . tryoembed($bookmark); $oembed = OEmbed::getHTML($link, $preshare);
} catch (Exception $e) {
$oembed = sprintf('[bookmark=%s]%s[/bookmark]', $link, $preshare);
}
$text = $preshare . $oembed;
} else { } else {
$text = trim($share[1]) . "\n"; $text = trim($share[1]) . "\n";
@ -597,14 +595,13 @@ function bb_ShareAttributes($share, $simplehtml)
$tpl = get_markup_template('shared_content.tpl'); $tpl = get_markup_template('shared_content.tpl');
$text .= replace_macros($tpl, array( $text .= replace_macros($tpl, array(
'$profile' => $profile, '$profile' => $profile,
'$avatar' => $avatar, '$avatar' => $avatar,
'$author' => $author, '$author' => $author,
'$link' => $link, '$link' => $link,
'$posted' => $posted, '$posted' => $posted,
'$content' => trim($share[3]) '$content' => trim($share[3])
) ));
);
} }
break; break;
} }

View File

@ -15,6 +15,7 @@ use dba;
use DOMDocument; use DOMDocument;
use DOMXPath; use DOMXPath;
use DOMNode; use DOMNode;
use Exception;
require_once 'include/dba.php'; require_once 'include/dba.php';
require_once 'mod/proxy.php'; require_once 'mod/proxy.php';
@ -305,6 +306,27 @@ class OEmbed
return allowed_domain($domain, $allowed, true); return allowed_domain($domain, $allowed, true);
} }
public static function getHTML($url, $title = null)
{
// Always embed the SSL version
$url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
array("https://www.youtube.com/", "https://player.vimeo.com/"), $url);
$o = OEmbed::fetchURL($url);
if (!is_object($o) || $o->type == 'error') {
throw new Exception('OEmbed failed for URL: ' . $url);
}
if (x($title)) {
$o->title = $title;
}
$html = OEmbed::formatObject($o);
return $html;
}
/** /**
* @brief Generates the iframe HTML for an oembed attachment. * @brief Generates the iframe HTML for an oembed attachment.
* *