public function test_cmb2_row_classes_string() { // Test with string $args = $this->field_args; // Add row classes statically as a string $args['row_classes'] = 'these are some classes'; $field = new CMB2_Field(array('object_id' => $this->object_id, 'object_type' => $this->object_type, 'group' => $this->group, 'field_args' => $args)); $classes = $field->row_classes(); $this->assertEquals('cmb-type-text cmb2-id-test-test table-layout these are some classes', $classes); }
/** * 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); }
/** * 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); } }
/** * Get a field object * * @since 2.0.3 * * @param string|array|CMB2_Field $field Metabox field id or field config array or CMB2_Field object * @param CMB2_Field $field_group (optional) CMB2_Field object (group parent) * * @return CMB2_Field|false CMB2_Field object (or false) */ public function get_field($field, $field_group = null) { if (is_a($field, 'CMB2_Field')) { return $field; } $field_id = is_string($field) ? $field : $field['id']; $parent_field_id = !empty($field_group) ? $field_group->id() : ''; $ids = $this->get_field_ids($field_id, $parent_field_id, true); if (!$ids) { return false; } list($field_id, $sub_field_id) = $ids; $index = implode('', $ids) . ($field_group ? $field_group->index : ''); if (array_key_exists($index, $this->fields)) { return $this->fields[$index]; } $this->fields[$index] = new CMB2_Field($this->get_field_args($field_id, $field, $sub_field_id, $field_group)); return $this->fields[$index]; }
/** * Handle indexing the various date/time fields. * * This method also serves as an example of the 'facetwp_cmb2_default_index' filter, although it should be noted * that since it is part of the class, it does not use the $obj class object, but makes method calls directly. * For use outside of this class, be sure to use $obj->index_row() or $obj->index_multiple(). * * @since 1.0.0 * * @param bool $filter Continue with normal indexing. * @param CMB2_Field $field The field object. * @param array $defaults Array of default data. * * @return bool Whether to continue with the normal indexing. */ public function time_date_indexing($filter, $field, $defaults) { $date_format = 'Y-m-d'; $extended_format = "{$date_format} H:i:s"; $index = array('facet_display_value' => $field->args('name')); // Check for special field types if ('text_data' == $field->type()) { $index['facet_value'] = date($date_format, strtotime($field->value())); $this->index_row($index, $defaults); return false; } elseif ('text_date_timestamp' == $field->type()) { $index['facet_value'] = date($date_format, $field->value()); $this->index_row($index, $defaults); return false; } elseif ('text_datetime_timestamp' == $field->type()) { $index['facet_value'] = date($extended_format, $field->value()); $this->index_row($index, $defaults); return false; } elseif ('text_datetime_timestamp_timezone' == $field->type()) { $value = maybe_unserialize($field->value()); if ($value instanceof DateTime) { $index['facet_value'] = $value->format($extended_format); $this->index_row($index, $defaults); return false; } } return $filter; }
/** * Get field min. user level (defaults to 2). * * @param CMB2_Field $field * * @return int Numeric min. user level. */ public function get_minimum_user_level(CMB2_Field $field) { $level = $field->options('minimum_user_level'); return is_numeric($level) ? absint($level) : 2; }
public function test_show_option_none() { $args = array('name' => 'Test Radio inline', 'desc' => 'field description (optional)', 'id' => 'radio_inline', 'type' => 'radio_inline', 'options' => array('standard' => 'Option One', 'custom' => 'Option Two', 'none' => 'Option Three')); $field = new CMB2_Field(array('field_args' => $args)); $this->assertFalse($field->args('show_option_none')); $this->assertHTMLstringsAreEqual('<div class="cmb-row cmb-type-radio-inline cmb2-id-radio-inline cmb-inline"><div class="cmb-th"><label for="radio_inline">Test Radio inline</label></div><div class="cmb-td"><ul class="cmb2-radio-list cmb2-list"><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline1" value="standard"/><label for="radio_inline1">Option One</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline2" value="custom"/><label for="radio_inline2">Option Two</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline3" value="none"/><label for="radio_inline3">Option Three</label></li></ul><p class="cmb2-metabox-description">field description (optional)</p></div></div>', $this->render_field($field)); $args['show_option_none'] = true; $field = new CMB2_Field(array('field_args' => $args)); $this->assertEquals(__('None', 'cmb2'), $field->args('show_option_none')); $this->assertHTMLstringsAreEqual('<div class="cmb-row cmb-type-radio-inline cmb2-id-radio-inline cmb-inline"><div class="cmb-th"><label for="radio_inline">Test Radio inline</label></div><div class="cmb-td"><ul class="cmb2-radio-list cmb2-list"><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline1" value="" checked="checked"/><label for="radio_inline1">None</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline2" value="standard"/><label for="radio_inline2">Option One</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline3" value="custom"/><label for="radio_inline3">Option Two</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline4" value="none"/><label for="radio_inline4">Option Three</label></li></ul><p class="cmb2-metabox-description">field description (optional)</p></div></div>', $this->render_field($field)); $args['show_option_none'] = 'No Value'; $field = new CMB2_Field(array('field_args' => $args)); $this->assertEquals('No Value', $field->args('show_option_none')); $this->assertHTMLstringsAreEqual('<div class="cmb-row cmb-type-radio-inline cmb2-id-radio-inline cmb-inline"><div class="cmb-th"><label for="radio_inline">Test Radio inline</label></div><div class="cmb-td"><ul class="cmb2-radio-list cmb2-list"><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline1" value="" checked="checked"/><label for="radio_inline1">No Value</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline2" value="standard"/><label for="radio_inline2">Option One</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline3" value="custom"/><label for="radio_inline3">Option Two</label></li><li><input type="radio" class="cmb2-option" name="radio_inline" id="radio_inline4" value="none"/><label for="radio_inline4">Option Three</label></li></ul><p class="cmb2-metabox-description">field description (optional)</p></div></div>', $this->render_field($field)); }
/** * Manually render a field column display. * * @param array $field_args Array of field arguments. * @param CMB2_Field $field The field object */ function yourprefix_display_text_small_column($field_args, $field) { ?> <div class="custom-column-display <?php echo $field->row_classes(); ?> "> <p><?php echo $field->escaped_value(); ?> </p> <p class="description"><?php echo $field->args('description'); ?> </p> </div> <?php }
/** * Get the corresponding display class for the field type. * @since 2.2.2 * @param CMB2_Field $field * @return CMB2_Field_Display */ public static function get(CMB2_Field $field) { switch ($field->type()) { case 'text_url': $type = new CMB2_Display_Text_Url($field); break; case 'text_money': $type = new CMB2_Display_Text_Money($field); break; case 'colorpicker': $type = new CMB2_Display_Colorpicker($field); break; case 'checkbox': $type = new CMB2_Display_Checkbox($field); break; case 'wysiwyg': case 'textarea_small': $type = new CMB2_Display_Textarea($field); break; case 'textarea_code': $type = new CMB2_Display_Textarea_Code($field); break; case 'text_time': $type = new CMB2_Display_Text_Time($field); break; case 'text_date': case 'text_date_timestamp': case 'text_datetime_timestamp': $type = new CMB2_Display_Text_Date($field); break; case 'text_datetime_timestamp_timezone': $type = new CMB2_Display_Text_Date_Timezone($field); break; case 'select': case 'radio': case 'radio_inline': $type = new CMB2_Display_Select($field); break; case 'multicheck': case 'multicheck_inline': $type = new CMB2_Display_Multicheck($field); break; case 'taxonomy_radio': case 'taxonomy_radio_inline': case 'taxonomy_select': $type = new CMB2_Display_Taxonomy_Radio($field); break; case 'taxonomy_multicheck': case 'taxonomy_multicheck_inline': $type = new CMB2_Display_Taxonomy_Multicheck($field); break; case 'file': $type = new CMB2_Display_File($field); break; case 'file_list': $type = new CMB2_Display_File_List($field); break; case 'oembed': $type = new CMB2_Display_oEmbed($field); break; default: $type = new self($field); break; } return $type; }
public function field_should_apply_term(CMB2_Field $field) { if ('term_select' !== $field->args('type')) { return false; } if (!isset($field->args['apply_term'])) { return true; } return (bool) $field->args['apply_term']; }
/** * Manually render amount field. * * @since 1.7 * * @param array $field_args Array of field arguments. * @param CMB2_Field $field The field object * * @return void */ function give_cmb_amount_field_render_row_cb($field_args, $field) { // Get args. $id = $field->args('id'); $label = $field->args('name'); $name = $field->args('_name'); $description = $field->args('description'); $attributes = $field->args('attributes'); $attributes_string = ''; $row_class = $field->row_classes(); // Get attributes. if (!empty($attributes)) { foreach ($attributes as $attribute_name => $attribute_val) { $attributes_string[] = "{$attribute_name}=\"{$attribute_val}\""; } $attributes_string = implode(' ', $attributes_string); } // Get row class. if (!empty($row_class) && is_array($row_class)) { $row_class = implode(' ', $row_class); } ?> <div class="cmb-row <?php echo $row_class; ?> "> <div class="cmb-th"> <label for="<?php echo $id; ?> "><?php echo $label; ?> </label> </div> <div class="cmb-td"> <?php echo give_get_option('currency_position') == 'before' ? '<span class="give-money-symbol give-money-symbol-before">' . give_currency_symbol() . '</span>' : ''; ?> <input id="<?php echo $id; ?> " type="text" name="<?php echo $name; ?> " <?php echo $attributes_string; ?> /> <?php echo give_get_option('currency_position') == 'after' ? '<span class="give-money-symbol give-money-symbol-after">' . give_currency_symbol() . '</span>' : ''; ?> <span class="cmb2-metabox-description"><?php echo $description; ?> </span> </div> </div> <?php }