- Модуль: webdav
- Путь к файлу: ~/bitrix/modules/webdav/classes/diskstorage.php
- Класс: CDiskStorage
- Вызов: CDiskStorage::getSnapshotFromLinks
protected function getSnapshotFromLinks(array $folderLinks, $version)
{
$response = array();
$sc = $this->storage->getCurrentUserSecurityContext();
foreach($folderLinks as $link)
{
$modelLink = FolderLink::buildFromArray(array(
'ID' => $link['extra']['id'],
'NAME' => $link['name'],
'TYPE' => ObjectTable::TYPE_FOLDER,
'STORAGE_ID' => $link['extra']['iblockId'],
'REAL_OBJECT_ID' => $link['extra']['linkSectionId'],
'PARENT_ID' => $link['extra']['sectionId'],
'UPDATE_TIME' => DateTime::createFromTimestamp(CWebDavDiskDispatcher::convertFromExternalVersion($link['version'])),
'CREATED_BY' => $link['createdBy'],
'UPDATED_BY' => $link['updatedBy'],
));
$filter = array(
'TYPE' => ObjectTable::TYPE_FILE,
);
if($version > 0 && self::compareVersion($link['version'], $version .'000'))
{
$filter['>=UPDATE_TIME'] = DateTime::createFromTimestamp($version);
}
$code = Folder::CODE_FOR_UPLOADED_FILES;
$parameters = array(
'filter' => $filter,
);
$parameters['runtime'] = array(new ExpressionField('NOT_UPLOADED',
"CASE WHEN NOT EXISTS(SELECT 'x' FROM b_disk_object_path pp INNER JOIN b_disk_object oo ON oo.ID = pp.PARENT_ID AND oo.CODE = '{$code}' WHERE pp.OBJECT_ID = %1$s AND pp.PARENT_ID = oo.ID AND oo.STORAGE_ID = %2$s) THEN 1 ELSE 0 END", array('PARENT_ID', 'STORAGE_ID'))
);
$parameters['filter']['NOT_UPLOADED'] = true;
foreach($modelLink->getDescendants($sc, $parameters) as $item)
{
/** @var File $item */
$format = $this->formatFileToResponse($item);
if($format)
{
$response[] = $format;
}
}
unset($item);
}
return $response;
}