X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fbb2diaspora.php;h=f18a0f3c276399cea0910a0e80df320577b85b03;hb=4931ecafbb2bd3cd18a44d3a366c1051f64a08e0;hp=842dbf0b1cf4595212a5c363f790867a0689cd7c;hpb=8ec5b06e0440302cef9f6bc2f35730fca5a9030e;p=friendica.git diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index 842dbf0b1c..f18a0f3c27 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -7,6 +7,27 @@ require_once("include/html2bbcode.php"); require_once("include/bbcode.php"); require_once("library/html-to-markdown/HTML_To_Markdown.php"); +/** + * @brief Callback function to replace a Diaspora style mention in a mention for Friendica + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ +function diaspora_mention2bb($match) { + if ($match[2] == '') { + return; + } + + $data = get_contact_details_by_addr($match[2]); + + $name = $match[1]; + + if ($name == '') { + $name = $data['name']; + } + + return '@[url='.$data['url'].']'.$name.'[/url]'; +} // we don't want to support a bbcode specific markdown interpreter // and the markdown library we have is pretty good, but provides HTML output. @@ -33,7 +54,8 @@ function diaspora2bb($s) { $s = Markdown($s); - $s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/', '@[url=https://$3/u/$2]$1[/url]', $s); + $regexp = "/@\{(?:([^\}]+?); )?([^\} ]+)\}/"; + $s = preg_replace_callback($regexp, 'diaspora_mention2bb', $s); $s = str_replace('#', '#', $s); @@ -69,6 +91,28 @@ function diaspora2bb($s) { return $s; } +/** + * @brief Callback function to replace a Friendica style mention in a mention for Diaspora + * + * @param array $match Matching values for the callback + * @return string Replaced mention + */ +function diaspora_mentions($match) { + + $contact = get_contact_details_by_url($match[3]); + + if (!isset($contact['addr'])) { + $contact = Probe::uri($match[3]); + } + + if (!isset($contact['addr'])) { + return $match[0]; + } + + $mention = '@{'.$match[2].'; '.$contact['addr'].'}'; + return $mention; +} + function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { $a = get_app(); @@ -108,8 +152,8 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { } else $Text = bbcode($Text, $preserve_nl, false, 4); - // mask some special HTML chars from conversation to markdown - $Text = str_replace(array('<','>','&'),array('&_lt_;','&_gt_;','&_amp_;'),$Text); + // mask some special HTML chars from conversation to markdown + $Text = str_replace(array('<','>','&'),array('&_lt_;','&_gt_;','&_amp_;'),$Text); // If a link is followed by a quote then there should be a newline before it // Maybe we should make this newline at every time before a quote. @@ -120,8 +164,8 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // Now convert HTML to Markdown $Text = new HTML_To_Markdown($Text); - // unmask the special chars back to HTML - $Text = str_replace(array('&_lt_;','&_gt_;','&_amp_;'),array('<','>','&'),$Text); + // unmask the special chars back to HTML + $Text = str_replace(array('&_lt_;','&_gt_;','&_amp_;'),array('<','>','&'),$Text); $a->save_timestamp($stamp1, "parser"); @@ -132,6 +176,11 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { // the Diaspora signature verification and cause the item to disappear $Text = trim($Text); + if ($fordiaspora) { + $URLSearchString = "^\[\]"; + $Text = preg_replace_callback("/([@]\[(.*?)\])\(([$URLSearchString]*?)\)/ism", 'diaspora_mentions', $Text); + } + call_hooks('bb2diaspora',$Text); return $Text;