X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fbbcode.php;h=c2ebf35e6308b7464359a8af2b3efe36d13628f7;hb=57c47a8e3660b8b968b36ff7b379f51aa398a684;hp=b036a5dcdf0045ddf7aac9654cda4a735b9b85e2;hpb=35fbe3be14ace42ce7ef61665ac2300d01d1ef46;p=friendica.git
diff --git a/include/bbcode.php b/include/bbcode.php
index b036a5dcdf..c2ebf35e63 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -2,76 +2,215 @@
require_once("include/oembed.php");
require_once('include/event.php');
-function bb_rearrange_link($shared) {
- if ($shared[1] != "type-link")
- return($shared[0]);
+function bb_attachment($Text, $plaintext = false, $tryoembed = true) {
+ $Text = preg_replace_callback("/(.*?)\[attachment(.*?)\](.*?)\[\/attachment\]/ism",
+ function ($match) use ($plaintext){
+
+ $attributes = $match[2];
+
+ $type = "";
+ preg_match("/type='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $type = strtolower($matches[1]);
+
+ preg_match('/type="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $type = strtolower($matches[1]);
+
+ if ($type == "")
+ return($match[0]);
+
+ if (!in_array($type, array("link", "audio", "video")))
+ return($match[0]);
+
+ $url = "";
+ preg_match("/url='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $url = $matches[1];
+
+ preg_match('/url="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $url = $matches[1];
+
+ $title = "";
+ preg_match("/title='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $title = $matches[1];
+
+ preg_match('/title="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $title = $matches[1];
+
+ //$title = htmlentities($title, ENT_QUOTES, 'UTF-8', false);
+ $title = bbcode(html_entity_decode($title), false, false, true);
+ $title = str_replace(array("[", "]"), array("[", "]"), $title);
+
+ $image = "";
+ if ($type != "video") {
+ preg_match("/image='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $image = $matches[1];
+
+ preg_match('/image="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $image = $matches[1];
+ }
- $newshare = trim($shared[2]);
- $newshare = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $newshare);
+ $preview = "";
+ if ($type != "video") {
+ preg_match("/preview='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $preview = $matches[1];
- if (!strpos($shared[0], "[bookmark"))
- $newshare = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/ism", '[bookmark=$1]$2[/bookmark]', $newshare, 1);
+ preg_match('/preview="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $preview = $matches[1];
+ }
- preg_match("/\[img\](.*?)\[\/img\]/ism", $newshare, $matches);
+ if (((strpos($match[1], "[img=") !== false) OR (strpos($match[1], "[img]") !== false)) AND ($image != "")) {
+ $preview = $image;
+ $image = "";
+ }
- if ($matches) {
- $newshare = str_replace($matches[0], '', $newshare);
- $newshare = "[img]".$matches[1]."[/img]\n".$newshare;
- }
+ if ($plaintext)
+ $text = sprintf('%s
', $url, $title);
+ else {
+ $text = sprintf('', $type);
+
+ $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $url, $title), $url, $title);
+ if ($tryoembed)
+ $oembed = tryoembed($bookmark);
+ else
+ $oembed = $bookmark[0];
+
+ if (($image != "") AND !strstr(strtolower($oembed), "
', $url, $image, $title);
+ elseif (($preview != "") AND !strstr(strtolower($oembed), "
', $url, $preview, $title);
- $search = array("\n\n", "\n ", " \n");
- $replace = array("\n", "\n", "\n");
- do {
- $oldtext = $newshare;
- $newshare = str_replace($search, $replace, $newshare);
- } while ($oldtext != $newshare);
+ $text .= $oembed;
- $newshare = "[class=type-link]".$newshare."[/class]";
+ $text .= sprintf('%s
', trim($match[3]));
+ }
+
+ return($match[1].$text);
+ },$Text);
- return($newshare);
+ return($Text);
}
-function bb_remove_share_information($Text, $plaintext = false) {
- if ($plaintext)
- $Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $Text);
+function bb_rearrange_share($shared) {
+ if (!in_array(strtolower($shared[2]), array("type-link", "type-audio", "type-video")))
+ return($shared[0]);
+
+ if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
+ return($shared[0]);
+
+ $type = substr(trim(strtolower($shared[2])), 5);
+
+ $title = "";
+ $url = "";
+ $preview = "";
+ $description = "";
+
+ if (isset($bookmark[2][0]))
+ $title = $bookmark[2][0];
+
+ if (isset($bookmark[1][0]))
+ $url = $bookmark[1][0];
+
+ $cleanedshare = trim($shared[3]);
+ $cleanedshare = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $cleanedshare);
+ preg_match("/\[img\](.*?)\[\/img\]/ism", $cleanedshare, $matches);
+
+ if ($matches)
+ $preview = trim($matches[1]);
+
+ preg_match("/\[quote\](.*?)\[\/quote\]/ism", $cleanedshare, $matches);
+ if ($matches)
+ $description = trim($matches[1]);
+
+ $url = str_replace(array("[", "]"), array("[", "]"), htmlentities($url, ENT_QUOTES, 'UTF-8', false));
+ $title = str_replace(array("[", "]"), array("[", "]"), htmlentities($title, ENT_QUOTES, 'UTF-8', false));
+ $preview = str_replace(array("[", "]"), array("[", "]"), htmlentities($preview, ENT_QUOTES, 'UTF-8', false));
+
+ $Text = trim($shared[1])."\n[attachment type='".$type."'";
+
+ if ($url != "")
+ $Text .= " url='".$url."'";
+ if ($title != "")
+ $Text .= " title='".$title."'";
+ if ($preview != "") {
+ require_once("include/Photo.php");
+ $picturedata = get_photo_info($preview);
+
+ if (count($picturedata) > 0) {
+ // if the preview picture is larger than 500 pixels then show it in a larger mode
+ // But only, if the picture isn't higher than large (To prevent huge posts)
+ if (($picturedata[0] >= 500) AND ($picturedata[0] >= $picturedata[1]))
+ $Text .= " image='".$preview."'";
+ else
+ $Text .= " preview='".$preview."'";
+ } else
+ $Text .= " preview='".$preview."'";
+ }
+ $Text .= "]".$description."[/attachment]";
+
+ return($Text);
+}
- $Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism","bb_cleanup_share",$Text);
- return($Text);
+function bb_remove_share_information($Text, $plaintext = false, $nolink = false) {
+ $Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism",
+ function ($match) use ($plaintext, $nolink){
+ return(bb_cleanup_share($match, $plaintext, $nolink));
+ },$Text);
+ return($Text);
}
-function bb_cleanup_share($shared) {
+function bb_cleanup_share($shared, $plaintext, $nolink) {
if (!in_array($shared[2], array("type-link", "type-video")))
- return($shared[0]);
+ return($shared[0]);
+
+ if ($plaintext)
+ $shared[3] = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $shared[3]);
+
+ if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
+ return($shared[0]);
- if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
- return($shared[0]);
+ if ($nolink)
+ return(trim($shared[1]));
- $title = "";
- $link = "";
+ $title = "";
+ $link = "";
- if (isset($bookmark[2][0]))
- $title = $bookmark[2][0];
+ if (isset($bookmark[2][0]))
+ $title = $bookmark[2][0];
- if (isset($bookmark[1][0]))
- $link = $bookmark[1][0];
+ if (isset($bookmark[1][0]))
+ $link = $bookmark[1][0];
- if (strpos($shared[1],$title) !== false)
- $title = "";
+ if (($title != "") AND ((strpos($shared[1],$title) !== false) OR
+ (similar_text($shared[1],$title) / strlen($title)) > 0.9))
+ $title = "";
// if (strpos($shared[1],$link) !== false)
// $link = "";
- $text = trim($shared[1]);
+ $text = trim($shared[1]);
if (($text == "") AND ($title != "") AND ($link == ""))
$text .= "\n\n".trim($title);
+ // If the link already is included in the post, don't add it again
+ if (($link != "") AND strpos($text, $link))
+ return(trim($text));
+
if (($link != "") AND ($title != ""))
$text .= "\n[url=".trim($link)."]".trim($title)."[/url]";
elseif (($link != ""))
$text .= "\n".trim($link);
- return(trim($text));
+ return(trim($text));
}
@@ -107,7 +246,8 @@ function stripcode_br_cb($s) {
}
function tryoembed($match){
- $url = ((count($match)==2)?$match[1]:$match[2]);
+ //$url = ((count($match)==2)?$match[1]:$match[2]);
+ $url = $match[1];
// Always embed the SSL version
$url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
@@ -117,7 +257,8 @@ function tryoembed($match){
$o = oembed_fetch_url($url);
- //echo "
"; var_dump($match, $url, $o); killme(); + if (isset($match[2])) + $o->title = $match[2]; if ($o->type=="error") return $match[0]; @@ -201,7 +342,7 @@ function get_bb_tag_pos($s, $name, $occurance = 1) { return false; $res = array( 'start' => array('open' => $start_open, 'close' => $start_close), - 'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) ); + 'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) ); if( $start_equal !== false) $res['start']['equal'] = $start_equal + 1; @@ -291,49 +432,48 @@ function bb_replace_images($body, $images) { return $newbody; }} -function bb_ShareAttributes($match) { +function bb_ShareAttributes($share, $simplehtml) { + $attributes = $share[2]; - $attributes = $match[1]; + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); - $author = ""; - preg_match("/author='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $author = $matches[1]; - preg_match('/author="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $author = $matches[1]; + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - $link = ""; - preg_match("/link='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $matches[1]; - preg_match('/link="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + $avatar = ""; + preg_match("/avatar='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; - $avatar = ""; - preg_match("/avatar='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $avatar = $matches[1]; + preg_match('/avatar="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $avatar = $matches[1]; - preg_match('/avatar="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $avatar = $matches[1]; + $link = ""; + preg_match("/link='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; - $profile = ""; - preg_match("/profile='(.*?)'/ism", $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; - - preg_match('/profile="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $profile = $matches[1]; + preg_match('/link="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $link = $matches[1]; $posted = ""; - $itemcache = get_config("system","itemcache"); + $itemcache = get_itemcachepath(); // relative dates only make sense when they aren't cached if ($itemcache == "") { @@ -348,205 +488,147 @@ function bb_ShareAttributes($match) { $reldate = (($posted) ? " " . relative_date($posted) : ''); } - $headline = '