diff options
author | friendica <info@friendica.com> | 2014-09-03 21:14:24 -0700 |
---|---|---|
committer | friendica <info@friendica.com> | 2014-09-03 21:14:24 -0700 |
commit | 96a9378fd74eb45599ef2152d55286293968b298 (patch) | |
tree | 161726b8d5a2ea528dbb95502ba6d4b81a1d5bc1 /include | |
parent | 844087bc71f333719c1e08d807874f3ae3a7053e (diff) | |
download | volse-hubzilla-96a9378fd74eb45599ef2152d55286293968b298.tar.gz volse-hubzilla-96a9378fd74eb45599ef2152d55286293968b298.tar.bz2 volse-hubzilla-96a9378fd74eb45599ef2152d55286293968b298.zip |
this is turning into a wretched mess. It's going to get worse before it gets better, but I'm trying to do this incrementally so I don't break the whole shebang for a few days. It will get better once all the bbcode translation is done in a single place (cross fingers), and we can just sign the post once when we submit it and be done with it. If Diaspora ever implements editing of existing posts we'll have to go back and do the whole wretched mess over again.
Diffstat (limited to 'include')
-rw-r--r-- | include/bb2diaspora.php | 268 | ||||
-rwxr-xr-x | include/diaspora.php | 31 |
2 files changed, 99 insertions, 200 deletions
diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 623b2d7b7..622f239ad 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -233,6 +233,75 @@ function diaspora_ol($s) { return preg_replace("/\[\\\\\*\]( *)/", "1. ", $s[1]); } +function bb2dmention_callback($match) { + + $r = q("select xchan_addr from xchan where xchan_url = '%s'", + dbesc($match[2]) + ); + + if($r) + return '@{' . $match[3] . ' ; ' . $r[0]['xchan_addr'] . '}'; + return '@' . $match[3]; + +} + + + +function bb2diaspora_itembody($item) { + + if($item['diaspora_meta']) { + $j = json_decode($item['diaspora_meta'],true); + if($j && $j['body']) { + return $j['body']; + } + } + + if(array_key_exists('item_flags',$item) && ($item['item_flags'] & ITEM_OBSCURED)) { + $key = get_config('system','prvkey'); + $title = (($item['title']) ? crypto_unencapsulate(json_decode($item['title'],true),$key) : ''); + $body = (($item['body']) ? crypto_unencapsulate(json_decode($item['body'],true),$key) : ''); + } + + $body = preg_replace('/\#\^http/i', 'http', $body); + + // protect tags and mentions from hijacking + + if(intval(get_pconfig($item['uid'],'system','prevent_tag_hijacking'))) { + $new_tag = html_entity_decode('⋕',ENT_COMPAT,'UTF-8'); + $new_mention = html_entity_decode('@',ENT_COMPAT,'UTF-8'); + + // #-tags + $body = preg_replace('/\#\[url/i', $new_tag . '[url', $body); + $body = preg_replace('/\#\[zrl/i', $new_tag . '[zrl', $body); + // @-mentions + $body = preg_replace('/\@\!?\[url/i', $new_mention . '[url', $body); + $body = preg_replace('/\@\!?\[zrl/i', $new_mention . '[zrl', $body); + } + + // remove multiple newlines + do { + $oldbody = $body; + $body = str_replace("\n\n\n", "\n\n", $body); + } while ($oldbody != $body); + + $body = bb2diaspora($body); + + if(strlen($title)) + $body = "## " . $title . "\n\n" . $body; + + if($item['attach']) { + $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER); + if(cnt) { + $body .= "\n" . t('Attachments:') . "\n"; + foreach($matches as $mtch) { + $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n"; + } + } + } + + return html_entity_decode($body); + +} function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { @@ -243,10 +312,17 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { /** * Transform #tags, strip off the [url] and replace spaces with underscore */ - $Text = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match', - 'return \'#\'. str_replace(\' \', \'_\', $match[2]);' + $Text = preg_replace_callback('/#\[([zu])rl\=(\w+.*?)\](\w+.*?)\[\/[(zu)]rl\]/i', create_function('$match', + 'return \'#\'. str_replace(\' \', \'_\', $match[3]);' ), $Text); + $Text = preg_replace_callback('/#\^\[([zu])rl\=(\w+.*?)\](\w+.*?)\[\/[(zu)]rl\]/i', create_function('$match', + 'return str_replace(\' \', \'_\', $match[3]);' + ), $Text); + + + $Text = preg_replace_callback('/\@\!?\[([zu])rl\=(\w+.*?)\](\w+.*?)\[\/([zu])rl\]/i', 'bb2dmention_callback', $Text); + // Converting images with size parameters to simple images. Markdown doesn't know it. $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); @@ -274,195 +350,9 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // Remove all unconverted tags $Text = strip_tags($Text); - -/* Old routine - - $ev = bbtoevent($Text); - - // Replace any html brackets with HTML Entities to prevent executing HTML or script - // Don't use strip_tags here because it breaks [url] search by replacing & with amp - - $Text = str_replace("<", "<", $Text); - $Text = str_replace(">", ">", $Text); - - // If we find any event code, turn it into an event. - // After we're finished processing the bbcode we'll - // replace all of the event code with a reformatted version. - - if($preserve_nl) - $Text = str_replace(array("\n","\r"), array('',''),$Text); - else - // Remove the "return" character, as Diaspora uses only the "newline" - // character, so having the "return" character can cause signature - // failures - $Text = str_replace("\r", "", $Text); - - - // Set up the parameters for a URL search string - $URLSearchString = "^\[\]"; - // Set up the parameters for a MAIL search string - $MAILSearchString = $URLSearchString; - - // Perform URL Search - - // [img]pathtoimage[/img] - - // the following was added on 10-January-2012 due to an inability of Diaspora's - // new javascript markdown processor to handle links with images as the link "text" - // It is not optimal and may be removed if this ability is restored in the future - - $Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism", - '![' . t('image/photo') . '](' . '$2' . ')' . "\n" . '[' . t('link') . '](' . '$1' . ')', $Text); - - $Text = preg_replace("/\[bookmark\]([$URLSearchString]*)\[\/bookmark\]/ism", '[$1]($1)', $Text); - $Text = preg_replace("/\[bookmark\=([$URLSearchString]*)\](.*?)\[\/bookmark\]/ism", '[$2]($1)', $Text); - - $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '[$1]($1)', $Text); - $Text = preg_replace("/\#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[#$2]($1)', $Text); - $Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[$2]($1)', $Text); - - - $Text = preg_replace("/\[img\](.*?)\[\/img\]/", '![' . t('image/photo') . '](' . '$1' . ')', $Text); - $Text = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/", '![' . t('image/photo') . '](' . '$2' . ')', $Text); - - $Text = preg_replace("/\[zrl\]([$URLSearchString]*)\[\/zrl\]/ism", '[$1]($1)', $Text); - $Text = preg_replace("/\#\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '[#$2]($1)', $Text); - $Text = preg_replace("/\[zrl\=([$URLSearchString]*)\](.*?)\[\/zrl\]/ism", '[$2]($1)', $Text); - - - $Text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/", '![' . t('image/photo') . '](' . '$1' . ')', $Text); - $Text = preg_replace("/\[zmg\=(.*?)\](.*?)\[\/zmg\]/", '![' . t('image/photo') . '](' . '$2' . ')', $Text); - - // Perform MAIL Search - $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '[$1](mailto:$1)', $Text); - $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '[$2](mailto:$1)', $Text); - - $Text = str_replace('*', '\\*', $Text); - $Text = str_replace('_', '\\_', $Text); - - $Text = str_replace('`','\\`', $Text); - - // Check for bold text - $Text = preg_replace("(\[b\](.*?)\[\/b\])is",'**$1**',$Text); - - // Check for italics text - $Text = preg_replace("(\[i\](.*?)\[\/i\])is",'_$1_',$Text); - - // Check for underline text - // Replace with italics since Diaspora doesn't have underline - $Text = preg_replace("(\[u\](.*?)\[\/u\])is",'_$1_',$Text); - - // Check for strike-through text - $Text = preg_replace("(\[s\](.*?)\[\/s\])is",'**[strike]**$1**[/strike]**',$Text); - - // Check for over-line text -// $Text = preg_replace("(\[o\](.*?)\[\/o\])is",'<span class="overline">$1</span>',$Text); - - // Check for colored text - // Remove color since Diaspora doesn't support it - $Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text); - - // Check for sized text - // Remove it since Diaspora doesn't support sizes very well - $Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text); - - // Check for list text - $endlessloop = 0; - while ((((strpos($Text, "[/list]") !== false) && (strpos($Text, "[list") !== false)) || - ((strpos($Text, "[/ol]") !== false) && (strpos($Text, "[ol]") !== false)) || - ((strpos($Text, "[/ul]") !== false) && (strpos($Text, "[ul]") !== false)) || - ((strpos($Text, "[/li]") !== false) && (strpos($Text, "[li]") !== false))) && (++$endlessloop < 20)) { - $Text = preg_replace_callback("/\[list\](.*?)\[\/list\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[list=1\](.*?)\[\/list\]/is", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=i\](.*?)\[\/list\]/s",'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=I\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=a\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=A\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[ul\](.*?)\[\/ul\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[ol\](.*?)\[\/ol\]/is", 'diaspora_ol', $Text); - $Text = preg_replace("/\[li\]( *)(.*?)\[\/li\]/s", '* $2' ,$Text); - } - - // Just get rid of table tags since Diaspora doesn't support tables - $Text = preg_replace("/\[th\](.*?)\[\/th\]/s", '$1' ,$Text); - $Text = preg_replace("/\[td\](.*?)\[\/td\]/s", '$1' ,$Text); - $Text = preg_replace("/\[tr\](.*?)\[\/tr\]/s", '$1' ,$Text); - $Text = preg_replace("/\[table\](.*?)\[\/table\]/s", '$1' ,$Text); - - $Text = preg_replace("/\[table border=(.*?)\](.*?)\[\/table\]/s", '$2' ,$Text); -// $Text = preg_replace("/\[table border=0\](.*?)\[\/table\]/s", '<table border="0" >$1</table>' ,$Text); - - -// $Text = str_replace("[*]", "<li>", $Text); - - // Check for font change text -// $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","<span style=\"font-family: $1;\">$2</span>",$Text); - - - $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripdcode_br_cb',$Text); - - // Check for [code] text - $Text = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/is","\t$2\n", $Text); - - - - - // Declare the format for [quote] layout - // $QuoteLayout = '<blockquote>$1</blockquote>'; - // Check for [quote] text - $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is",">$1\n\n", $Text); - $Text = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/is",">$2\n\n", $Text); - - // Images - - // html5 video and audio - - $Text = preg_replace("/\[video\](.*?)\[\/video\]/", '$1', $Text); - - $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '$1', $Text); - -// $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text); - - // [img=widthxheight]image source[/img] -// $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '<img src="$3" style="height:{$2}px; width:{$1}px;" >', $Text); - - $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]https?:\/\/www.youtube.com\/embed\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism",'http://www.youtube.com/watch?v=$1',$Text); - $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", 'http://www.youtube.com/watch?v=$1', $Text); - - $Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'http://vimeo.com/$1',$Text); - $Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'http://vimeo.com/$1',$Text); - $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", 'http://vimeo.com/$1',$Text); - - - $Text = str_replace('[nosmile]','',$Text); - - // oembed tag - // $Text = oembed_bbcode2html($Text); - - // If we found an event earlier, strip out all the event code and replace with a reformatted version. - - if(x($ev,'start')) { - - $sub = format_event_diaspora($ev); - - $Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/is",'',$Text); - $Text = preg_replace("/\[event\-description\](.*?)\[\/event\-description\]/is",'',$Text); - $Text = preg_replace("/\[event\-start\](.*?)\[\/event\-start\]/is",$sub,$Text); - $Text = preg_replace("/\[event\-finish\](.*?)\[\/event\-finish\]/is",'',$Text); - $Text = preg_replace("/\[event\-location\](.*?)\[\/event\-location\]/is",'',$Text); - $Text = preg_replace("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",'',$Text); - } - - $Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text); - - $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text); - -*/ - // Remove any leading or trailing whitespace, as this will mess up // the Diaspora signature verification and cause the item to disappear + $Text = trim($Text); call_hooks('bb2diaspora',$Text); diff --git a/include/diaspora.php b/include/diaspora.php index fabcafa79..ae2c1184a 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -2278,20 +2278,29 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $body = str_replace("\n\n\n", "\n\n", $body); } while ($oldbody != $body); + if($item['diaspora_meta']) { + $j = json_decode($item['diaspora_meta'],true); + if($j && $j['body']) { + $body = xmlify($j['body']); + } + } + else { + $body = xmlify(html_entity_decode(bb2diaspora($body))); - // convert to markdown - $body = xmlify(html_entity_decode(bb2diaspora($body))); - // Adding the title - if(strlen($title)) - $body = "## ".html_entity_decode($title)."\n\n".$body; + // convert to markdown - if($item['attach']) { - $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER); - if(cnt) { - $body .= "\n" . t('Attachments:') . "\n"; - foreach($matches as $mtch) { - $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n"; + // Adding the title + if(strlen($title)) + $body = "## ".html_entity_decode($title)."\n\n".$body; + + if($item['attach']) { + $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER); + if(cnt) { + $body .= "\n" . t('Attachments:') . "\n"; + foreach($matches as $mtch) { + $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n"; + } } } } |