]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Collect data about used protocols for delivery
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index a5f6607edcadda62f1d77fd5c7fb797e8955839e..41aed2fe3be883d03e41f8c9a03540b919b134e3 100644 (file)
@@ -142,7 +142,7 @@ class Processor
                }
 
                $item['changed'] = DateTimeFormat::utcNow();
-               $item['edited'] = $activity['updated'];
+               $item['edited'] = DateTimeFormat::utc($activity['updated']);
 
                $item = self::processContent($activity, $item);
                if (empty($item)) {
@@ -370,20 +370,23 @@ class Processor
                $item['private'] = !in_array(0, $activity['receiver']);
                $item['author-link'] = $activity['author'];
                $item['author-id'] = Contact::getIdForURL($activity['author'], 0, true);
+               $item['owner-link'] = $activity['actor'];
+               $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true);
 
-               if (empty($activity['thread-completion'])) {
-                       $item['owner-link'] = $activity['actor'];
-                       $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, true);
-               } else {
-                       Logger::info('Ignoring actor because of thread completion.');
+               if (!empty($activity['thread-completion'])) {
+                       // Store the original actor in the "causer" fields to enable the check for ignored or blocked contacts
+                       $item['causer-link'] = $item['owner-link'];
+                       $item['causer-id'] = $item['owner-id'];
+
+                       Logger::info('Ignoring actor because of thread completion.', ['actor' => $item['owner-link']]);
                        $item['owner-link'] = $item['author-link'];
                        $item['owner-id'] = $item['author-id'];
                }
 
                $item['uri'] = $activity['id'];
 
-               $item['created'] = $activity['published'];
-               $item['edited'] = $activity['updated'];
+               $item['created'] = DateTimeFormat::utc($activity['published']);
+               $item['edited'] = DateTimeFormat::utc($activity['updated']);
                $item['guid'] = $activity['diaspora:guid'];
 
                $item = self::processContent($activity, $item);
@@ -442,8 +445,8 @@ class Processor
         *
         * @param array $activity Activity data
         * @param array $item     item array
+        * @return int|bool New mail table row id or false on error
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
-        * @throws \ImagickException
         */
        private static function postMail($activity, $item)
        {
@@ -497,7 +500,7 @@ class Processor
                }
                $msg['body'] = $item['body'];
 
-                Mail::insert($msg);
+               return Mail::insert($msg);
        }
 
        /**
@@ -567,7 +570,7 @@ class Processor
                        DBA::update('contact', ['hub-verify' => $activity['id'], 'protocol' => Protocol::ACTIVITYPUB], ['id' => $cid]);
                        $contact = DBA::selectFirst('contact', [], ['id' => $cid, 'network' => Protocol::NATIVE_SUPPORT]);
                } else {
-                       $contact = false;
+                       $contact = [];
                }
 
                $item = ['author-id' => Contact::getIdForURL($activity['actor']),
@@ -578,7 +581,11 @@ class Processor
                // Ensure that the contact has got the right network type
                self::switchContact($item['author-id']);
 
-               Contact::addRelationship($owner, $contact, $item, '', false, $note);
+               $result = Contact::addRelationship($owner, $contact, $item, false, $note);
+               if ($result === true) {
+                       ActivityPub\Transmitter::sendContactAccept($item['author-link'], $item['author-id'], $owner['uid']);
+               }
+
                $cid = Contact::getIdForURL($activity['actor'], $uid);
                if (empty($cid)) {
                        return;