Browse Source

Merge pull request #3058 from annando/1701-diaspora-thread-reply

Diaspora mentions are now done correctly
pull/3059/head
Tobias Diekershoff 6 years ago committed by GitHub
parent
commit
72a0b8d3be
  1. 35
      include/bb2diaspora.php
  2. 22
      mod/item.php

35
include/bb2diaspora.php

@ -69,6 +69,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 text 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 +130,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 +142,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 +154,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;

22
mod/item.php

@ -95,8 +95,7 @@ function item_post(&$a) {
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
intval($parent)
);
}
elseif ($parent_uri && local_user()) {
} elseif ($parent_uri && local_user()) {
// This is coming from an API source, and we are logged in
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent_uri),
@ -141,16 +140,7 @@ function item_post(&$a) {
$thrparent = q("SELECT `author-link`, `network` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($thr_parent));
if (count($thrparent) AND ($thrparent[0]["network"] === NETWORK_OSTATUS)
AND (normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"]))) {
$parent_contact = null;
$r = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
dbesc(normalise_link($thrparent[0]["author-link"])));
if (dbm::is_result($r)) {
$parent_contact = $r[0];
$parent_contact["thumb"] = $parent_contact["photo"];
$parent_contact["micro"] = $parent_contact["photo"];
unset($parent_contact["id"]);
}
$parent_contact = get_contact_details_by_url($thrparent[0]["author-link"]);
if (!isset($parent_contact["nick"])) {
require_once("include/Scrape.php");
@ -568,12 +558,8 @@ function item_post(&$a) {
* add a statusnet style reply tag if the original post was from there
* and we are replying, and there isn't one already
*/
if($parent AND ($parent_contact['network'] === NETWORK_OSTATUS)) {
if ($parent_contact['id'] != "")
$contact = '@'.$parent_contact['nick'].'+'.$parent_contact['id'];
else
$contact = '@[url='.$parent_contact['url'].']'.$parent_contact['nick'].'[/url]';
if ($parent AND ($parent_contact['network'] == NETWORK_OSTATUS)) {
$contact = '@[url='.$parent_contact['url'].']'.$parent_contact['nick'].'[/url]';
if (!in_array($contact,$tags)) {
$body = $contact.' '.$body;

Loading…
Cancel
Save