diff --git a/include/api.php b/include/api.php index e69fefa27..87cc33b5a 100644 --- a/include/api.php +++ b/include/api.php @@ -2046,7 +2046,7 @@ function api_statuses_repeat($type) $pos = strpos($item['body'], "[share"); $post = substr($item['body'], $pos); } else { - $post = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['guid'], $item['created'], $item['plink']); + $post = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid']); if (!empty($item['title'])) { $post .= '[h3]' . $item['title'] . "[/h3]\n"; diff --git a/mod/share.php b/mod/share.php index fe4b7bfe7..a8ac3bd8b 100644 --- a/mod/share.php +++ b/mod/share.php @@ -43,7 +43,7 @@ function share_init(App $a) { $pos = strpos($item['body'], "[share"); $o = substr($item['body'], $pos); } else { - $o = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['guid'], $item['created'], $item['plink']); + $o = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], $item['plink'], $item['created'], $item['guid']); if ($item['title']) { $o .= '[h3]'.$item['title'].'[/h3]'."\n"; diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index ba5bde045..caed2fb89 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -978,7 +978,7 @@ class BBCode function ($match) use ($callback) { $attribute_string = $match[2]; $attributes = []; - foreach (['author', 'profile', 'avatar', 'link', 'posted'] as $field) { + foreach (['author', 'profile', 'avatar', 'link', 'posted', 'guid'] as $field) { preg_match("/$field=(['\"])(.+?)\\1/ism", $attribute_string, $matches); $attributes[$field] = html_entity_decode($matches[2] ?? '', ENT_QUOTES, 'UTF-8'); } @@ -1088,6 +1088,7 @@ class BBCode '$link' => $attributes['link'], '$link_title' => DI::l10n()->t('link to source'), '$posted' => $attributes['posted'], + '$guid' => $attributes['guid'], '$network_name' => ContactSelector::networkToName($contact['network'], $attributes['profile']), '$network_icon' => ContactSelector::networkToIcon($contact['network'], $attributes['profile']), '$content' => self::setMentions(trim($content), 0, $contact['network']), @@ -2229,30 +2230,28 @@ class BBCode } /** - * @param $author - * @param $profile - * @param $avatar - * @param $guid - * @param $posted - * @param $link + * @param string $author Author display name + * @param string $profile Author profile URL + * @param string $avatar Author profile picture URL + * @param string $link Post source URL + * @param string $posted Post created date + * @param string|null $guid Post guid (if any) * @return string * @TODO Rewrite to handle over whole record array */ - public static function getShareOpeningTag($author, $profile, $avatar, $guid, $posted, $link) + public static function getShareOpeningTag(string $author, string $profile, string $avatar, string $link, string $posted, string $guid = null) { - $header = "[share author='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $author). - "' profile='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $profile). - "' avatar='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $avatar); + $header = "[share author='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $author) . + "' profile='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $profile) . + "' avatar='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $avatar) . + "' link='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $link) . + "' posted='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $posted); if ($guid) { $header .= "' guid='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $guid); } - if ($posted) { - $header .= "' posted='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $posted); - } - - $header .= "' link='" . str_replace(["'", "[", "]"], ["'", "[", "]"], $link)."']"; + $header .= "']"; return $header; } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index dfe7c77df..e7a16f052 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -864,7 +864,7 @@ class Transmitter // Disguise forum posts as reshares. Will later be converted to a real announce $item['body'] = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], - $item['guid'], $item['created'], $item['plink']) . $item['body'] . '[/share]'; + $item['plink'], $item['created'], $item['guid']) . $item['body'] . '[/share]'; } } diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 3833aae23..7f4690879 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -2799,9 +2799,9 @@ class Diaspora $original_item["author-name"], $original_item["author-link"], $original_item["author-avatar"], - $original_item["guid"], + $orig_url, $original_item["created"], - $orig_url + $original_item["guid"] ); if (!empty($original_item['title'])) { @@ -3677,7 +3677,7 @@ class Diaspora if ($item['author-link'] != $item['owner-link']) { require_once 'mod/share.php'; $body = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'], - "", $item['created'], $item['plink']) . $body . '[/share]'; + $item['plink'], $item['created']) . $body . '[/share]'; } // convert to markdown diff --git a/tests/datasets/api.fixture.php b/tests/datasets/api.fixture.php index 8bdb86892..0ff9a4a21 100644 --- a/tests/datasets/api.fixture.php +++ b/tests/datasets/api.fixture.php @@ -192,6 +192,8 @@ return [ 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '', + 'guid' => '1', + 'plink' => 'http://localhost/display/1', ], [ 'id' => 2, @@ -209,6 +211,8 @@ return [ 'wall' => 1, 'starred' => 0, 'origin' => 1, + 'guid' => '2', + 'plink' => 'http://localhost/display/2', ], [ @@ -227,6 +231,8 @@ return [ 'wall' => 1, 'starred' => 0, 'origin' => 1, + 'guid' => '3', + 'plink' => 'http://localhost/display/3', ], [ 'id' => 4, @@ -244,6 +250,8 @@ return [ 'wall' => 1, 'starred' => 0, 'origin' => 1, + 'guid' => '4', + 'plink' => 'http://localhost/display/4', ], [ @@ -266,6 +274,8 @@ return [ 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '', + 'guid' => '5', + 'plink' => 'http://localhost/display/5', ], [ 'id' => 6, @@ -283,6 +293,8 @@ return [ 'wall' => 1, 'starred' => 0, 'origin' => 1, + 'guid' => '6', + 'plink' => 'http://localhost/display/6', ], ], 'notify' => [ diff --git a/view/theme/frio/templates/shared_content.tpl b/view/theme/frio/templates/shared_content.tpl index a4f47e618..f7b210bb8 100644 --- a/view/theme/frio/templates/shared_content.tpl +++ b/view/theme/frio/templates/shared_content.tpl @@ -18,7 +18,15 @@ {{/if}} -
{{$posted}}
+
+ {{if $guid}} + + {{/if}} + {{$posted}} + {{if $guid}} + + {{/if}} +
{{$content nofilter}}