/** * @return string */ public function do_save() { $class = _get::__class_name($this); if ($this->get_primary_key()) { $query = new update($class); } else { $query = new insert($class); $top_pos = _db::select($class)->add_field_to_retrieve('max(position) as pos')->execute()->fetchObject()->pos; $query->add_value('position', $top_pos ?: 1); } /** @var field $field */ $this->get_fields()->iterate(function ($field) use($query) { $field->parent_form = $this; if ($field->field_name != $this->get_primary_key_name()) { if (isset($this->{$field->field_name}) && !$field instanceof field_file && !$field instanceof field_mlink) { if (!$this->{$field->field_name} && $field instanceof field_fn && isset($this->title)) { $this->{$field->field_name} = _get::unique_fn(_get::__class_name($this), $field->field_name, $this->title); } try { $data = $field->get_save_sql(); $query->add_value($field->field_name, $data); } catch (\RuntimeException $e) { } } } }); $query->add_value('live', isset($this->live) ? $this->live : true); $query->add_value('deleted', isset($this->deleted) ? $this->deleted : false); $query->add_value('ts', date('Y-m-d H:i:s')); if ($this->get_primary_key()) { $query->filter_field($this->get_primary_key_name(), $this->get_primary_key()); } $key = $query->execute(); if (!$this->get_primary_key()) { $this->set_primary_key($key); } $this->get_fields()->iterate(function ($field) { if ($field->field_name != $this->get_primary_key_name()) { if (isset($this->{$field->field_name}) && $field instanceof field_mlink) { $source_module = new _cms_module(['table_name', 'primary_key'], $field->get_link_mid()); $module = new _cms_module(['table_name', 'primary_key'], static::get_module_id()); _db::delete($module->table_name . '_link_' . $source_module->table_name)->filter_field($module->primary_key, $this->get_primary_key())->execute(); if ($this->{$field->field_name}) { foreach ($this->{$field->field_name} as $value) { _db::insert($module->table_name . '_link_' . $source_module->table_name)->add_value($module->primary_key, $this->get_primary_key())->add_value('link_' . $source_module->primary_key, $value)->add_value('fid', $field->fid)->execute(); } } } } }); if ($this->get_primary_key()) { $this->get_fields()->iterate(function ($field) { if ($field instanceof field_file) { $this->do_upload_file($field); } }); } return $this->get_primary_key(); }