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