• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/bitrix24disk/legacy/newdiskstorage.php
  • Класс: BitrixDiskBitrix24DiskLegacyNewDiskStorage
  • Вызов: NewDiskStorage::snapshotFromLinks
private function snapshotFromLinks(FixedArray $items, PageState $pageState, $internalVersion, $pageSize = self::SNAPSHOT_PAGE_SIZE)
{
	if($pageState->getStep() !== $pageState::STEP_SYMLINKS)
	{
		return;
	}

	$expectedFirstId = $pageState->getNextId();
	$countElementPushedFromLinks = 0;
	$countBeforeStart = $items->getCountOfPushedElements();

	foreach($this->getSymlinkFoldersSortedById() as $link)
	{
		if(empty($expectedFirstId) || $link->id >= $expectedFirstId)
		{
			if($items->getCountOfPushedElements() === self::SNAPSHOT_PAGE_SIZE)
			{
				$pageState->setStep($pageState::STEP_SYMLINKS);
				if(!$pageState->hasNextId())
				{
					//if the page state does not have next id, that means we have to work with next link.
					//if the page state has next id, that means we have to continue process to get snapshot (next page).
					$pageState->setNextId($link->id);
				}
				return;
			}

			if(!$link->isReplica())
			{
				$this->snapshotFromLink($link, $items, $pageState, $internalVersion, $pageSize - $countElementPushedFromLinks);
			}

			$countElementPushedFromLinks = $items->getCountOfPushedElements() - $countBeforeStart;
		}
		elseif($link->id < $expectedFirstId)
		{
			continue;
		}
	}
	unset($link);

	if(!$pageState->hasNextId())
	{
		$pageState->reset();
	}
}