]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Merge branch '2021.03-rc' into copyright-2021
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index 069239c04436fd2a9a82061b7241b5516ad13e3a..e6f3e156690042bd1701c20c9d662b181238c048 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -24,6 +24,7 @@ namespace Friendica\Protocol\ActivityPub;
 use Friendica\Content\PageInfo;
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\HTML;
+use Friendica\Content\Text\Markdown;
 use Friendica\Core\Logger;
 use Friendica\Core\Protocol;
 use Friendica\Database\DBA;
@@ -32,6 +33,7 @@ use Friendica\Model\APContact;
 use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\Event;
+use Friendica\Model\GServer;
 use Friendica\Model\Item;
 use Friendica\Model\ItemURI;
 use Friendica\Model\Mail;
@@ -65,6 +67,26 @@ class Processor
                return $body;
        }
 
+       /**
+        * Convert the language array into a language JSON
+        *
+        * @param array $languages
+        * @return string language JSON
+        */
+       private static function processLanguages(array $languages)
+       {
+               $codes = array_keys($languages);
+               $lang = [];
+               foreach ($codes as $code) {
+                       $lang[$code] = 1;
+               }
+
+               if (empty($lang)) {
+                       return '';
+               }
+
+               return json_encode($lang);
+       }
        /**
         * Replaces emojis in the body
         *
@@ -193,13 +215,13 @@ class Processor
                                                        continue 2;
                                                }
 
-                                               $item['body'] .= "\n[audio]" . $attach['url'] . '[/audio]';
+                                               $item['body'] = '[audio]' . $attach['url'] . "[/audio]\n" . $item['body'];
                                        } elseif ($filetype == 'video') {
                                                if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) {
                                                        continue 2;
                                                }
 
-                                               $item['body'] .= "\n[video]" . $attach['url'] . '[/video]';
+                                               $item['body'] = '[video]' . $attach['url'] . "[/video]\n" . $item['body'];
                                        }
                        }
                }
@@ -346,6 +368,19 @@ class Processor
 
                $item = self::constructAttachList($activity, $item);
 
+               // We received the post via AP, so we set the protocol of the server to AP
+               $contact = Contact::getById($item['author-id'], ['gsid']);
+               if (!empty($contact['gsid'])) {
+                       GServer::setProtocol($contact['gsid'], Post\DeliveryData::ACTIVITYPUB);
+               }
+
+               if ($item['author-id'] != $item['owner-id']) {
+                       $contact = Contact::getById($item['owner-id'], ['gsid']);
+                       if (!empty($contact['gsid'])) {
+                               GServer::setProtocol($contact['gsid'], Post\DeliveryData::ACTIVITYPUB);
+                       }
+               }
+
                return $item;
        }
 
@@ -463,9 +498,21 @@ class Processor
         */
        private static function processContent($activity, $item)
        {
-               $item['title'] = HTML::toBBCode($activity['name']);
+               if (!empty($activity['mediatype']) && ($activity['mediatype'] == 'text/markdown')) {
+                       $item['title'] = Markdown::toBBCode($activity['name']);
+                       $content = Markdown::toBBCode($activity['content']);
+               } elseif (!empty($activity['mediatype']) && ($activity['mediatype'] == 'text/bbcode')) {
+                       $item['title'] = $activity['name'];
+                       $content = $activity['content'];
+               } else {
+                       // By default assume "text/html"
+                       $item['title'] = HTML::toBBCode($activity['name']);
+                       $content = HTML::toBBCode($activity['content']);
+               }
 
-               $content = HTML::toBBCode($activity['content']);
+               if (!empty($activity['languages'])) {
+                       $item['language'] = self::processLanguages($activity['languages']);
+               }
 
                if (!empty($activity['emojis'])) {
                        $content = self::replaceEmojis($content, $activity['emojis']);