/** * 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>'; }
/** * 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>'; }
/** * 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'); }
/** * 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; }