]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #7841 from annando/ap-link
authorHypolite Petovan <hypolite@mrpetovan.com>
Sun, 17 Nov 2019 19:55:51 +0000 (14:55 -0500)
committerGitHub <noreply@github.com>
Sun, 17 Nov 2019 19:55:51 +0000 (14:55 -0500)
AP: Remove the link description from the "rich html" and adds it to the attachment

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..8fff3fec212c63fcd73f43041e20ce4d32387e5e 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) {
@@ -1272,6 +1300,7 @@ class Transmitter
 
                $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"]);