/** * Peforms saving of `file` attachement's ID * @since 1.1.0 */ public function _save_file_id() { $group = $this->field->group; $args = $this->field->args(); $args['id'] = $args['_id'] . '_id'; unset($args['_id'], $args['_name']); // And get new field object $field = new CMB2_Field(array('field_args' => $args, 'group_field' => $group, 'object_id' => $this->field->object_id, 'object_type' => $this->field->object_type)); $id_key = $field->_id(); $id_val_old = $field->escaped_value('absint'); if ($group) { // Check group $_POST data $i = $group->index; $base_id = $group->_id(); $id_val = isset($_POST[$base_id][$i][$id_key]) ? absint($_POST[$base_id][$i][$id_key]) : 0; } else { // Check standard $_POST data $id_val = isset($_POST[$field->id()]) ? $_POST[$field->id()] : null; } // If there is no ID saved yet, try to get it from the url if ($this->value && !$id_val) { $id_val = cmb2_utils()->image_id_from_url($this->value); } if ($group) { return array('attach_id' => $id_val, 'field_id' => $id_key); } if ($id_val && $id_val != $id_val_old) { return $field->update_data($id_val); } elseif (empty($id_val) && $id_val_old) { return $field->remove_data($id_val_old); } }
/** * Save a repeatable group */ public function save_group($args) { if (!isset($args['id'], $args['fields'], $this->data_to_save[$args['id']]) || !is_array($args['fields'])) { return; } $field_group = new CMB2_Field(array('field_args' => $args, 'object_type' => $this->object_type(), 'object_id' => $this->object_id())); $base_id = $field_group->id(); $old = $field_group->get_data(); $group_vals = $this->data_to_save[$base_id]; $saved = array(); $field_group->index = 0; foreach (array_values($field_group->fields()) as $field_args) { $field = new CMB2_Field(array('field_args' => $field_args, 'group_field' => $field_group)); $sub_id = $field->id(true); foreach ((array) $group_vals as $field_group->index => $post_vals) { // Get value $new_val = isset($group_vals[$field_group->index][$sub_id]) ? $group_vals[$field_group->index][$sub_id] : false; // Sanitize $new_val = $field->sanitization_cb($new_val); if ('file' == $field->type() && is_array($new_val)) { // Add image ID to the array stack $saved[$field_group->index][$new_val['field_id']] = $new_val['attach_id']; // Reset var to url string $new_val = $new_val['url']; } // Get old value $old_val = is_array($old) && isset($old[$field_group->index][$sub_id]) ? $old[$field_group->index][$sub_id] : false; $is_updated = !empty($new_val) && $new_val != $old_val; $is_removed = empty($new_val) && !empty($old_val); // Compare values and add to `$updated` array if ($is_updated || $is_removed) { $this->updated[] = $base_id . '::' . $field_group->index . '::' . $sub_id; } // Add to `$saved` array $saved[$field_group->index][$sub_id] = $new_val; } $saved[$field_group->index] = array_filter($saved[$field_group->index]); } $saved = array_filter($saved); $field_group->update_data($saved, true); }
/** * Save a repeatable group */ public function save_group($args) { if (!isset($args['id'], $args['fields'], $this->data_to_save[$args['id']]) || !is_array($args['fields'])) { return; } $field_group = new CMB2_Field(array('field_args' => $args, 'object_type' => $this->object_type(), 'object_id' => $this->object_id())); $base_id = $field_group->id(); $old = $field_group->get_data(); // Check if group field has sanitization_cb $group_vals = $field_group->sanitization_cb($this->data_to_save[$base_id]); $saved = array(); $field_group->index = 0; $field_group->data_to_save = $this->data_to_save; foreach (array_values($field_group->fields()) as $field_args) { $field = new CMB2_Field(array('field_args' => $field_args, 'group_field' => $field_group)); $sub_id = $field->id(true); foreach ((array) $group_vals as $field_group->index => $post_vals) { // Get value $new_val = isset($group_vals[$field_group->index][$sub_id]) ? $group_vals[$field_group->index][$sub_id] : false; // Sanitize $new_val = $field->sanitization_cb($new_val); if (is_array($new_val) && $field->args('has_supporting_data')) { if ($field->args('repeatable')) { $_new_val = array(); foreach ($new_val as $group_index => $grouped_data) { // Add the supporting data to the $saved array stack $saved[$field_group->index][$grouped_data['supporting_field_id']][] = $grouped_data['supporting_field_value']; // Reset var to the actual value $_new_val[$group_index] = $grouped_data['value']; } $new_val = $_new_val; } else { // Add the supporting data to the $saved array stack $saved[$field_group->index][$new_val['supporting_field_id']] = $new_val['supporting_field_value']; // Reset var to the actual value $new_val = $new_val['value']; } } // Get old value $old_val = is_array($old) && isset($old[$field_group->index][$sub_id]) ? $old[$field_group->index][$sub_id] : false; $is_updated = !empty($new_val) && $new_val != $old_val; $is_removed = empty($new_val) && !empty($old_val); // Compare values and add to `$updated` array if ($is_updated || $is_removed) { $this->updated[] = $base_id . '::' . $field_group->index . '::' . $sub_id; } // Add to `$saved` array $saved[$field_group->index][$sub_id] = $new_val; } $saved[$field_group->index] = array_filter($saved[$field_group->index]); } $saved = array_filter($saved); $field_group->update_data($saved, true); }