]> git.mxchange.org Git - friendica.git/commitdiff
AP: Remove the link description from the "rich html" and adds it to the attachment
authorMichael <heluecht@pirati.ca>
Sun, 17 Nov 2019 18:10:12 +0000 (18:10 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 17 Nov 2019 18:10:12 +0000 (18:10 +0000)
src/Content/Text/BBCode.php
src/Protocol/ActivityPub/Transmitter.php

index 167a0539758aa2af5e0e5217e1a4d54aced32c25..cf3eb93714804c0ccb6f0fc0a853c676dc8e6af1 100644 (file)
@@ -385,6 +385,28 @@ class BBCode extends BaseObject
                return $post;
        }
 
+       /**
+        * Remove [attachment] BBCode and replaces it with a regular [url]
+        *
+        * @param string $body
+        *
+        * @return string with replaced body
+        */
+       public static function removeAttachment($body)
+       {
+               return preg_replace_callback("/\[attachment (.*)\](.*?)\[\/attachment\]/ism",
+                       function ($match) {
+                               $attach_data = self::getAttachmentData($match[0]);
+                               if (empty($attach_data['url'])) {
+                                       return $match[0];
+                               } elseif (empty($attach_data['title'])) {
+                                       return '[url]' . $attach_data['url'] . '[/url]';
+                               } else {
+                                       return '[url=' . $attach_data['url'] . ']' . $attach_data['title'] . '[/url]';
+                               }
+               }, $body);
+       }
+
        /**
         * @brief Converts a BBCode text into plaintext
         *
index 545ac22c699b0a668cfe486c7d17f617dd01d123..c2a331e01afd886ce12b588865d02df8aa07f6f4 100644 (file)
@@ -1020,6 +1020,34 @@ class Transmitter
        {
                $attachments = [];
 
+               $attach_data = BBCode::getAttachmentData($item['body']);
+               if (!empty($attach_data['url'])) {
+                       $attachment = ['type' => 'Page',
+                               'mediaType' => 'text/html',
+                               'url' => $attach_data['url']];
+
+                       if (!empty($attach_data['title'])) {
+                               $attachment['name'] = $attach_data['title'];
+                       }
+
+                       if (!empty($attach_data['description'])) {
+                               $attachment['summary'] = $attach_data['description'];
+                       }
+
+                       if (!empty($attach_data['image'])) {
+                               $imgdata = Images::getInfoFromURLCached($attach_data['image']);
+                               if ($imgdata) {
+                                       $attachment['icon'] = ['type' => 'Image',
+                                               'mediaType' => $imgdata['mime'],
+                                               'width' => $imgdata[0],
+                                               'height' => $imgdata[1],
+                                               'url' => $attach_data['image']];
+                               }
+                       }
+
+                       $attachments[] = $attachment;
+               }
+
                $arr = explode('[/attach],', $item['attach']);
                if (count($arr)) {
                        foreach ($arr as $r) {
@@ -1266,12 +1294,12 @@ class Transmitter
                } else {
                        $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
                        $body = preg_replace_callback($regexp, ['self', 'mentionCallback'], $body);
-
                        $data['content'] = BBCode::convert($body, false, 9);
                }
 
                $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
                $richbody = preg_replace_callback($regexp, ['self', 'mentionCallback'], $item['body']);
+               $richbody = BBCode::removeAttachment($richbody);
 
                $data['contentMap']['text/html'] = BBCode::convert($richbody, false);
                $data['contentMap']['text/markdown'] = BBCode::toMarkdown($item["body"]);