• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/bitrix24disk/legacy/newdiskstorage.php
  • Класс: BitrixDiskBitrix24DiskLegacyNewDiskStorage
  • Вызов: NewDiskStorage::buildTreeFromLink
private function buildTreeFromLink(TreeNode $link): array
{
	$maxVersion = -1;
	if ($this->isRealObjectExists($link))
	{
		$link->markAsReplica();

		return [[], $maxVersion];
	}

	$deletedTypeNone = ObjectTable::DELETED_TYPE_NONE;
	$typeFolder = ObjectTable::TYPE_FOLDER;
	$securityContext = $this->storage->getSecurityContext($this->userId);
	$rightExists = $securityContext->getSqlExpressionForList('object.ID', 'object.CREATED_BY');
	$storageId = $this->getStorageIdByRealObjectId($link->realObjectId);

	$sqlQuery = "
		SELECT object.ID, object.NAME, object.REAL_OBJECT_ID, object.PARENT_ID, object.CREATE_TIME, object.SYNC_UPDATE_TIME
		FROM b_disk_object object
		INNER JOIN b_disk_object_path path ON path.OBJECT_ID = object.ID
		WHERE 
			path.PARENT_ID = {$link->realObjectId} AND 
			object.STORAGE_ID = {$storageId} AND 
			object.DELETED_TYPE = {$deletedTypeNone} AND 
			object.TYPE = {$typeFolder} AND ({$rightExists})
	";
	$iterator = $this->connection->query($sqlQuery);
	$subLinks = array();
	foreach ($iterator as $folderRow)
	{
		//prevent possible cycle
		if ($this->isTreeNodeExists($folderRow))
		{
			continue;
		}

		$node = $this->fillTreeData($folderRow);
		$maxVersion = max($maxVersion, $folderRow['SYNC_UPDATE_TIME']->getTimestamp());
		if ($node->isLink() && !$this->isRealObjectExists($node))
		{
			$subLinks[] = $node;
		}
	}

	return [$subLinks, $maxVersion];
}