public function getProperties($onlyInherited = false)
{
$properties = [];
// collect properties via parent - ids
$parentIds = $this->getParentIds();
$propertiesRaw = $this->db->fetchAll("SELECT * FROM properties WHERE ((cid IN (" . implode(",", $parentIds) . ") AND inheritable = 1) OR cid = ? ) AND ctype='asset'", $this->model->getId());
// because this should be faster than mysql
usort($propertiesRaw, function ($left, $right) {
return strcmp($left["cpath"], $right["cpath"]);
});
foreach ($propertiesRaw as $propertyRaw) {
try {
$property = new Model\Property();
$property->setType($propertyRaw["type"]);
$property->setCid($this->model->getId());
$property->setName($propertyRaw["name"]);
$property->setCtype("asset");
$property->setDataFromResource($propertyRaw["data"]);
$property->setInherited(true);
if ($propertyRaw["cid"] == $this->model->getId()) {
$property->setInherited(false);
}
$property->setInheritable(false);
if ($propertyRaw["inheritable"]) {
$property->setInheritable(true);
}
if ($onlyInherited && !$property->getInherited()) {
continue;
}
$properties[$propertyRaw["name"]] = $property;
} catch (\Exception $e) {
Logger::error("can't add property " . $propertyRaw["name"] . " to asset " . $this->model->getRealFullPath());
}
}
// if only inherited then only return it and dont call the setter in the model
if ($onlyInherited) {
return $properties;
}
$this->model->setProperties($properties);
return $properties;
}