return $match[1] . '[url=' . $data['url'] . ']' . $data['nick'] . '[/url]';
}
+ /**
+ * Replace mention links
+ *
+ * @param string $body HTML/BBCode
+ * @return string Body with replaced mentions
+ */
+ public static function setMentionsToAddr(string $body): string
+ {
+ DI::profiler()->startRecording('rendering');
+ $regexp = "/([@!])\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
+ $body = preg_replace_callback($regexp, [self::class, 'mentionToAddrCallback'], $body);
+ DI::profiler()->stopRecording();
+ return $body;
+ }
+
+ /**
+ * Callback function to replace a Friendica style mention in a mention with the addr
+ *
+ * @param array $match Matching values for the callback
+ * @return string Replaced mention or empty string
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ */
+ private static function mentionToAddrCallback(array $match): string
+ {
+ if (empty($match[2])) {
+ return '';
+ }
+
+ $data = Contact::getByURL($match[2], false, ['url', 'nick', 'addr']);
+ if (empty($data['nick'])) {
+ return $match[0];
+ }
+
+ return $match[1] . ($data['addr'] ?: $data['nick']);
+ }
+
/**
* Normalize links to Youtube and Vimeo to a unified format.
*
*/
public function createFromUriId(int $uriId, int $uid): \Friendica\Object\Api\Mastodon\StatusSource
{
- $post = Post::selectOriginal(['uri-id', 'raw-body', 'body', 'title'], ['uri-id' => $uriId, 'uid' => [0, $uid]]);
+ $post = Post::selectOriginal(['uri-id', 'raw-body', 'body', 'title', 'content-warning'], ['uri-id' => $uriId, 'uid' => [0, $uid]]);
- $spoiler_text = $post['title'] ?: BBCode::toPlaintext(BBCode::getAbstract($post['body'], Protocol::ACTIVITYPUB));
- $body = BBCode::toMarkdown(Post\Media::removeFromEndOfBody($post['body']));
+ $spoiler_text = $post['title'] ?: $post['content-warning'] ?: BBCode::toPlaintext(BBCode::getAbstract($post['body'], Protocol::ACTIVITYPUB));
+
+ $body = Post\Media::removeFromEndOfBody($post['body']);
+ $body = Post\Media::addHTMLLinkToBody($uriId, $body);
+ $body = BBCode::setMentionsToAddr($body);
+ $body = BBCode::toPlaintext($body);
return new \Friendica\Object\Api\Mastodon\StatusSource($post['uri-id'], $body, $spoiler_text);
}
$values->{$marker['timeline']} = [
'last_read_id' => $marker['last_read_id'],
'version' => $marker['version'],
- 'updated_at' => $marker['updated_at']
+ 'updated_at' => DateTimeFormat::utc($marker['updated_at'], DateTimeFormat::JSON)
];
}
return $values;