• Модуль: webdav
  • Путь к файлу: ~/bitrix/modules/webdav/classes/diskstorage.php
  • Класс: CDiskStorage
  • Вызов: CDiskStorage::getBreadcrumbs
private function getBreadcrumbs(BaseObject $object)
{
	$parentId = $object->isLink()? $object->getParentId() : $object->getRealObject()->getParentId();
	$realId = $object->isLink()? $object->getId() : $object->getRealObject()->getId();
	if(isset($this->cacheBreadcrumbs[$parentId]))
	{
		if($object instanceof File)
		{
			return $this->cacheBreadcrumbs[$parentId] . '/' . $object->getName();
		}
		$this->cacheBreadcrumbs[$realId] = $this->cacheBreadcrumbs[$parentId] . '/' . $object->getName();
		if($object->isLink())
		{
			$this->cacheBreadcrumbs[$object->getRealObject()->getId()] = $this->cacheBreadcrumbs[$realId];
		}
	}
	else
	{
		if($parentId == $this->storage->getRootObjectId())
		{
			$this->cacheBreadcrumbs[$realId] = '/' . $object->getName();
			if($object->isLink())
			{
				if(!$object->getRealObject())
				{
					return null;
				}
				$this->cacheBreadcrumbs[$object->getRealObject()->getId()] = $this->cacheBreadcrumbs[$realId];
			}
			return $this->cacheBreadcrumbs[$realId];
		}

		$path = '';
		$parents = ObjectTable::getAncestors($realId, array('select' => array('ID', 'NAME', 'TYPE', 'CODE')));
		while($parent = $parents->fetch())
		{
			if($parent['CODE'] == Folder::CODE_FOR_UPLOADED_FILES)
			{
				//todo hack. CODE_FOR_UPLOADED_FILES
				return null;
			}
			if($this->storage->getRootObjectId() == $parent['ID'])
			{
				continue;
			}
			$path .= '/' . $parent['NAME'];
			if(!isset($this->cacheBreadcrumbs[$parent['ID']]))
			{
				$this->cacheBreadcrumbs[$parent['ID']] = $path;
			}
		}
		if(isset($this->cacheBreadcrumbs[$parentId]))
		{
			$this->cacheBreadcrumbs[$realId] = $this->cacheBreadcrumbs[$parentId];
			if($object->isLink())
			{
				$this->cacheBreadcrumbs[$object->getRealObject()->getId()] = $this->cacheBreadcrumbs[$realId];
			}
		}
		else
		{
			$this->cacheBreadcrumbs[$realId] = null;
		}
	}

	return $this->cacheBreadcrumbs[$realId];
}