]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Merge pull request #9206 from annando/global-direction
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index 7c40105e20a385def29ddc6076f83548500af177..a239ae7a1ac964f2b4b588501fc57a067a71e656 100644 (file)
@@ -206,9 +206,6 @@ class Processor
                } else {
                        $item['gravity'] = GRAVITY_COMMENT;
                        $item['object-type'] = Activity\ObjectType::COMMENT;
-
-                       // Ensure that the comment reaches all receivers of the referring post
-                       $activity['receiver'] = self::addReceivers($activity);
                }
 
                if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) {
@@ -226,9 +223,9 @@ class Processor
 
                $item['network'] = Protocol::ACTIVITYPUB;
                $item['author-link'] = $activity['author'];
-               $item['author-id'] = Contact::getIdForURL($activity['author'], 0, false);
+               $item['author-id'] = Contact::getIdForURL($activity['author']);
                $item['owner-link'] = $activity['actor'];
-               $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, false);
+               $item['owner-id'] = Contact::getIdForURL($activity['actor']);
 
                if (in_array(0, $activity['receiver']) && !empty($activity['unlisted'])) {
                        $item['private'] = Item::UNLISTED;
@@ -330,35 +327,6 @@ class Processor
                }
        }
 
-       /**
-        * Add users to the receiver list of the given public activity.
-        * This is used to ensure that the activity will be stored in every thread.
-        *
-        * @param array $activity Activity array
-        * @return array Modified receiver list
-        */
-       private static function addReceivers(array $activity)
-       {
-               if (!in_array(0, $activity['receiver'])) {
-                       // Private activities will not be modified
-                       return $activity['receiver'];
-               }
-
-               // Add all owners of the referring item to the receivers
-               $original = $receivers = $activity['receiver'];
-               $items = Item::select(['uid'], ['uri' => $activity['object_id']]);
-               while ($item = DBA::fetch($items)) {
-                       $receivers['uid:' . $item['uid']] = $item['uid'];
-               }
-               DBA::close($items);
-
-               if (count($original) != count($receivers)) {
-                       Logger::info('Improved data', ['id' => $activity['id'], 'object' => $activity['object_id'], 'original' => $original, 'improved' => $receivers]);
-               }
-
-               return $receivers;
-       }
-
        /**
         * Prepare the item array for an activity
         *
@@ -377,8 +345,6 @@ class Processor
 
                $item['diaspora_signed_text'] = $activity['diaspora:like'] ?? '';
 
-               $activity['receiver'] = self::addReceivers($activity);
-
                self::postItem($activity, $item);
        }
 
@@ -527,14 +493,41 @@ class Processor
 
                        $item['uid'] = $receiver;
 
+                       $type = $activity['reception_type'][$receiver] ?? Receiver::TARGET_UNKNOWN;
+                       switch($type) {
+                               case Receiver::TARGET_TO:
+                                       $item['post-type'] = Item::PT_TO;
+                                       break;
+                               case Receiver::TARGET_CC:
+                                       $item['post-type'] = Item::PT_CC;
+                                       break;
+                               case Receiver::TARGET_BTO:
+                                       $item['post-type'] = Item::PT_BTO;
+                                       break;
+                               case Receiver::TARGET_BCC:
+                                       $item['post-type'] = Item::PT_BCC;
+                                       break;
+                               case Receiver::TARGET_FOLLOWER:
+                                       $item['post-type'] = Item::PT_FOLLOWER;
+                                       break;
+                               case Receiver::TARGET_ANSWER:
+                                       $item['post-type'] = Item::PT_COMMENT;
+                                       break;
+                               case Receiver::TARGET_GLOBAL:
+                                       $item['post-type'] = Item::PT_GLOBAL;
+                                       break;
+                               default:
+                                       $item['post-type'] = Item::PT_ARTICLE;
+                       }
+
                        if ($item['isForum'] ?? false) {
-                               $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver, false);
+                               $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver);
                        } else {
-                               $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver, false);
+                               $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver);
                        }
 
                        if (($receiver != 0) && empty($item['contact-id'])) {
-                               $item['contact-id'] = Contact::getIdForURL($activity['author'], 0, false);
+                               $item['contact-id'] = Contact::getIdForURL($activity['author']);
                        }
 
                        if (!empty($activity['directmessage'])) {
@@ -752,7 +745,7 @@ class Processor
 
                $ldactivity['thread-completion'] = true;
 
-               ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity));
+               ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, [$actor]);
 
                Logger::notice('Activity had been fetched and processed.', ['url' => $url, 'object' => $activity['id']]);
 
@@ -774,6 +767,9 @@ class Processor
                }
 
                $owner = User::getOwnerDataById($uid);
+               if (empty($owner)) {
+                       return;
+               }
 
                $cid = Contact::getIdForURL($activity['actor'], $uid);
                if (!empty($cid)) {
@@ -822,7 +818,7 @@ class Processor
                }
 
                Logger::info('Updating profile', ['object' => $activity['object_id']]);
-               Contact::updateFromProbeByURL($activity['object_id'], true);
+               Contact::updateFromProbeByURL($activity['object_id']);
        }
 
        /**
@@ -956,6 +952,9 @@ class Processor
                }
 
                $owner = User::getOwnerDataById($uid);
+               if (empty($owner)) {
+                       return;
+               }
 
                $cid = Contact::getIdForURL($activity['actor'], $uid);
                if (empty($cid)) {