protected function db_insert($state_info) { $validation_result = $this->db_insert_validation(); if ($validation_result->success) { $post_data = $state_info->unwrapped_data; $add_fields = $this->get_add_fields(); if ($this->callback_insert === null) { if ($this->callback_before_insert !== null) { $callback_return = call_user_func($this->callback_before_insert, $post_data); if (!empty($callback_return) && is_array($callback_return)) { $post_data = $callback_return; } elseif ($callback_return === false) { return false; } } $insert_data = array(); $types = $this->get_field_types(); foreach ($add_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])) { $insert_data[$field->field_name] = null; } elseif (isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && $post_data[$field->field_name] === '') { $insert_data[$field->field_name] = null; } elseif (isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'date') { $insert_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')) { $insert_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') { $insert_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 { $insert_data[$field->field_name] = $post_data[$field->field_name]; } } } $insert_result = $this->basic_model->db_insert($insert_data); if ($insert_result !== false) { $insert_primary_key = $insert_result; } else { return false; } if (!empty($this->relation_n_n)) { foreach ($this->relation_n_n as $field_name => $field_info) { $relation_data = isset($post_data[$field_name]) ? $post_data[$field_name] : array(); $this->db_relation_n_n_update($field_info, $relation_data, $insert_primary_key); } } if ($this->callback_after_insert !== null) { $callback_return = call_user_func($this->callback_after_insert, $post_data, $insert_primary_key); if ($callback_return === false) { return false; } } } else { $callback_return = call_user_func($this->callback_insert, $post_data); if ($callback_return === false) { return false; } } if (isset($insert_primary_key)) { return $insert_primary_key; } else { return true; } } return false; }