X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fbbcode.php;h=d461b984824fa0683464e7fe0cbad9901b359b02;hb=2f46675a89b1dcb453654be4be2117114a3d0a65;hp=d6fc81983f0e0eb8846da9dbfe8ba8fd115b2ac8;hpb=d3878d717ccd22de8cc393b87301e45f994f7ab6;p=friendica.git
diff --git a/include/bbcode.php b/include/bbcode.php
index d6fc81983f..d461b98482 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -3,148 +3,219 @@ require_once("include/oembed.php");
require_once('include/event.php');
function bb_attachment($Text, $plaintext = false, $tryoembed = true) {
- $Text = preg_replace_callback("/\[attachment(.*?)\](.*?)\[\/attachment\]/ism",
+ $Text = preg_replace_callback("/(.*?)\[attachment(.*?)\](.*?)\[\/attachment\]/ism",
function ($match) use ($plaintext){
- $attributes = $match[1];
+ $attributes = $match[2];
- $type = "";
- preg_match("/type='(.*?)'/ism", $attributes, $matches);
- if ($matches[1] != "")
- $type = $matches[1];
+ $type = "";
+ preg_match("/type='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $type = strtolower($matches[1]);
- preg_match('/type="(.*?)"/ism', $attributes, $matches);
- if ($matches[1] != "")
- $type = $matches[1];
+ preg_match('/type="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $type = strtolower($matches[1]);
- if ($type == "")
- return($match[0]);
+ if ($type == "")
+ return($match[0]);
- if (!in_array($type, array("link", "audio", "video")))
- 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];
+ $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];
+ 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];
+ $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];
+ preg_match('/title="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $title = $matches[1];
- $image = "";
- preg_match("/image='(.*?)'/ism", $attributes, $matches);
- if ($matches[1] != "")
- $image = $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);
- preg_match('/image="(.*?)"/ism', $attributes, $matches);
- if ($matches[1] != "")
- $image = $matches[1];
+ $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];
+ }
+
+ $preview = "";
+ if ($type != "video") {
+ preg_match("/preview='(.*?)'/ism", $attributes, $matches);
+ if ($matches[1] != "")
+ $preview = $matches[1];
+
+ preg_match('/preview="(.*?)"/ism', $attributes, $matches);
+ if ($matches[1] != "")
+ $preview = $matches[1];
+ }
+
+ if (((strpos($match[1], "[img=") !== false) OR (strpos($match[1], "[img]") !== false)) AND ($image != "")) {
+ $preview = $image;
+ $image = "";
+ }
if ($plaintext)
- $text = sprintf('%s', $url, $title);
+ $text = sprintf('%s
', $url, $title);
else {
- $text = sprintf('', $type);
+ $text = sprintf('', $type);
- $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $url, $title), $title, $url);
+ $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $url, $title), $url, $title);
if ($tryoembed)
- $oembed = tryoembed($bookmark);
+ $oembed = tryoembed($bookmark);
else
$oembed = $bookmark[0];
- if (($image != "") AND !strstr(strtolower($oembed), "', $image, $title); // To-Do: Anführungszeichen in "alt"
+ if (($image != "") AND !strstr(strtolower($oembed), "
', $url, $image, $title);
+ elseif (($preview != "") AND !strstr(strtolower($oembed), "
', $url, $preview, $title);
- $text .= $oembed;
+ $text .= $oembed;
- $text .= sprintf('%s
', trim($match[2]));
+ $text .= sprintf('%s
', trim($match[3]));
}
- return($text);
+ return($match[1].$text);
},$Text);
- return($Text);
+ return($Text);
}
-function bb_rearrange_link($shared) {
- if ($shared[1] != "type-link")
+function bb_rearrange_share($shared) {
+ if (!in_array(strtolower($shared[2]), array("type-link", "type-audio", "type-video")))
return($shared[0]);
- $newshare = trim($shared[2]);
- $newshare = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $newshare);
-
- if (!strpos($shared[0], "[bookmark"))
- $newshare = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/ism", '[bookmark=$1]$2[/bookmark]', $newshare, 1);
-
- preg_match("/\[img\](.*?)\[\/img\]/ism", $newshare, $matches);
+ if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
+ return($shared[0]);
- if ($matches) {
- $newshare = str_replace($matches[0], '', $newshare);
- $newshare = "[img]".$matches[1]."[/img]\n".$newshare;
+ $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]";
- $search = array("\n\n", "\n ", " \n");
- $replace = array("\n", "\n", "\n");
- do {
- $oldtext = $newshare;
- $newshare = str_replace($search, $replace, $newshare);
- } while ($oldtext != $newshare);
-
- $newshare = "[class=type-link]".$newshare."[/class]";
+ return($Text);
+}
- return($newshare);
+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_remove_share_information($Text, $plaintext = false) {
+function bb_cleanup_share($shared, $plaintext, $nolink) {
+ $shared[1] = trim($shared[1]);
+
+ if (!in_array($shared[2], array("type-link", "type-video")))
+ return($shared[0]);
+
if ($plaintext)
- $Text = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $Text);
+ $shared[3] = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism","[bookmark=$1]$1[/bookmark]", $shared[3]);
- $Text = preg_replace_callback("((.*?)\[class=(.*?)\](.*?)\[\/class\])ism","bb_cleanup_share",$Text);
- return($Text);
-}
+ if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
+ return($shared[0]);
-function bb_cleanup_share($shared) {
- if (!in_array($shared[2], array("type-link", "type-video")))
- return($shared[0]);
+ if ($nolink)
+ return($shared[1]);
- if (!preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",$shared[3], $bookmark))
- return($shared[0]);
+ $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 (($title != "") AND (strpos($title, $shared[1]) !== false))
+ $shared[1] = $title;
- 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));
}
@@ -180,7 +251,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/"),
@@ -190,7 +262,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]; @@ -274,7 +347,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; @@ -364,49 +437,48 @@ function bb_replace_images($body, $images) { return $newbody; }} -function bb_ShareAttributes($match) { - - $attributes = $match[1]; +function bb_ShareAttributes($share, $simplehtml) { + $attributes = $share[2]; - $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]; - $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('/link="(.*?)"/ism', $attributes, $matches); - if ($matches[1] != "") - $link = $matches[1]; + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profile = $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]; - $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]; $posted = ""; - $itemcache = get_config("system","itemcache"); + $itemcache = get_itemcachepath(); // relative dates only make sense when they aren't cached if ($itemcache == "") { @@ -421,204 +493,147 @@ function bb_ShareAttributes($match) { $reldate = (($posted) ? " " . relative_date($posted) : ''); } - $headline = '