File "class-acf-field-group.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/advanced-custom-fields/includes/fields/class-acf-field-group.php
File
size: 8.52 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
if (!class_exists('acf_field__group')) {
class acf_field__group extends acf_field
{
function initialize()
{
$this->name = 'group';
$this->label = __('Group', 'acf');
$this->category = 'layout';
$this->defaults = array('sub_fields' => array(), 'layout' => 'block');
$this->have_rows = 'single';
$this->add_field_filter('acf/prepare_field_for_export', array($this, 'prepare_field_for_export'));
$this->add_field_filter('acf/prepare_field_for_import', array($this, 'prepare_field_for_import'));
}
function load_field($field)
{
$sub_fields = acf_get_fields($field);
if ($sub_fields) {
$field['sub_fields'] = $sub_fields;
}
return $field;
}
function load_value($value, $post_id, $field)
{
if (empty($field['sub_fields'])) {
return $value;
}
$field = $this->prepare_field_for_db($field);
$value = array();
foreach ($field['sub_fields'] as $sub_field) {
$value[$sub_field['key']] = acf_get_value($post_id, $sub_field);
}
return $value;
}
function format_value($value, $post_id, $field)
{
if (empty($value)) {
return false;
}
$field = $this->prepare_field_for_db($field);
foreach ($field['sub_fields'] as $sub_field) {
$sub_value = acf_extract_var($value, $sub_field['key']);
$sub_value = acf_format_value($sub_value, $post_id, $sub_field);
$value[$sub_field['_name']] = $sub_value;
}
return $value;
}
function update_value($value, $post_id, $field)
{
if (!acf_is_array($value)) {
return null;
}
if (empty($field['sub_fields'])) {
return null;
}
$field = $this->prepare_field_for_db($field);
foreach ($field['sub_fields'] as $sub_field) {
$v = false;
if (isset($value[$sub_field['key']])) {
$v = $value[$sub_field['key']];
} elseif (isset($value[$sub_field['_name']])) {
$v = $value[$sub_field['_name']];
} else {
continue;
}
acf_update_value($v, $post_id, $sub_field);
}
return '';
}
function prepare_field_for_db($field)
{
if (empty($field['sub_fields'])) {
return $field;
}
foreach ($field['sub_fields'] as &$sub_field) {
$sub_field['name'] = $field['name'] . '_' . $sub_field['_name'];
}
return $field;
}
function render_field($field)
{
if (empty($field['sub_fields'])) {
return;
}
foreach ($field['sub_fields'] as &$sub_field) {
if (isset($field['value'][$sub_field['key']])) {
$sub_field['value'] = $field['value'][$sub_field['key']];
} elseif (isset($sub_field['default_value'])) {
$sub_field['value'] = $sub_field['default_value'];
}
$sub_field['prefix'] = $field['name'];
if ($field['required']) {
$sub_field['required'] = 0;
}
}
if ($field['layout'] == 'table') {
$this->render_field_table($field);
} else {
$this->render_field_block($field);
}
}
function render_field_block($field)
{
$label_placement = $field['layout'] == 'block' ? 'top' : 'left';
echo '<div class="acf-fields -' . $label_placement . ' -border">';
foreach ($field['sub_fields'] as $sub_field) {
acf_render_field_wrap($sub_field);
}
echo '</div>';
}
function render_field_table($field)
{
?>
<table class="acf-table">
<thead>
<tr>
<?php
foreach ($field['sub_fields'] as $sub_field) {
$sub_field = acf_prepare_field($sub_field);
if (!$sub_field) {
continue;
}
$atts = array();
$atts['class'] = 'acf-th';
$atts['data-name'] = $sub_field['_name'];
$atts['data-type'] = $sub_field['type'];
$atts['data-key'] = $sub_field['key'];
if ($sub_field['wrapper']['width']) {
$atts['data-width'] = $sub_field['wrapper']['width'];
$atts['style'] = 'width: ' . $sub_field['wrapper']['width'] . '%;';
}
?>
<th <?php
acf_esc_attr_e($atts);
?>>
<?php
acf_render_field_label($sub_field);
?>
<?php
acf_render_field_instructions($sub_field);
?>
</th>
<?php
}
?>
</tr>
</thead>
<tbody>
<tr class="acf-row">
<?php
foreach ($field['sub_fields'] as $sub_field) {
acf_render_field_wrap($sub_field, 'td');
}
?>
</tr>
</tbody>
</table>
<?php
}
function render_field_settings($field)
{
$args = array('fields' => $field['sub_fields'], 'parent' => $field['ID']);
?>
<tr class="acf-field acf-field-setting-sub_fields" data-setting="group" data-name="sub_fields">
<td class="acf-label">
<label><?php
_e('Sub Fields', 'acf');
?></label>
</td>
<td class="acf-input">
<?php
acf_get_view('field-group-fields', $args);
?>
</td>
</tr>
<?php
acf_render_field_setting($field, array('label' => __('Layout', 'acf'), 'instructions' => __('Specify the style used to render the selected fields', 'acf'), 'type' => 'radio', 'name' => 'layout', 'layout' => 'horizontal', 'choices' => array('block' => __('Block', 'acf'), 'table' => __('Table', 'acf'), 'row' => __('Row', 'acf'))));
}
function validate_value($valid, $value, $field, $input)
{
if (empty($value)) {
return $valid;
}
if (empty($field['sub_fields'])) {
return $valid;
}
foreach ($field['sub_fields'] as $sub_field) {
$k = $sub_field['key'];
if (!isset($value[$k])) {
continue;
}
if ($field['required']) {
$sub_field['required'] = 1;
}
acf_validate_value($value[$k], $sub_field, "{$input}[{$k}]");
}
return $valid;
}
function duplicate_field($field)
{
$sub_fields = acf_extract_var($field, 'sub_fields');
$field = acf_update_field($field);
acf_duplicate_fields($sub_fields, $field['ID']);
return $field;
}
function prepare_field_for_export($field)
{
if (!empty($field['sub_fields'])) {
$field['sub_fields'] = acf_prepare_fields_for_export($field['sub_fields']);
}
return $field;
}
function prepare_field_for_import($field)
{
if (!empty($field['sub_fields'])) {
$sub_fields = acf_extract_var($field, 'sub_fields');
foreach ($sub_fields as $i => $sub_field) {
$sub_fields[$i]['parent'] = $field['key'];
$sub_fields[$i]['menu_order'] = $i;
}
return array_merge(array($field), $sub_fields);
}
return $field;
}
function delete_value($post_id, $meta_key, $field)
{
if (empty($field['sub_fields'])) {
return null;
}
$field = $this->prepare_field_for_db($field);
foreach ($field['sub_fields'] as $sub_field) {
acf_delete_value($post_id, $sub_field);
}
}
function delete_field($field)
{
if ($field['sub_fields']) {
foreach ($field['sub_fields'] as $sub_field) {
acf_delete_field($sub_field['ID']);
}
}
}
}
acf_register_field_type('acf_field__group');
}