Beispiel #1
0
 /**
  * @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();
 }