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