protected function update_item($iname, $name, $value, $items, $data, $form, $object) { $info = $data['assoc']; if (isset($items[$iname])) { $action = 'update'; $item = $items[$iname]; } else { if (is_null($value)) { return; } $action = 'insert'; $item = $this->get_assoc_mapper($name, $data)->make_entity(); $item[$info['key_column']] = $object->id(); $item['__data'] = $value; $item[$item[$info['value_column']]] = $value; $this->add_item_to_form($form, $item, $iname, $idata = $this->get_item_data($name, $data), CMS_Fields::type($idata)); } $keys = isset($info['id_columns']) ? array() : array($info['key_column'] => $item[$info['key_column']], $info['value_column'] => $item[$info['value_column']]); $item_data = $this->get_item_data($name, $data); $type = CMS_Fields::Type($item_data); $type->assign_to_object($form, $item, $iname, $item_data); $item[$info['value_column']] = $item[$iname]; if ($action == 'update') { $item->{$action}(array(), $keys); } else { $item->{$action}(); } }