public function delete(Object\Concrete $object)
{
// empty or create all relevant tables
$fieldDef = $object->getClass()->getFieldDefinition($this->model->getFieldname());
foreach ($fieldDef->getAllowedTypes() as $type) {
try {
/** @var $definition Definition */
$definition = Object\Fieldcollection\Definition::getByKey($type);
} catch (\Exception $e) {
continue;
}
$tableName = $definition->getTableName($object->getClass());
try {
$this->db->delete($tableName, $this->db->quoteInto("o_id = ?", $object->getId()) . " AND " . $this->db->quoteInto("fieldname = ?", $this->model->getFieldname()));
} catch (\Exception $e) {
// create definition if it does not exist
$definition->createUpdateTable($object->getClass());
}
if ($definition->getFieldDefinition("localizedfields")) {
$tableName = $definition->getLocalizedTableName($object->getClass());
try {
$this->db->delete($tableName, $this->db->quoteInto("ooo_id = ?", $object->getId()) . " AND " . $this->db->quoteInto("fieldname = ?", $this->model->getFieldname()));
} catch (\Exception $e) {
\Logger::error($e);
}
}
$childDefinitions = $definition->getFielddefinitions();
if (is_array($childDefinitions)) {
foreach ($childDefinitions as $fd) {
if (method_exists($fd, "delete")) {
$fd->delete($object, ["context" => ["containerType" => "fieldcollection", "containerKey" => $type, "fieldname" => $this->model->getFieldname()]]);
}
}
}
}
// empty relation table
$this->db->delete("object_relations_" . $object->getClassId(), "(ownertype = 'fieldcollection' AND " . $this->db->quoteInto("ownername = ?", $this->model->getFieldname()) . " AND " . $this->db->quoteInto("src_id = ?", $object->getId()) . ")" . " OR (ownertype = 'localizedfield' AND " . $this->db->quoteInto("ownername LIKE ?", "/fieldcollection~" . $this->model->getFieldname() . "/%") . ")");
}