public function getProperties()
{
if ($this->properties == null) {
if ($this->getHardLinkSource()->getPropertiesFromSource()) {
$sourceProperties = $this->getDao()->getProperties();
} else {
$sourceProperties = [];
}
if ($this->getSourceDocument()) {
// if we have a source document, that means that this document is not directly linked, it's a
// child of a hardlink that uses "childFromSource", so in this case we use the source properties
// this is especially important for the navigation, otherwise all children will have the same
// navigation_name as the source hardlink, which doesn't make sense at all
$sourceProperties = $this->getSourceDocument()->getProperties();
}
$hardLinkProperties = [];
$hardLinkSourceProperties = $this->getHardLinkSource()->getProperties();
foreach ($hardLinkSourceProperties as $key => $prop) {
$prop = clone $prop;
$prop->setInherited(true);
// if the property doesn't exist in the source-properties just add it
if (!array_key_exists($key, $sourceProperties)) {
$hardLinkProperties[$key] = $prop;
} else {
// if the property does exist in the source properties but it is inherited, then overwrite it with the hardlink property
if ($sourceProperties[$key]->isInherited()) {
$hardLinkProperties[$key] = $prop;
}
}
}
$properties = array_merge($sourceProperties, $hardLinkProperties);
$this->setProperties($properties);
}
return $this->properties;
}