]> git.mxchange.org Git - friendica.git/blobdiff - src/Worker/Notifier.php
Remove code parameter from HTTPException constructor
[friendica.git] / src / Worker / Notifier.php
index 4492e3ce92fb65c7aa970e0808f711bab37aaee4..dac3346f95a6adef8d93f10f51185adddf0bf97c 100644 (file)
@@ -154,7 +154,7 @@ class Notifier
                        $parent = $items[0];
 
                        if (!self::isRemovalActivity($cmd, $owner, Protocol::ACTIVITYPUB)) {
-                               $delivery_queue_count += self::activityPubDelivery($cmd, $target_item, $parent, $a->queue['priority'], $a->queue['created']);
+                               $delivery_queue_count += self::activityPubDelivery($cmd, $target_item, $parent, $a->queue['priority'], $a->queue['created'], $owner);
                        }
 
                        $fields = ['network', 'author-id', 'owner-id'];
@@ -207,13 +207,13 @@ class Notifier
                        }
 
                        // Special treatment for forum posts
-                       if (self::isForumPost($target_item, $owner)) {
+                       if (Item::isForumPost($target_item, $owner)) {
                                $relay_to_owner = true;
                                $direct_forum_delivery = true;
                        }
 
                        // Avoid that comments in a forum thread are sent to OStatus
-                       if (self::isForumPost($parent, $owner)) {
+                       if (Item::isForumPost($parent, $owner)) {
                                $direct_forum_delivery = true;
                        }
 
@@ -413,7 +413,7 @@ class Notifier
 
                                // Add the relay to the list, avoid duplicates.
                                // Don't send community posts to the relay. Forum posts via the Diaspora protocol are looking ugly.
-                               if (!$followup && !self::isForumPost($target_item, $owner)) {
+                               if (!$followup && !Item::isForumPost($target_item, $owner)) {
                                        $relay_list = Diaspora::relayList($target_id, $relay_list);
                                }
                        }
@@ -446,7 +446,8 @@ class Notifier
                                        // Ensure that posts with our own protocol arrives before Diaspora posts arrive.
                                        // Situation is that sometimes Friendica servers receive Friendica posts over the Diaspora protocol first.
                                        // The conversion in Markdown reduces the formatting, so these posts should arrive after the Friendica posts.
-                                       if ($rr['network'] == Protocol::DIASPORA) {
+                                       // This is only important for high and medium priority tasks and not for Low priority jobs like deletions.
+                                       if (($rr['network'] == Protocol::DIASPORA) && in_array($a->queue['priority'], [PRIORITY_HIGH, PRIORITY_MEDIUM])) {
                                                $deliver_options = ['priority' => $a->queue['priority'], 'dont_fork' => true];
                                        } else {
                                                $deliver_options = ['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true];
@@ -498,7 +499,6 @@ class Notifier
                }
                DBA::close($delivery_contacts_stmt);
 
-
                $url_recipients = array_filter($url_recipients);
                // send salmon slaps to mentioned remote tags (@foo@example.com) in OStatus posts
                // They are especially used for notifications to OStatus users that don't follow us.
@@ -550,7 +550,7 @@ class Notifier
         */
        private static function isRemovalActivity($cmd, $owner, $network)
        {
-               return ($cmd == Delivery::DELETION) && $owner['account_removed'] && in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DIASPORA]);
+               return ($cmd == Delivery::DELETION) && $owner['account_removed'] && in_array($network, [Protocol::ACTIVITYPUB, Protocol::DIASPORA]);
        }
 
        /**
@@ -598,7 +598,7 @@ class Notifier
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       private static function activityPubDelivery($cmd, array $target_item, array $parent, $priority, $created)
+       private static function activityPubDelivery($cmd, array $target_item, array $parent, $priority, $created, $owner)
        {
                $inboxes = [];
 
@@ -607,6 +607,9 @@ class Notifier
                if ($target_item['origin']) {
                        $inboxes = ActivityPub\Transmitter::fetchTargetInboxes($target_item, $uid);
                        Logger::log('Origin item ' . $target_item['id'] . ' with URL ' . $target_item['uri'] . ' will be distributed.', Logger::DEBUG);
+               } elseif (Item::isForumPost($target_item, $owner)) {
+                       $inboxes = ActivityPub\Transmitter::fetchTargetInboxes($target_item, $uid, false, 0, true);
+                       Logger::log('Forum item ' . $target_item['id'] . ' with URL ' . $target_item['uri'] . ' will be distributed.', Logger::DEBUG);
                } elseif (!DBA::exists('conversation', ['item-uri' => $target_item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB])) {
                        Logger::log('Remote item ' . $target_item['id'] . ' with URL ' . $target_item['uri'] . ' is no AP post. It will not be distributed.', Logger::DEBUG);
                        return 0;
@@ -634,29 +637,4 @@ class Notifier
 
                return count($inboxes);
        }
-
-       private static function isForumPost(array $item, array $owner)
-       {
-               if (($item['author-id'] == $item['owner-id']) ||
-                       ($owner['id'] == $item['contact-id']) ||
-                       ($item['uri'] != $item['parent-uri'])) {
-                       return false;
-               }
-
-               return self::isForum($item['contact-id']);
-       }
-
-       private static function isForum($contactid)
-       {
-               $fields = ['forum', 'prv'];
-               $condition = ['id' => $contactid];
-               $contact = DBA::selectFirst('contact', $fields, $condition);
-               if (!DBA::isResult($contact)) {
-                       // Should never happen
-                       return false;
-               }
-
-               // Is it a forum?
-               return ($contact['forum'] || $contact['prv']);
-       }
 }