]> git.mxchange.org Git - friendica.git/blobdiff - src/Content/Text/BBCode.php
Merge pull request #11402 from annando/featured-endpoint
[friendica.git] / src / Content / Text / BBCode.php
index a1d65add5d008375749f3ba4776e523751ceed45..c9a1bfe0521ec58fe56352c149989fce3895094e 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -39,6 +39,7 @@ use Friendica\Model\Event;
 use Friendica\Model\Photo;
 use Friendica\Model\Post;
 use Friendica\Model\Tag;
+use Friendica\Network\HTTPClient\Client\HttpClientAccept;
 use Friendica\Network\HTTPClient\Client\HttpClientOptions;
 use Friendica\Object\Image;
 use Friendica\Protocol\Activity;
@@ -501,11 +502,13 @@ class BBCode
                                        continue;
                                }
 
-                               $curlResult = DI::httpClient()->get($mtch[1]);
+                               $curlResult = DI::httpClient()->get($mtch[1], HttpClientAccept::IMAGE);
                                if (!$curlResult->isSuccess()) {
                                        continue;
                                }
 
+                               Logger::debug('Got picture', ['Content-Type' => $curlResult->getHeader('Content-Type'), 'url' => $mtch[1]]);
+
                                $i = $curlResult->getBody();
                                $type = $curlResult->getContentType();
                                $type = Images::getMimeTypeByData($i, $mtch[1], $type);
@@ -1052,7 +1055,7 @@ class BBCode
 
                                $author_contact = Contact::getByURL($attributes['profile'], false, ['id', 'url', 'addr', 'name', 'micro']);
                                $author_contact['url'] = ($author_contact['url'] ?? $attributes['profile']);
-                               $author_contact['addr'] = ($author_contact['addr'] ?? '') ?: Protocol::getAddrFromProfileUrl($attributes['profile']);
+                               $author_contact['addr'] = ($author_contact['addr'] ?? '');
 
                                $attributes['author']   = ($author_contact['name']  ?? '') ?: $attributes['author'];
                                $attributes['avatar']   = ($author_contact['micro'] ?? '') ?: $attributes['avatar'];
@@ -1096,7 +1099,7 @@ class BBCode
                                        $attributes[$field] = html_entity_decode($matches[2] ?? '', ENT_QUOTES, 'UTF-8');
                                }
 
-                               $img_str = '<img src="' . 
+                               $img_str = '<img src="' .
                                self::proxyUrl($match[2], $simplehtml, $uriid) . '"';
                                foreach ($attributes as $key => $value) {
                                        if (!empty($value)) {
@@ -1129,13 +1132,13 @@ class BBCode
        private static function convertShareCallback(array $attributes, array $author_contact, $content, $is_quote_share, $simplehtml)
        {
                DI::profiler()->startRecording('rendering');
-               $mention = Protocol::formatMention($attributes['profile'], $attributes['author']);
+               $mention = $attributes['author'] . ' (' . ($author_contact['addr'] ?? '') . ')';
 
                switch ($simplehtml) {
                        case self::API:
                                $text = ($is_quote_share? '<br>' : '') .
-                               '<b><a href="' . $attributes['link'] . '">' . html_entity_decode('&#x2672; ', ENT_QUOTES, 'UTF-8') . ' ' . $author_contact['addr'] . "</a>:</b><br>\n" .
-                               '<blockquote class="shared_content">' . $content . '</blockquote>';
+                               '<b><a href="' . $attributes['link'] . '">' . html_entity_decode('&#x2672;', ENT_QUOTES, 'UTF-8') . ' ' . $author_contact['addr'] . "</a>:</b><br>\n" .
+                               '<blockquote class="shared_content" dir="auto">' . $content . '</blockquote>';
                                break;
                        case self::DIASPORA:
                                if (stripos(Strings::normaliseLink($attributes['link']), 'http://twitter.com/') === 0) {
@@ -1160,7 +1163,7 @@ class BBCode
                                $headline .= DI::l10n()->t('<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a> %3$s', $attributes['link'], $mention, $attributes['posted']);
                                $headline .= ':</b></p>' . "\n";
 
-                               $text = ($is_quote_share? '<hr />' : '') . $headline . '<blockquote class="shared_content">' . trim($content) . '</blockquote>' . "\n";
+                               $text = ($is_quote_share? '<hr />' : '') . $headline . '<blockquote class="shared_content" dir="auto">' . trim($content) . '</blockquote>' . "\n";
 
                                break;
                        case self::OSTATUS:
@@ -1214,7 +1217,7 @@ class BBCode
                                $text = "[url=" . $match[2] . ']' . $match[2] . "[/url]";
 
                                // if its not a picture then look if its a page that contains a picture link
-                               $body = DI::httpClient()->fetch($match[1]);
+                               $body = DI::httpClient()->fetch($match[1], HttpClientAccept::HTML, 0);
                                if (empty($body)) {
                                        DI::cache()->set($cache_key, $text);
                                        return $text;
@@ -1290,7 +1293,7 @@ class BBCode
                        }
 
                        // if its not a picture then look if its a page that contains a picture link
-                       $body = DI::httpClient()->fetch($match[1]);
+                       $body = DI::httpClient()->fetch($match[1], HttpClientAccept::HTML, 0);
                        if (empty($body)) {
                                DI::cache()->set($cache_key, $text);
                                return $text;
@@ -1780,7 +1783,7 @@ class BBCode
 
                                $text = preg_replace("/\[img\](.*?)\[\/img\]/ism", '<img src="$1" alt="' . DI::l10n()->t('Image/photo') . '" />', $text);
                                $text = preg_replace("/\[zmg\](.*?)\[\/zmg\]/ism", '<img src="$1" alt="' . DI::l10n()->t('Image/photo') . '" />', $text);
-       
+
                                $text = self::convertImages($text, $simple_html, $uriid);
 
                                $text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '<br><img src="' .DI::baseUrl() . '/images/lock_icon.gif" alt="' . DI::l10n()->t('Encrypted content') . '" title="' . DI::l10n()->t('Encrypted content') . '" /><br>', $text);
@@ -1894,7 +1897,7 @@ class BBCode
                                } else {
                                        $text = preg_replace("/([#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '$1$3', $text);
                                }
-                               
+
                                if (!$for_plaintext) {
                                        if (in_array($simple_html, [self::OSTATUS, self::API, self::ACTIVITYPUB])) {
                                                $text = preg_replace_callback("/\[url\](.*?)\[\/url\]/ism", 'self::convertUrlForActivityPubCallback', $text);
@@ -2086,8 +2089,8 @@ class BBCode
        public static function stripAbstract($text)
        {
                DI::profiler()->startRecording('rendering');
-               $text = preg_replace("/[\s|\n]*\[abstract\].*?\[\/abstract\][\s|\n]*/ism", '', $text);
-               $text = preg_replace("/[\s|\n]*\[abstract=.*?\].*?\[\/abstract][\s|\n]*/ism", '', $text);
+               $text = preg_replace("/[\s|\n]*\[abstract\].*?\[\/abstract\][\s|\n]*/ism", ' ', $text);
+               $text = preg_replace("/[\s|\n]*\[abstract=.*?\].*?\[\/abstract][\s|\n]*/ism", ' ', $text);
 
                DI::profiler()->stopRecording();
                return $text;
@@ -2346,7 +2349,7 @@ class BBCode
        }
 
        /**
-        * Replaces mentions in the provided message body for the provided user and network if any
+        * Replaces mentions in the provided message body in BBCode links for the provided user and network if any
         *
         * @param $body
         * @param $profile_uid
@@ -2358,11 +2361,10 @@ class BBCode
        public static function setMentions($body, $profile_uid = 0, $network = '')
        {
                DI::profiler()->startRecording('rendering');
-               self::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) use ($profile_uid, $network) {
+               $body = self::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) use ($profile_uid, $network) {
                        $tags = self::getTags($body);
 
                        $tagged = [];
-                       $inform = '';
 
                        foreach ($tags as $tag) {
                                $tag_type = substr($tag, 0, 1);
@@ -2381,7 +2383,7 @@ class BBCode
                                        }
                                }
 
-                               if (($success = Item::replaceTag($body, $inform, $profile_uid, $tag, $network)) && $success['replaced']) {
+                               if (($success = Item::replaceTag($body, $profile_uid, $tag, $network)) && $success['replaced']) {
                                        $tagged[] = $tag;
                                }
                        }