• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/webdavstorage.php
  • Класс: CWebDavStorageCore
  • Вызов: CWebDavStorageCore::getSymlinkSnapshot
private function getSymlinkSnapshot($version = 0, array &$realSections = array())
{
	/** @var CWebDavIblock $webdav */
	$webdav = $this
		->getWebDav()
	;

	$files = $sections = array();
	foreach ($this->getDataSymlinkSections() as $linkSectionId => $invite)
	{
		$webdav->enableUFSymlinkMode();

		$pathOnSymlinkSection = '';
		$symlinkSectionVersion = 0;
		foreach ($realSections as &$realSection)
		{
			if($realSection['isDirectory'] && $realSection['extra']['id'] == $linkSectionId)
			{
				$realSection['isSymlinkDirectory'] = true;
				$pathOnSymlinkSection = rtrim($realSection['path'], '/') . '/';
				$symlinkSectionVersion = $realSection['version'];
				break;
			}
		}
		unset($realSection);

		if(!$pathOnSymlinkSection)
		{
			//we are not found symlink section in full real tree sections
			continue;
		}

		$portionSections = $this->formatSectionsToResponse($webdav->getSectionsTree(array(
			'NON_DROPPED_SECTION' => true,
			'section_id' => $linkSectionId,
			'prependPath' => $pathOnSymlinkSection,
			'setERights' => true,
		)), true);

		$versionForFileFilter = 0;
		//todo not good. Hack. We need read tree if create new symlink.
		if(self::compareVersion($symlinkSectionVersion, $version) <= 0)
		{
			$versionForFileFilter = CWebDavDiskDispatcher::convertFromExternalVersion($version);
			$portionSections = $this->filterSectionByVersion($portionSections, $version);
		}

		$files = array_merge(
			$files,
			$this->searchFilesByPropFind($versionForFileFilter, null, array('section_id' => $linkSectionId, 'underSymlink' => true))
		);
		$sections = array_merge(
			$sections,
			$portionSections
		);
	}
	unset($invite);

	return array_merge($files, $sections);
}