public function save($data)
{
if (is_string($data)) {
$data = parse_params($data);
}
$table_custom_field = $this->table;
$table_values = $this->table_values;
if (isset($data['cf_id']) and !isset($data['id'])) {
$data['id'] = $data['cf_id'];
}
if (isset($data['field_type']) and !isset($data['type'])) {
$data['type'] = $data['field_type'];
}
if (isset($data['custom_field_type']) and !isset($data['type'])) {
$data['type'] = $data['custom_field_type'];
}
if (isset($params['field_value'])) {
$params['value'] = $params['field_value'];
}
if (isset($data['field_name']) and !isset($data['name'])) {
$data['name'] = $data['field_name'];
}
if (isset($data['for']) and !isset($data['rel_type'])) {
$data['rel_type'] = $data['for'];
}
if (isset($data['type']) and !isset($data['name'])) {
$data['name'] = $data['type'];
}
if (isset($data['rel']) and !isset($data['rel_type'])) {
$data['rel_type'] = $data['rel'];
}
$data_to_save = $data;
$data_to_save = $this->unify_params($data_to_save);
if (isset($data_to_save['for_id'])) {
$data_to_save['rel_id'] = $data_to_save['for_id'];
}
if (isset($data_to_save['id'])) {
$data_to_save['cf_id'] = $data_to_save['id'];
}
if (isset($data_to_save['cf_id'])) {
$data_to_save['id'] = intval($data_to_save['cf_id']);
$table_custom_field = $this->table;
$form_data_from_id = $this->app->database_manager->get_by_id($table_custom_field, $data_to_save['id'], $is_this_field = false);
if (isset($form_data_from_id['id'])) {
if (!isset($data_to_save['rel_type'])) {
$data_to_save['rel_type'] = $form_data_from_id['rel_type'];
}
if (!isset($data_to_save['rel_id'])) {
$data_to_save['rel_id'] = $form_data_from_id['rel_id'];
}
if (isset($form_data_from_id['type']) and $form_data_from_id['type'] != '' and (!isset($data_to_save['type']) or $data_to_save['type'] == '')) {
$data_to_save['type'] = $form_data_from_id['type'];
}
if (isset($form_data_from_id['name']) and $form_data_from_id['name'] != '' and (!isset($data_to_save['name']) or $data_to_save['name'] == '')) {
$data_to_save['name'] = $form_data_from_id['name'];
}
}
if (isset($data_to_save['copy_rel_id'])) {
$cp = $this->app->database_manager->copy_row_by_id($table_custom_field, $data_to_save['cf_id']);
$data_to_save['id'] = $cp;
$data_to_save['rel_id'] = $data_to_save['copy_rel_id'];
}
}
if (!isset($data_to_save['rel_type'])) {
$data_to_save['rel_type'] = 'content';
}
$data_to_save['rel_type'] = $this->app->database_manager->assoc_table_name($data_to_save['rel_type']);
if (!isset($data_to_save['rel_id'])) {
$data_to_save['rel_id'] = '0';
}
if (isset($data['options'])) {
$data_to_save['options'] = $this->_encode_options($data['options']);
}
$data_to_save['session_id'] = mw()->user_manager->session_id();
if (!isset($data_to_save['value']) and isset($data_to_save['field_value'])) {
$data_to_save['value'] = $data_to_save['field_value'];
} elseif (isset($data_to_save['values'])) {
$data_to_save['value'] = $data_to_save['values'];
}
if ((!isset($data_to_save['id']) or $data_to_save['id'] == 0) and !isset($data_to_save['is_active'])) {
$data_to_save['is_active'] = 1;
}
if (!isset($data_to_save['type']) or trim($data_to_save['type']) == '') {
return array('error' => 'You must set type');
} else {
if (!isset($data_to_save['name'])) {
return array('error' => 'You must set name');
}
$cf_k = $data_to_save['name'];
if ($cf_k != false and !isset($data_to_save['name_key'])) {
$data_to_save['name_key'] = $this->app->url_manager->slug(strtolower($cf_k));
}
$data_to_save['allow_html'] = true;
if (!isset($data_to_save['id'])) {
$data_to_save['id'] = 0;
}
// $this->skip_cache = true;
$data_to_save['table'] = $table_custom_field;
$data_to_save['allow_html'] = true;
$data_to_save_parent = $data_to_save;
if (isset($data_to_save_parent['value'])) {
unset($data_to_save_parent['value']);
}
$save = $this->app->database_manager->save($data_to_save_parent);
if (isset($data_to_save['value'])) {
$custom_field_id = $save;
$values_to_save = array();
if (!is_array($data_to_save['value'])) {
$values_to_save = array($data_to_save['value']);
} elseif (is_array($data_to_save['value'])) {
$values_to_save = $data_to_save['value'];
}
if (!empty($values_to_save)) {
$check_existing = array();
$check_existing['table'] = $table_values;
$check_existing['custom_field_id'] = $custom_field_id;
$check_old = $this->app->database_manager->get($check_existing);
$i = 0;
foreach ($values_to_save as $value_to_save) {
$save_value = array();
if (isset($check_old[$i]) and isset($check_old[$i]['id'])) {
$save_value['id'] = $check_old[$i]['id'];
unset($check_old[$i]);
}
$save_value['custom_field_id'] = $custom_field_id;
$save_value['value'] = $value_to_save;
if (is_array($value_to_save)) {
$save_value['value'] = implode(',', array_values($value_to_save));
}
$save_value['position'] = $i;
$save_value['allow_html'] = true;
$save_value = $this->app->database_manager->save($table_values, $save_value);
++$i;
}
if (!empty($check_old)) {
$remove_old_ids = array();
foreach ($check_old as $remove) {
$remove_old_ids[] = $remove['id'];
}
if (!empty($remove_old_ids)) {
$remove_old = $this->app->database_manager->delete_by_id($table_values, $remove_old_ids);
}
}
}
}
$this->app->cache_manager->delete('custom_fields/' . $save);
$this->app->cache_manager->delete('custom_fields');
return $save;
}
}