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]; }