<?php
if (!defined('ABSPATH')) {
exit;
}
if (!class_exists('ACF_Compatibility')) {
class ACF_Compatibility
{
function __construct()
{
add_filter('acf/validate_field', array($this, 'validate_field'), 20, 1);
add_filter('acf/validate_field/type=textarea', array($this, 'validate_textarea_field'), 20, 1);
add_filter('acf/validate_field/type=relationship', array($this, 'validate_relationship_field'), 20, 1);
add_filter('acf/validate_field/type=post_object', array($this, 'validate_relationship_field'), 20, 1);
add_filter('acf/validate_field/type=page_link', array($this, 'validate_relationship_field'), 20, 1);
add_filter('acf/validate_field/type=image', array($this, 'validate_image_field'), 20, 1);
add_filter('acf/validate_field/type=file', array($this, 'validate_image_field'), 20, 1);
add_filter('acf/validate_field/type=wysiwyg', array($this, 'validate_wysiwyg_field'), 20, 1);
add_filter('acf/validate_field/type=date_picker', array($this, 'validate_date_picker_field'), 20, 1);
add_filter('acf/validate_field/type=taxonomy', array($this, 'validate_taxonomy_field'), 20, 1);
add_filter('acf/validate_field/type=date_time_picker', array($this, 'validate_date_time_picker_field'), 20, 1);
add_filter('acf/validate_field/type=user', array($this, 'validate_user_field'), 20, 1);
add_filter('acf/validate_field_group', array($this, 'validate_field_group'), 20, 1);
add_filter('acf/field_wrapper_attributes', array($this, 'field_wrapper_attributes'), 20, 2);
add_filter('acf/location/validate_rule/type=post_taxonomy', array($this, 'validate_post_taxonomy_location_rule'), 20, 1);
add_filter('acf/location/validate_rule/type=post_category', array($this, 'validate_post_taxonomy_location_rule'), 20, 1);
add_action('acf/init', array($this, 'init'));
}
function init()
{
if (defined('ACF_LITE') && ACF_LITE) {
acf_update_setting('show_admin', false);
}
}
function field_wrapper_attributes($wrapper, $field)
{
if (acf_get_compatibility('field_wrapper_class')) {
$wrapper['class'] .= " field_type-{$field['type']}";
if ($field['key']) {
$wrapper['class'] .= " field_key-{$field['key']}";
}
}
return $wrapper;
}
function validate_field($field)
{
if (isset($field['conditional_logic']['status'])) {
if ($field['conditional_logic']['status']) {
$field['conditional_logic'] = acf_convert_rules_to_groups($field['conditional_logic']['rules'], $field['conditional_logic']['allorany']);
} else {
$field['conditional_logic'] = 0;
}
}
return $field;
}
function validate_textarea_field($field)
{
$formatting = acf_extract_var($field, 'formatting');
if ($formatting === 'br') {
$field['new_lines'] = 'br';
}
return $field;
}
function validate_relationship_field($field)
{
if (acf_in_array('all', $field['post_type'])) {
$field['post_type'] = array();
}
if (acf_in_array('all', $field['taxonomy'])) {
$field['taxonomy'] = array();
}
if (isset($field['result_elements'])) {
$field['elements'] = acf_extract_var($field, 'result_elements');
}
return $field;
}
function validate_image_field($field)
{
if (isset($field['save_format'])) {
$field['return_format'] = acf_extract_var($field, 'save_format');
}
if ($field['return_format'] == 'object') {
$field['return_format'] = 'array';
}
return $field;
}
function validate_wysiwyg_field($field)
{
if ($field['media_upload'] === 'yes') {
$field['media_upload'] = 1;
} elseif ($field['media_upload'] === 'no') {
$field['media_upload'] = 0;
}
return $field;
}
function validate_date_picker_field($field)
{
if (isset($field['date_format'])) {
$date_format = $field['date_format'];
$display_format = $field['display_format'];
$display_format = acf_convert_date_to_php($display_format);
$field['display_format'] = $display_format;
$field['save_format'] = $date_format;
unset($field['date_format']);
}
return $field;
}
function validate_taxonomy_field($field)
{
if (isset($field['load_save_terms'])) {
$field['save_terms'] = acf_extract_var($field, 'load_save_terms');
}
return $field;
}
function validate_date_time_picker_field($field)
{
if (!empty($field['time_format'])) {
$time_format = acf_extract_var($field, 'time_format');
$date_format = acf_extract_var($field, 'date_format');
$get_as_timestamp = acf_extract_var($field, 'get_as_timestamp');
$time_format = acf_convert_time_to_php($time_format);
$date_format = acf_convert_date_to_php($date_format);
$field['return_format'] = $date_format . ' ' . $time_format;
$field['display_format'] = $date_format . ' ' . $time_format;
if ($get_as_timestamp === 'true') {
$field['return_format'] = 'U';
}
}
return $field;
}
function validate_user_field($field)
{
if (acf_in_array('all', $field['role'])) {
$field['role'] = '';
}
if (isset($field['field_type'])) {
$field_type = acf_extract_var($field, 'field_type');
if ($field_type === 'multi_select') {
$field['multiple'] = true;
}
}
return $field;
}
function validate_field_group($field_group)
{
$version = 5;
if (!$field_group['key']) {
$version = 4;
$field_group['key'] = isset($field_group['id']) ? "group_{$field_group['id']}" : uniqid('group_');
}
if (isset($field_group['options'])) {
$options = acf_extract_var($field_group, 'options');
$field_group = array_merge($field_group, $options);
}
if (isset($field_group['location']['rules'])) {
$field_group['location'] = acf_convert_rules_to_groups($field_group['location']['rules'], $field_group['location']['allorany']);
}
$replace = array('taxonomy' => 'post_taxonomy', 'ef_media' => 'attachment', 'ef_taxonomy' => 'taxonomy', 'ef_user' => 'user_role', 'user_type' => 'current_user_role');
if ($version > 4) {
unset($replace['taxonomy']);
}
if ($field_group['location']) {
foreach ($field_group['location'] as $i => $group) {
if ($group) {
foreach ($group as $j => $rule) {
if (isset($replace[$rule['param']])) {
$field_group['location'][$i][$j]['param'] = $replace[$rule['param']];
}
}
}
}
}
if (isset($field_group['layout'])) {
$field_group['style'] = acf_extract_var($field_group, 'layout');
}
if ($field_group['style'] === 'no_box') {
$field_group['style'] = 'seamless';
}
return $field_group;
}
function validate_post_taxonomy_location_rule($rule)
{
if (is_numeric($rule['value'])) {
$term = acf_get_term($rule['value']);
if ($term) {
$rule['value'] = acf_encode_term($term);
}
}
return $rule;
}
}
acf_new_instance('ACF_Compatibility');
}
function acf_get_compatibility($name)
{
return apply_filters("acf/compatibility/{$name}", false);
}