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