- Модуль: webdav
- Путь к файлу: ~/bitrix/modules/webdav/classes/diskstorage.php
- Класс: CDiskStorage
- Вызов: CDiskStorage::getSnapshot
public function getSnapshot($version = 0)
{
$internalVersion = CWebDavDiskDispatcher::convertFromExternalVersion($version);
$sc = $this->storage->getCurrentUserSecurityContext();
$response = $folderLinks = array();
$folders = $this->loadFormattedFolderTreeAndBreadcrumbs(true);
foreach($folders as $folder)
{
if(empty($folder))
{
continue;
}
if(!empty($folder['isSymlinkDirectory']))
{
$folderLinks[] = $folder;
}
if($internalVersion <= 0)
{
$response[] = $folder;
}
elseif($internalVersion > 0 && self::compareVersion($folder['version'], $version) >= 0)
{
$response[] = $folder;
}
}
unset($folder);
$filter = array(
'TYPE' => ObjectTable::TYPE_FILE,
);
if($internalVersion > 0)
{
$filter['>=UPDATE_TIME'] = DateTime::createFromTimestamp($internalVersion);
}
$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;
/**
* @var File $item
*/
foreach ($this
->storage->getRootObject()
->getDescendants($sc, $parameters) as $i => $item)
{
$format = $this->formatFileToResponse($item);
if($format)
{
$response[] = $format;
}
}
unset($item);
return array_merge(
$response,
$this->getSnapshotFromLinks($folderLinks, $internalVersion),
$this->getDeletedElements($internalVersion)
);
}