From 210200d3308269986141571d633121518ec90d4c Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 6 Nov 2022 20:02:43 +0000 Subject: [PATCH] Use different parser modes for Mastodon and Twitter-API --- src/Content/Text/BBCode.php | 35 ++++++++++----------- src/Content/Text/Plaintext.php | 2 +- src/Factory/Api/Twitter/DirectMessage.php | 6 ++-- src/Factory/Api/Twitter/Status.php | 4 +-- src/Model/Event.php | 2 +- src/Module/Api/Friendica/Profile/Show.php | 2 +- src/Object/Api/Mastodon/ScheduledStatus.php | 2 +- src/Object/Api/Mastodon/Status.php | 2 +- 8 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index a9c137b6a0..9a13e3f097 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -55,15 +55,16 @@ class BBCode // Update this value to the current date whenever changes are made to BBCode::convert const VERSION = '2021-07-28'; - const INTERNAL = 0; - const EXTERNAL = 1; - const API = 2; - const DIASPORA = 3; - const CONNECTORS = 4; - const OSTATUS = 7; - const TWITTER = 8; - const BACKLINK = 8; - const ACTIVITYPUB = 9; + const INTERNAL = 0; + const EXTERNAL = 1; + const MASTODON_API = 2; + const DIASPORA = 3; + const CONNECTORS = 4; + const TWITTER_API = 5; + const OSTATUS = 7; + const TWITTER = 8; + const BACKLINK = 8; + const ACTIVITYPUB = 9; const TOP_ANCHOR = '
'; const BOTTOM_ANCHOR = '
'; @@ -473,7 +474,7 @@ class BBCode private static function proxyUrl(string $image, int $simplehtml = self::INTERNAL, int $uriid = 0, string $size = ''): string { // Only send proxied pictures to API and for internal display - if (!in_array($simplehtml, [self::INTERNAL, self::API])) { + if (!in_array($simplehtml, [self::INTERNAL, self::MASTODON_API, self::TWITTER_API])) { return $image; } elseif ($uriid > 0) { return Post\Link::getByLink($uriid, $image, $size); @@ -1190,7 +1191,8 @@ class BBCode $mention = $attributes['author'] . ' (' . ($author_contact['addr'] ?? '') . ')'; switch ($simplehtml) { - case self::API: + case self::MASTODON_API: + case self::TWITTER_API: $text = ($is_quote_share? '
' : '') . '' . html_entity_decode('♲', ENT_QUOTES, 'UTF-8') . ' ' . $author_contact['addr'] . ":
\n" . '
' . $content . '
'; @@ -1634,7 +1636,7 @@ class BBCode /// @todo Have a closer look at the different html modes // Handle attached links or videos - if (in_array($simple_html, [self::API, self::ACTIVITYPUB])) { + if (in_array($simple_html, [self::MASTODON_API, self::TWITTER_API, self::ACTIVITYPUB])) { $text = self::removeAttachment($text); } elseif (!in_array($simple_html, [self::INTERNAL, self::EXTERNAL, self::CONNECTORS])) { $text = self::removeAttachment($text, true); @@ -1971,14 +1973,11 @@ class BBCode $text = preg_replace("/([#])\[url\=(.*?)\](.*?)\[\/url\]/ism", '', $text); - } elseif (in_array($simple_html, [self::INTERNAL, self::EXTERNAL])) { + } elseif (in_array($simple_html, [self::INTERNAL, self::EXTERNAL, self::TWITTER_API])) { $text = preg_replace("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $text); - $text = preg_replace("/([#])\[url\=(.*?)\](.*?)\[\/url\]/ism", - '', - $text); - } elseif ($simple_html == self::API) { + } elseif ($simple_html == self::MASTODON_API) { $text = preg_replace("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $text); @@ -1990,7 +1989,7 @@ class BBCode } if (!$for_plaintext) { - if (in_array($simple_html, [self::OSTATUS, self::API, self::ACTIVITYPUB])) { + if (in_array($simple_html, [self::OSTATUS, self::MASTODON_API, self::TWITTER_API, self::ACTIVITYPUB])) { $text = preg_replace_callback("/\[url\](.*?)\[\/url\]/ism", 'self::convertUrlForActivityPubCallback', $text); $text = preg_replace_callback("/\[url\=(.*?)\](.*?)\[\/url\]/ism", 'self::convertUrlForActivityPubCallback', $text); } diff --git a/src/Content/Text/Plaintext.php b/src/Content/Text/Plaintext.php index 6e8d0daff3..035739f9fb 100644 --- a/src/Content/Text/Plaintext.php +++ b/src/Content/Text/Plaintext.php @@ -116,7 +116,7 @@ class Plaintext * @see \Friendica\Content\Text\BBCode::getAttachedData * */ - public static function getPost($item, $limit = 0, $includedlinks = false, $htmlmode = BBCode::API, $target_network = '') + public static function getPost($item, $limit = 0, $includedlinks = false, $htmlmode = BBCode::MASTODON_API, $target_network = '') { // Remove hashtags $URLSearchString = '^\[\]'; diff --git a/src/Factory/Api/Twitter/DirectMessage.php b/src/Factory/Api/Twitter/DirectMessage.php index 2599e557f0..4646e4097f 100644 --- a/src/Factory/Api/Twitter/DirectMessage.php +++ b/src/Factory/Api/Twitter/DirectMessage.php @@ -65,13 +65,13 @@ class DirectMessage extends BaseFactory if (!empty($text_mode)) { $title = $mail['title']; if ($text_mode == 'html') { - $text = BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::API); + $text = BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::TWITTER_API); } elseif ($text_mode == 'plain') { - $text = HTML::toPlaintext(BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::API), 0); + $text = HTML::toPlaintext(BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::TWITTER_API), 0); } } else { $title = ''; - $text = $mail['title'] . "\n" . HTML::toPlaintext(BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::API), 0); + $text = $mail['title'] . "\n" . HTML::toPlaintext(BBCode::convertForUriId($mail['uri-id'], $mail['body'], BBCode::TWITTER_API), 0); } $pcid = Contact::getPublicIdByUserId($uid); diff --git a/src/Factory/Api/Twitter/Status.php b/src/Factory/Api/Twitter/Status.php index a336c10be2..e883515889 100644 --- a/src/Factory/Api/Twitter/Status.php +++ b/src/Factory/Api/Twitter/Status.php @@ -143,12 +143,12 @@ class Status extends BaseFactory $title = sprintf("[h4]%s[/h4]\n", $item['title']); } - $statusnetHtml = BBCode::convertForUriId($item['uri-id'], BBCode::setMentionsToNicknames($title . ($item['raw-body'] ?? $item['body'])), BBCode::API); + $statusnetHtml = BBCode::convertForUriId($item['uri-id'], BBCode::setMentionsToNicknames($title . ($item['raw-body'] ?? $item['body'])), BBCode::TWITTER_API); $friendicaHtml = BBCode::convertForUriId($item['uri-id'], $title . $item['body'], BBCode::EXTERNAL); $text .= Post\Media::addAttachmentsToBody($item['uri-id'], $this->contentItem->addSharedPost($item)); - $text = trim(HTML::toPlaintext(BBCode::convertForUriId($item['uri-id'], $text, BBCode::API), 0)); + $text = trim(HTML::toPlaintext(BBCode::convertForUriId($item['uri-id'], $text, BBCode::TWITTER_API), 0)); $geo = []; diff --git a/src/Model/Event.php b/src/Model/Event.php index 9a75152724..e2235fa664 100644 --- a/src/Model/Event.php +++ b/src/Model/Event.php @@ -616,7 +616,7 @@ class Event $title = BBCode::convertForUriId($event['uri-id'], Strings::escapeHtml($event['summary'])); if (!$title) { - list($title, $_trash) = explode(" $profileField->label, - 'value' => BBCode::convert($profileField->value, false, BBCode::API), + 'value' => BBCode::convert($profileField->value, false, BBCode::TWITTER_API), ]; } diff --git a/src/Object/Api/Mastodon/ScheduledStatus.php b/src/Object/Api/Mastodon/ScheduledStatus.php index 759cd6e4e0..5b09f66c44 100644 --- a/src/Object/Api/Mastodon/ScheduledStatus.php +++ b/src/Object/Api/Mastodon/ScheduledStatus.php @@ -67,7 +67,7 @@ class ScheduledStatus extends BaseDataTransferObject $this->scheduled_at = DateTimeFormat::utc($delayed_post['delayed'], DateTimeFormat::JSON); $this->params = [ - 'text' => BBCode::convert(BBCode::setMentionsToNicknames($parameters['item']['body'] ?? ''), false, BBCode::API), + 'text' => BBCode::convert(BBCode::setMentionsToNicknames($parameters['item']['body'] ?? ''), false, BBCode::MASTODON_API), 'media_ids' => $media_ids, 'sensitive' => null, 'spoiler_text' => $parameters['item']['title'] ?? '', diff --git a/src/Object/Api/Mastodon/Status.php b/src/Object/Api/Mastodon/Status.php index 8ba99ebfa5..2889388558 100644 --- a/src/Object/Api/Mastodon/Status.php +++ b/src/Object/Api/Mastodon/Status.php @@ -132,7 +132,7 @@ class Status extends BaseDataTransferObject $this->muted = $userAttributes->muted; $this->bookmarked = $userAttributes->bookmarked; $this->pinned = $userAttributes->pinned; - $this->content = BBCode::convertForUriId($item['uri-id'], BBCode::setMentionsToNicknames($item['raw-body'] ?? $item['body']), BBCode::API); + $this->content = BBCode::convertForUriId($item['uri-id'], BBCode::setMentionsToNicknames($item['raw-body'] ?? $item['body']), BBCode::MASTODON_API); $this->reblog = $reblog; $this->application = $application->toArray(); $this->account = $account->toArray();