- Модуль: 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];
}