protected function db_update($state_info) { $validation_result = $this->db_update_validation(); $edit_fields = $this->get_edit_fields(); if ($validation_result->success) { $post_data = $state_info->unwrapped_data; $primary_key = $state_info->primary_key; if ($this->callback_update === null) { if ($this->callback_before_update !== null) { $callback_return = call_user_func($this->callback_before_update, $post_data, $primary_key); if (!empty($callback_return) && is_array($callback_return)) { $post_data = $callback_return; } elseif ($callback_return === false) { return false; } } $update_data = array(); $types = $this->get_field_types(); foreach ($edit_fields as $num_row => $field) { /* If the multiselect or the set is empty then the browser doesn't send an empty array. Instead it sends nothing */ if (isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect') && !isset($post_data[$field->field_name])) { $post_data[$field->field_name] = array(); } if (isset($post_data[$field->field_name]) && !isset($this->relation_n_n[$field->field_name])) { if (isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && is_array($post_data[$field->field_name]) && empty($post_data[$field->field_name])) { $update_data[$field->field_name] = null; } elseif (isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && $post_data[$field->field_name] === '') { $update_data[$field->field_name] = null; } elseif (isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'date') { $update_data[$field->field_name] = $this->_convert_date_to_sql_date($post_data[$field->field_name]); } elseif (isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'readonly') { //This empty if statement is to make sure that a readonly field will never inserted/updated } elseif (isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect')) { $update_data[$field->field_name] = !empty($post_data[$field->field_name]) ? implode(',', $post_data[$field->field_name]) : ''; } elseif (isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'datetime') { $update_data[$field->field_name] = $this->_convert_date_to_sql_date(substr($post_data[$field->field_name], 0, 10)) . substr($post_data[$field->field_name], 10); } else { $update_data[$field->field_name] = $post_data[$field->field_name]; } } } if ($this->basic_model->db_update($update_data, $primary_key) === false) { return false; } if (!empty($this->relation_n_n)) { foreach ($this->relation_n_n as $field_name => $field_info) { if ($this->unset_edit_fields !== null && is_array($this->unset_edit_fields) && in_array($field_name, $this->unset_edit_fields)) { continue; } $relation_data = isset($post_data[$field_name]) ? $post_data[$field_name] : array(); $this->db_relation_n_n_update($field_info, $relation_data, $primary_key); } } if ($this->callback_after_update !== null) { $callback_return = call_user_func($this->callback_after_update, $post_data, $primary_key); if ($callback_return === false) { return false; } } } else { $callback_return = call_user_func($this->callback_update, $post_data, $primary_key); if ($callback_return === false) { return false; } } return true; } else { return false; } }