]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Merge remote-tracking branch 'upstream/develop' into item-notification
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index dadadecde9af1c97789404cce9d51292a2f64df6..ad1b9d8bdf10490a2f955f04b251dba834e8a3e6 100644 (file)
@@ -4,20 +4,21 @@
  */
 namespace Friendica\Protocol\ActivityPub;
 
-use Friendica\Database\DBA;
 use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\HTML;
 use Friendica\Core\Config;
-use Friendica\Core\PConfig;
 use Friendica\Core\Logger;
+use Friendica\Core\PConfig;
 use Friendica\Core\Protocol;
-use Friendica\Model\Contact;
+use Friendica\Database\DBA;
 use Friendica\Model\APContact;
-use Friendica\Model\Item;
+use Friendica\Model\Contact;
 use Friendica\Model\Event;
+use Friendica\Model\Item;
+use Friendica\Model\Mail;
 use Friendica\Model\Term;
 use Friendica\Model\User;
-use Friendica\Model\Mail;
+use Friendica\Protocol\Activity;
 use Friendica\Protocol\ActivityPub;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\JsonLD;
@@ -75,7 +76,7 @@ class Processor
 
                $tag_text = '';
                foreach ($tags as $tag) {
-                       if (in_array(defaults($tag, 'type', ''), ['Mention', 'Hashtag'])) {
+                       if (in_array($tag['type'] ?? '', ['Mention', 'Hashtag'])) {
                                if (!empty($tag_text)) {
                                        $tag_text .= ',';
                                }
@@ -92,26 +93,29 @@ class Processor
        /**
         * Add attachment data to the item array
         *
-        * @param array   $attachments
+        * @param array   $activity
         * @param array   $item
-        * @param boolean $no_images
         *
         * @return array array
         */
-       private static function constructAttachList($attachments, $item, $no_images)
+       private static function constructAttachList($activity, $item)
        {
-               if (empty($attachments)) {
+               if (empty($activity['attachments'])) {
                        return $item;
                }
 
-               foreach ($attachments as $attach) {
+               foreach ($activity['attachments'] as $attach) {
                        $filetype = strtolower(substr($attach['mediaType'], 0, strpos($attach['mediaType'], '/')));
                        if ($filetype == 'image') {
-                               if ($no_images) {
+                               if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) {
                                        continue;
                                }
 
-                               $item['body'] .= "\n[img]" . $attach['url'] . '[/img]';
+                               if (empty($attach['name'])) {
+                                       $item['body'] .= "\n[img]" . $attach['url'] . '[/img]';
+                               } else {
+                                       $item['body'] .= "\n[img=" . $attach['url'] . ']' . $attach['name'] . '[/img]';
+                               }
                        } else {
                                if (!empty($item["attach"])) {
                                        $item["attach"] .= ',';
@@ -121,7 +125,7 @@ class Processor
                                if (!isset($attach['length'])) {
                                        $attach['length'] = "0";
                                }
-                               $item["attach"] .= '[attach]href="'.$attach['url'].'" length="'.$attach['length'].'" type="'.$attach['mediaType'].'" title="'.defaults($attach, 'name', '').'"[/attach]';
+                               $item["attach"] .= '[attach]href="'.$attach['url'].'" length="'.$attach['length'].'" type="'.$attach['mediaType'].'" title="'.($attach['name'] ?? '') .'"[/attach]';
                        }
                }
 
@@ -163,15 +167,15 @@ class Processor
        public static function createItem($activity)
        {
                $item = [];
-               $item['verb'] = ACTIVITY_POST;
+               $item['verb'] = Activity::POST;
                $item['thr-parent'] = $activity['reply-to-id'];
 
                if ($activity['reply-to-id'] == $activity['id']) {
                        $item['gravity'] = GRAVITY_PARENT;
-                       $item['object-type'] = ACTIVITY_OBJ_NOTE;
+                       $item['object-type'] = Activity\ObjectType::NOTE;
                } else {
                        $item['gravity'] = GRAVITY_COMMENT;
-                       $item['object-type'] = ACTIVITY_OBJ_COMMENT;
+                       $item['object-type'] = Activity\ObjectType::COMMENT;
                }
 
                if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) {
@@ -179,7 +183,7 @@ class Processor
                        self::fetchMissingActivity($activity['reply-to-id'], $activity);
                }
 
-               $item['diaspora_signed_text'] = defaults($activity, 'diaspora:comment', '');
+               $item['diaspora_signed_text'] = $activity['diaspora:comment'] ?? '';
 
                self::postItem($activity, $item);
        }
@@ -250,9 +254,9 @@ class Processor
                $item['verb'] = $verb;
                $item['thr-parent'] = $activity['object_id'];
                $item['gravity'] = GRAVITY_ACTIVITY;
-               $item['object-type'] = ACTIVITY_OBJ_NOTE;
+               $item['object-type'] = Activity\ObjectType::NOTE;
 
-               $item['diaspora_signed_text'] = defaults($activity, 'diaspora:like', '');
+               $item['diaspora_signed_text'] = $activity['diaspora:like'] ?? '';
 
                self::postItem($activity, $item);
        }
@@ -400,9 +404,9 @@ class Processor
                        return;
                }
 
-               $item['plink'] = defaults($activity, 'alternate-url', $item['uri']);
+               $item['plink'] = $activity['alternate-url'] ?? $item['uri'];
 
-               $item = self::constructAttachList($activity['attachments'], $item, !empty($activity['source']));
+               $item = self::constructAttachList($activity, $item);
 
                $stored = false;
 
@@ -411,9 +415,7 @@ class Processor
 
                        if ($isForum) {
                                $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver, true);
-                       }
-
-                       if (empty($item['contact-id'])) {
+                       } else {
                                $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver, true);
                        }
 
@@ -581,8 +583,8 @@ class Processor
                $activity['@context'] = $object['@context'];
                unset($object['@context']);
                $activity['id'] = $object['id'];
-               $activity['to'] = defaults($object, 'to', []);
-               $activity['cc'] = defaults($object, 'cc', []);
+               $activity['to'] = $object['to'] ?? [];
+               $activity['cc'] = $object['cc'] ?? [];
                $activity['actor'] = $actor;
                $activity['object'] = $object;
                $activity['published'] = $published;
@@ -626,7 +628,7 @@ class Processor
                $item = ['author-id' => Contact::getIdForURL($activity['actor']),
                        'author-link' => $activity['actor']];
 
-               $note = Strings::escapeTags(trim(defaults($activity, 'content', '')));
+               $note = Strings::escapeTags(trim($activity['content'] ?? ''));
 
                // Ensure that the contact has got the right network type
                self::switchContact($item['author-id']);
@@ -891,7 +893,7 @@ class Processor
 
                // Extract one prepended mention at a time from the body
                while(preg_match('#^(@\[url=([^\]]+)].*?\[\/url]\s)(.*)#is', $body, $matches)) {
-                       if (!in_array($matches[2], $potential_mentions) ) {
+                       if (!in_array($matches[2], $potential_mentions)) {
                                $kept_mentions[] = $matches[1];
                        }