/**
     * Render a repeatable group row
     * @since  1.0.2
     * @param  CMB2_Field $field_group  CMB2_Field group field object
     * @param  string  $remove_disabled Attribute string to disable the remove button
     */
    public function render_group_row($field_group, $remove_disabled)
    {
        $field_group->peform_param_callback('before_group_row');
        $closed_class = $field_group->options('closed') ? ' closed' : '';
        echo '
		<div class="postbox cmb-row cmb-repeatable-grouping', $closed_class, '" data-iterator="', $field_group->index, '">';
        if ($field_group->args('repeatable')) {
            echo '<button ', $remove_disabled, 'data-selector="', $field_group->id(), '_repeat" class="dashicons-before dashicons-no-alt cmb-remove-group-row"></button>';
        }
        echo '
			<div class="cmbhandle" title="', __('Click to toggle', 'cmb2'), '"><br></div>
			<h3 class="cmb-group-title cmbhandle-title"><span>', $field_group->replace_hash($field_group->options('group_title')), '</span></h3>

			<div class="inside cmb-td cmb-nested cmb-field-list">';
        // Loop and render repeatable group fields
        foreach (array_values($field_group->args('fields')) as $field_args) {
            if ('hidden' == $field_args['type']) {
                // Save rendering for after the metabox
                $this->add_hidden_field(array('field_args' => $field_args, 'group_field' => $field_group));
            } else {
                $field_args['show_names'] = $field_group->args('show_names');
                $field_args['context'] = $field_group->args('context');
                $field = $this->get_field($field_args, $field_group)->render_field();
            }
        }
        if ($field_group->args('repeatable')) {
            echo '
					<div class="cmb-row cmb-remove-field-row">
						<div class="cmb-remove-row">
							<button ', $remove_disabled, 'data-selector="', $field_group->id(), '_repeat" class="button cmb-remove-group-row alignright">', $field_group->options('remove_button'), '</button>
						</div>
					</div>
					';
        }
        echo '
			</div>
		</div>
		';
        $field_group->peform_param_callback('after_group_row');
    }
Example #2
0
 /**
  * Render a repeatable group
  */
 public function render_group($args)
 {
     // If field is requesting to be conditionally shown
     if (isset($args['show_on_cb']) && is_callable($args['show_on_cb']) && !call_user_func($args['show_on_cb'], $this)) {
         return;
     }
     if (!isset($args['id'], $args['fields']) || !is_array($args['fields'])) {
         return;
     }
     $args['count'] = 0;
     $field_group = new CMB2_Field(array('field_args' => $args, 'object_type' => $this->object_type(), 'object_id' => $this->object_id()));
     $desc = $field_group->args('description');
     $label = $field_group->args('name');
     $sortable = $field_group->options('sortable') ? ' sortable' : '';
     $group_val = (array) $field_group->value();
     $nrows = count($group_val);
     $remove_disabled = $nrows <= 1 ? 'disabled="disabled" ' : '';
     echo '<div class="cmb-row cmb-repeat-group-wrap"><div class="cmb-td"><div id="', $field_group->id(), '_repeat" class="cmb-nested cmb-field-list cmb-repeatable-group', $sortable, '" style="width:100%;">';
     if ($desc || $label) {
         $class = $desc ? ' cmb-group-description' : '';
         echo '<div class="cmb-row', $class, '"><div class="cmb-th">';
         if ($label) {
             echo '<h2 class="cmb-group-name">', $label, '</h2>';
         }
         if ($desc) {
             echo '<p class="cmb2-metabox-description">', $desc, '</p>';
         }
         echo '</div></div>';
     }
     if (!empty($group_val)) {
         foreach ($group_val as $iterator => $field_id) {
             $this->render_group_row($field_group, $remove_disabled);
         }
     } else {
         $this->render_group_row($field_group, $remove_disabled);
     }
     echo '<div class="cmb-row"><div class="cmb-td"><p class="cmb-add-row"><button data-selector="', $field_group->id(), '_repeat" data-grouptitle="', $field_group->options('group_title'), '" class="cmb-add-group-row button">', $field_group->options('add_button'), '</button></p></div></div>';
     echo '</div></div></div>';
 }
Example #3
0
 /**
  * Render a repeatable group
  */
 public function render_group($args)
 {
     if (!isset($args['id'], $args['fields']) || !is_array($args['fields'])) {
         return;
     }
     $args['count'] = 0;
     $field_group = new CMB2_Field(array('field_args' => $args, 'object_type' => $this->object_type(), 'object_id' => $this->object_id()));
     $desc = $field_group->args('description');
     $label = $field_group->args('name');
     $sortable = $field_group->options('sortable') ? ' sortable' : '';
     $group_val = (array) $field_group->value();
     $nrows = count($group_val);
     $remove_disabled = $nrows <= 1 ? 'disabled="disabled" ' : '';
     echo '<li class="cmb-row cmb-repeat-group-wrap"><div class="cmb-td"><ul id="', $field_group->id(), '_repeat" class="cmb-nested repeatable-group' . $sortable . '" style="width:100%;">';
     if ($desc || $label) {
         $class = $desc ? ' cmb-group-description' : '';
         echo '<li class="cmb-row' . $class . '"><div class="cmb-th">';
         if ($label) {
             echo '<h2 class="cmb-group-name">' . $label . '</h2>';
         }
         if ($desc) {
             echo '<p class="cmb2_metabox_description">' . $desc . '</p>';
         }
         echo '</div></li>';
     }
     if (!empty($group_val)) {
         foreach ($group_val as $iterator => $field_id) {
             $this->render_group_row($field_group, $remove_disabled);
         }
     } else {
         $this->render_group_row($field_group, $remove_disabled);
     }
     echo '<li class="cmb-row"><div class="cmb-td"><p class="add-row"><button data-selector="', $field_group->id(), '_repeat" data-grouptitle="', $field_group->options('group_title'), '" class="add-group-row button">' . $field_group->options('add_button') . '</button></p></div></li>';
     echo '</ul></div></li>';
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 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));
 }
Example #6
0
/**
 * 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 
}
Example #7
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);
 }
Example #8
0
 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'];
 }
Example #9
0
/**
 * 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 
}