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