Example #1
0
 /**
  * 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);
 }
Example #2
0
 /**
  * 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);
 }