public function save($object, $params = [])
{
$multihrefMetadata = $this->getDataFromObjectParam($object, $params);
$classId = null;
$objectId = null;
if ($object instanceof Object\Concrete) {
$objectId = $object->getId();
} elseif ($object instanceof Object\Fieldcollection\Data\AbstractData) {
$objectId = $object->getObject()->getId();
} elseif ($object instanceof Object\Localizedfield) {
$objectId = $object->getObject()->getId();
} elseif ($object instanceof Object\Objectbrick\Data\AbstractData) {
$objectId = $object->getObject()->getId();
}
if ($object instanceof Object\Localizedfield) {
$classId = $object->getClass()->getId();
} elseif ($object instanceof Object\Objectbrick\Data\AbstractData || $object instanceof Object\Fieldcollection\Data\AbstractData) {
$classId = $object->getObject()->getClassId();
} else {
$classId = $object->getClassId();
}
$table = "object_metadata_" . $classId;
$db = Db::get();
$this->enrichRelation($object, $params, $classId, $relation);
$position = isset($relation["position"]) && $relation["position"] ? $relation["position"] : "0";
if ($params && $params["context"] && $params["context"]["containerType"] == "fieldcollection" && $params["context"]["subContainerType"] == "localizedfield") {
$context = $params["context"];
$index = $context["index"];
$containerName = $context["fieldname"];
$sql = $db->quoteInto("o_id = ?", $objectId) . " AND ownertype = 'localizedfield' AND " . $db->quoteInto("ownername LIKE ?", "/fieldcollection~" . $containerName . "/" . $index . "/%") . " AND " . $db->quoteInto("fieldname = ?", $this->getName()) . " AND " . $db->quoteInto("position = ?", $position);
} else {
$sql = $db->quoteInto("o_id = ?", $objectId) . " AND " . $db->quoteInto("fieldname = ?", $this->getName()) . " AND " . $db->quoteInto("position = ?", $position);
}
$db->delete($table, $sql);
if (!empty($multihrefMetadata)) {
if ($object instanceof Object\Localizedfield || $object instanceof Object\Objectbrick\Data\AbstractData || $object instanceof Object\Fieldcollection\Data\AbstractData) {
$objectConcrete = $object->getObject();
} else {
$objectConcrete = $object;
}
foreach ($multihrefMetadata as $meta) {
$ownerName = isset($relation["ownername"]) ? $relation["ownername"] : null;
$ownerType = isset($relation["ownertype"]) ? $relation["ownertype"] : null;
$meta->save($objectConcrete, $ownerType, $ownerName, $position);
}
}
parent::save($object, $params);
}