]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Transmitter.php
Fix: Mentions in the HTML part of the "contentMap" now are links
[friendica.git] / src / Protocol / ActivityPub / Transmitter.php
index d804d7ca4faa97f74862c87c60069e5ad910e87d..545ac22c699b0a668cfe486c7d17f617dd01d123 100644 (file)
@@ -11,9 +11,6 @@ use Friendica\Content\Text\Plaintext;
 use Friendica\Core\Cache;
 use Friendica\Core\Config;
 use Friendica\Core\Logger;
-use Friendica\Core\System;
-use Friendica\Protocol\Activity;
-use Friendica\Util\HTTPSignature;
 use Friendica\Core\Protocol;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
@@ -22,8 +19,10 @@ use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\Item;
 use Friendica\Model\Profile;
+use Friendica\Model\Photo;
 use Friendica\Model\Term;
 use Friendica\Model\User;
+use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\HTTPSignature;
@@ -1099,19 +1098,34 @@ class Transmitter
        }
 
        /**
-        * Remove image elements and replaces them with links to the image
+        * Remove image elements since they are added as attachment
         *
         * @param string $body
         *
-        * @return string with replaced elements
+        * @return string with removed images
         */
        private static function removePictures($body)
        {
                // Simplify image codes
                $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body);
+               $body = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/ism", '[img]$1[/img]', $body);
+
+               // Now remove local links
+               $body = preg_replace_callback(
+                       '/\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]/Usi',
+                       function ($match) {
+                               // We remove the link when it is a link to a local photo page
+                               if (Photo::isLocalPage($match[1])) {
+                                       return '';
+                               }
+                               // otherwise we just return the link
+                               return '[url]' . $match[1] . '[/url]';
+                       },
+                       $body
+               );
 
-               $body = preg_replace("/\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]/Usi", '[url]$1[/url]', $body);
-               $body = preg_replace("/\[img\]([^\[\]]*)\[\/img\]/Usi", '[url]$1[/url]', $body);
+               // Remove all pictures
+               $body = preg_replace("/\[img\]([^\[\]]*)\[\/img\]/Usi", '', $body);
 
                return $body;
        }
@@ -1256,6 +1270,12 @@ class Transmitter
                        $data['content'] = BBCode::convert($body, false, 9);
                }
 
+               $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
+               $richbody = preg_replace_callback($regexp, ['self', 'mentionCallback'], $item['body']);
+
+               $data['contentMap']['text/html'] = BBCode::convert($richbody, false);
+               $data['contentMap']['text/markdown'] = BBCode::toMarkdown($item["body"]);
+
                $data['source'] = ['content' => $item['body'], 'mediaType' => "text/bbcode"];
 
                if (!empty($item['signed_text']) && ($item['uri'] != $item['thr-parent'])) {