]> git.mxchange.org Git - friendica.git/commitdiff
Use nickname based mentions for AP
authorMichael <heluecht@pirati.ca>
Fri, 19 Oct 2018 05:27:54 +0000 (05:27 +0000)
committerMichael <heluecht@pirati.ca>
Fri, 19 Oct 2018 05:27:54 +0000 (05:27 +0000)
src/Protocol/ActivityPub/Transmitter.php

index 7f22e8386b88c80130b5e15432edb522b29405af..2a930fcc6f337ea8e5a2a7557aaefc5fbf8fe739 100644 (file)
@@ -743,6 +743,26 @@ class Transmitter
                return $attachments;
        }
 
+        /**
+        * @brief Callback function to replace a Friendica style mention in a mention that is used on AP
+        *
+        * @param array $match Matching values for the callback
+        * @return string Replaced mention
+        */
+       private static function MentionCallback($match)
+       {
+               if (empty($match[1])) {
+                       return;
+               }
+
+               $data = Contact::getDetailsByURL($match[1]);
+               if (empty($data) || empty($data['nick'])) {
+                       return;
+               }
+
+               return '@[url=' . $data['url'] . ']' . $data['nick'] . '[/url]';
+       }
+
        /**
         * Remove image elements and replaces them with links to the image
         *
@@ -851,6 +871,9 @@ class Transmitter
                        $body = self::removePictures($body);
                }
 
+               $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
+               $body = preg_replace_callback($regexp, ['self', 'MentionCallback'], $body);
+
                $data['content'] = BBCode::convert($body, false, 7);
                $data['source'] = ['content' => $item['body'], 'mediaType' => "text/bbcode"];