protected function calculateCrumb(BaseObject $object)
{
$parentId = $object->getParentId();
if (!$parentId) {
$this->crumbsByObjectId[$object->getId()] = array($object->getName());
return $this->crumbsByObjectId[$object->getId()];
}
if (isset($this->crumbsByObjectId[$parentId])) {
$this->crumbsByObjectId[$object->getId()] = $this->crumbsByObjectId[$parentId];
$this->crumbsByObjectId[$object->getId()][] = $object->getName();
return $this->crumbsByObjectId[$object->getId()];
}
$storage = $object->getStorage();
$fake = Driver::getInstance()->getFakeSecurityContext();
$this->crumbsByObjectId[$object->getId()] = array();
foreach ($object->getParents($fake, array('select' => array('ID', 'NAME', 'TYPE')), SORT_DESC) as $parent) {
if ($parent->getId() == $storage->getRootObjectId()) {
continue;
}
$this->crumbsByObjectId[$object->getId()][] = $parent->getName();
}
unset($parent);
$this->crumbsByObjectId[$parentId] = $this->crumbsByObjectId[$object->getId()];
$this->crumbsByObjectId[$object->getId()][] = $object->getName();
return $this->crumbsByObjectId[$object->getId()];
}