. * */ namespace Friendica\Protocol\ActivityPub; /** * This class prevents maximum function nesting errors by flattening recursive calls to Processor::fetchMissingActivity */ class FetchQueue { /** @var FetchQueueItem[] */ protected $queue = []; public function push(FetchQueueItem $item) { array_push($this->queue, $item); } /** * Processes missing activities one by one. It is possible that a processing call will add additional missing * activities, they will be processed in subsequent iterations of the loop. * * Since this process is self-contained, it isn't suitable to retrieve the URI of a single activity. * * The simplest way to get the URI of the first activity and ensures all the parents are fetched is this way: * * $fetchQueue = new ActivityPub\FetchQueue(); * $fetchedUri = ActivityPub\Processor::fetchMissingActivity($fetchQueue, $activityUri); * $fetchQueue->process(); */ public function process() { while (count($this->queue)) { $fetchQueueItem = array_pop($this->queue); call_user_func_array([Processor::class, 'fetchMissingActivity'], array_merge([$this], $fetchQueueItem->toParameters())); } } }