38217-vm/wp-content/plugins/fusion-builder/inc/class-fusion-builder-element-helper.php
2026-02-05 17:08:59 +03:00

358 lines
14 KiB
PHP

<?php
/**
* Avada Builder Element Helper class.
*
* @package Avada-Builder
* @since 2.1
*/
// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
exit( 'Direct script access denied.' );
}
/**
* Avada Builder Element Helper class.
*
* @since 2.1
*/
class Fusion_Builder_Element_Helper {
/**
* Class constructor.
*
* @since 2.1
* @access public
*/
public function __construct() {
}
/**
* Replace placeholders with params.
*
* @since 2.1
* @access public
* @param array $params Element params.
* @param string $shortcode Shortcode handle.
* @return array
*/
public static function placeholders_to_params( $params, $shortcode ) {
// placeholder => callback.
$placeholders_to_params = [
'fusion_animation_placeholder' => 'Fusion_Builder_Animation_Helper::get_params',
'fusion_filter_placeholder' => 'Fusion_Builder_Filter_Helper::get_params',
'fusion_border_radius_placeholder' => 'Fusion_Builder_Border_Radius_Helper::get_params',
'fusion_gradient_placeholder' => 'Fusion_Builder_Gradient_Helper::get_params',
'fusion_pattern_placeholder' => 'Fusion_Builder_Pattern_Helper::get_params',
'fusion_mask_placeholder' => 'Fusion_Builder_Mask_Helper::get_params',
'fusion_gradient_text_placeholder' => 'Fusion_Builder_Gradient_Helper::get_text_params',
'fusion_margin_placeholder' => 'Fusion_Builder_Margin_Helper::get_params',
'fusion_margin_mobile_placeholder' => 'Fusion_Builder_Margin_Helper::get_params',
'fusion_box_shadow_placeholder' => 'Fusion_Builder_Box_Shadow_Helper::get_params',
'fusion_box_shadow_no_inner_placeholder' => 'Fusion_Builder_Box_Shadow_Helper::get_no_inner_params',
'fusion_text_shadow_placeholder' => 'Fusion_Builder_Text_Shadow_Helper::get_params',
'fusion_sticky_visibility_placeholder' => 'Fusion_Builder_Sticky_Visibility_Helper::get_params',
'fusion_form_autocomplete_placeholder' => 'Fusion_Builder_Form_Helper::get_autocomplete_params',
'fusion_form_logics_placeholder' => 'Fusion_Builder_Form_Logics_Helper::get_params',
'fusion_conditional_render_placeholder' => 'Fusion_Builder_Conditional_Render_Helper::get_params',
'fusion_transform_placeholder' => 'Fusion_Builder_Transform_Helper::get_params',
'fusion_transition_placeholder' => 'Fusion_Builder_Transition_Helper::get_params',
'fusion_motion_effects_placeholder' => 'Fusion_Builder_Motion_Effects_Helper::get_params',
'fusion_background_slider_placeholder' => 'Fusion_Builder_Background_Slider_Helper::get_params',
];
foreach ( $placeholders_to_params as $placeholder => $param_callback ) {
if ( isset( $params[ $placeholder ] ) ) {
$placeholder_args = is_array( $params[ $placeholder ] ) ? $params[ $placeholder ] : [ $params[ $placeholder ] ];
$placeholder_args['shortcode'] = $shortcode;
// Get placeholder element position.
$params_keys = array_keys( $params );
$position = array_search( $placeholder, $params_keys, true );
// Unset placeholder element as we don't need it anymore.
unset( $params[ $placeholder ] );
// Insert params.
$param_callback = false !== strpos( $param_callback, '::' ) ? $param_callback : 'Fusion_Builder_Element_Helper::' . $param_callback;
if ( is_callable( $param_callback ) ) {
array_splice( $params, $position, 0, call_user_func_array( $param_callback, [ $placeholder_args ] ) );
}
}
}
return $params;
}
/**
* Adds responsive params.
*
* @since 3.0
* @access public
* @param array $responsive_atts Element responsive attributes.
* @param array $params Element params.
* @param string $shortcode Shortcode handle.
* @return array
*/
public static function add_responsive_params( $responsive_atts, $params, $shortcode ) {
$fusion_settings = awb_get_fusion_settings();
foreach ( $responsive_atts as $att ) {
$position = array_search( $att['name'], array_keys( $params ), true );
$states = isset( $att['args']['additional_states'] ) ? $att['args']['additional_states'] : [ 'medium', 'small' ];
$responsive_params = [];
foreach ( $states as $state ) {
$param = $params[ $att['name'] ];
$param['param_name'] = $att['name'] . '_' . $state;
$param['description'] = $att['description'];
$param['default_option'] = false;
$param['responsive']['state'] = $state;
$param = self::add_responsive_values_data( $param, $state );
// Add relative description.
if ( isset( $param['description'] ) ) {
$builder_map = fusion_builder_map_descriptions( $shortcode, $param['param_name'] );
$dynamic_description = '';
if ( is_array( $builder_map ) ) {
$setting = ( isset( $builder_map['theme-option'] ) && '' !== $builder_map['theme-option'] ) ? $builder_map['theme-option'] : '';
$subset = ( isset( $builder_map['subset'] ) && '' !== $builder_map['subset'] ) ? $builder_map['subset'] : '';
$type = ( isset( $builder_map['type'] ) && '' !== $builder_map['type'] ) ? $builder_map['type'] : '';
$reset = ( ( isset( $builder_map['reset'] ) || 'range' === $type ) && '' !== $param['default'] ) ? $param['param_name'] : '';
$check_page = isset( $builder_map['check_page'] ) ? $builder_map['check_page'] : false;
$dynamic_description = $fusion_settings->get_default_description( $setting, $subset, $type, $reset, $param, $check_page );
$dynamic_description = apply_filters( 'fusion_builder_option_dynamic_description', $dynamic_description, $shortcode, $param['param_name'] );
$param['default_option'] = $setting;
$param['default_subset'] = $subset;
$param['option_map'] = $type;
}
if ( '' !== $dynamic_description ) {
$param['description'] = apply_filters( 'fusion_builder_option_description', $att['description'] . $dynamic_description, $shortcode, $param['param_name'] );
}
}
if ( isset( $att['args']['default_value'] ) && true === $att['args']['default_value'] ) {
$param['value'] = [ '' => 'Default' ] + $param['value'];
$param['default'] = '';
}
if ( isset( $att['args']['defaults'][ $state ] ) ) {
$param['default'] = $att['args']['defaults'][ $state ];
}
if ( isset( $att['args']['values'][ $state ] ) ) {
$param['value'] = $att['args']['values'][ $state ];
}
if ( isset( $att['args']['descriptions'][ $state ] ) ) {
$param['description'] = $att['args']['descriptions'][ $state ];
}
$responsive_params[ $param['param_name'] ] = $param;
}
$position_2 = $position;
if ( isset( $att['args']['exclude_main_state'] ) && true === $att['args']['exclude_main_state'] ) {
$position_2 = $position + 1;
}
// Insert responsive params.
$params = array_merge( array_slice( $params, 0, $position ), $responsive_params, array_slice( $params, $position_2 ) );
}
return $params;
}
/**
* Adds responsive values data.
*
* @since 3.0
* @access public
* @param array $param Element params.
* @param string $state Responsive state.
* @return array
*/
public static function add_responsive_values_data( $param, $state ) {
if ( isset( $param['type'] ) && isset( $param['value'] ) ) {
switch ( $param['type'] ) {
case 'dimension':
foreach ( $param['value'] as $key => $value ) {
$param['value'][ $key . '_' . $state ] = $value;
unset( $param['value'][ $key ] );
}
break;
}
}
return $param;
}
/**
* Get font family attributes.
*
* @since 2.2
* @access public
* @param array $params Element params.
* @param string $param Font family param name.
* @param string $format Format of returned value, string or array.
* @param bool $important Add !important to css props. only for string format.
* @return mixed
*/
public static function get_font_styling( $params, $param = 'font_family', $format = 'string', $important = false ) {
$style = [];
if ( '' !== $params[ 'fusion_font_family_' . $param ] ) {
if ( false !== strpos( $params[ 'fusion_font_family_' . $param ], 'var(' ) ) {
$style['font-family'] = $params[ 'fusion_font_family_' . $param ];
if ( function_exists( 'AWB_Global_Typography' ) ) {
$style['font-weight'] = AWB_Global_Typography()->get_var_string( $style['font-family'], 'font-weight' );
$style['font-style'] = AWB_Global_Typography()->get_var_string( $style['font-family'], 'font-style' );
}
} elseif ( false !== strpos( $params[ 'fusion_font_family_' . $param ], '\'' ) || 'inherit' === $params[ 'fusion_font_family_' . $param ] || false !== strpos( $params[ 'fusion_font_family_' . $param ], ',' ) || false !== strpos( $params[ 'fusion_font_family_' . $param ], 'var(' ) ) {
$style['font-family'] = $params[ 'fusion_font_family_' . $param ];
} else {
$style['font-family'] = '"' . $params[ 'fusion_font_family_' . $param ] . '"';
}
if ( '' !== $params[ 'fusion_font_variant_' . $param ] && ! isset( $style['font-weight'] ) ) {
$weight = str_replace( 'italic', '', $params[ 'fusion_font_variant_' . $param ] );
if ( $weight !== $params[ 'fusion_font_variant_' . $param ] ) {
$style['font-style'] = 'italic';
} else {
$style['font-style'] = 'normal';
}
if ( '' !== $weight ) {
$style['font-weight'] = $weight;
}
}
}
if ( 'string' === $format ) {
$style_str = '';
$important = $important ? ' !important' : '';
foreach ( $style as $key => $value ) {
$style_str .= $key . ':' . $value . $important . ';';
}
return $style_str;
}
return $style;
}
/**
* Adds states params.
*
* @since 3.0
* @access public
* @param array $states_atts Element states attributes.
* @param array $params Element params.
* @param string $shortcode Shortcode handle.
* @return array
*/
public static function add_states_params( $states_atts, $params, $shortcode ) {
$fusion_settings = awb_get_fusion_settings();
foreach ( $states_atts as $att ) {
$position = array_search( $att['name'], array_keys( $params ), true );
$states = isset( $att['states'] ) ? $att['states'] : [];
$states_params = [];
foreach ( $states as $key => $state ) {
$param = $params[ $att['name'] ];
$param['param_name'] = isset( $state['param_name'] ) ? $state['param_name'] : $att['name'] . '_' . $key;
$param['description'] = $att['description'];
$param['default_option'] = false;
$param['default_state_option'] = $att['name'];
$param['state'] = $key;
if ( isset( $state['default'] ) ) {
$param['default'] = $state['default'];
}
// Add relative description.
if ( isset( $param['description'] ) ) {
$builder_map = fusion_builder_map_descriptions( $shortcode, $param['param_name'] );
$dynamic_description = '';
if ( is_array( $builder_map ) ) {
$setting = ( isset( $builder_map['theme-option'] ) && '' !== $builder_map['theme-option'] ) ? $builder_map['theme-option'] : '';
$subset = ( isset( $builder_map['subset'] ) && '' !== $builder_map['subset'] ) ? $builder_map['subset'] : '';
$type = ( isset( $builder_map['type'] ) && '' !== $builder_map['type'] ) ? $builder_map['type'] : '';
$reset = ( ( isset( $builder_map['reset'] ) || 'range' === $type ) && '' !== $param['default'] ) ? $param['param_name'] : '';
$check_page = isset( $builder_map['check_page'] ) ? $builder_map['check_page'] : false;
$dynamic_description = $fusion_settings->get_default_description( $setting, $subset, $type, $reset, $param, $check_page );
$dynamic_description = apply_filters( 'fusion_builder_option_dynamic_description', $dynamic_description, $shortcode, $param['param_name'] );
$param['default_option'] = $setting;
$param['default_subset'] = $subset;
$param['option_map'] = $type;
}
if ( '' !== $dynamic_description ) {
$param['description'] = apply_filters( 'fusion_builder_option_description', $att['description'] . $dynamic_description, $shortcode, $param['param_name'] );
}
}
if ( isset( $state['preview'] ) ) {
$param['preview'] = $state['preview'];
}
if ( isset( $state['value'] ) ) {
$param['value'] = $state['value'];
}
if ( isset( $state['callback'] ) ) {
$param['callback'] = $state['callback'];
}
// Build responsive hover field.
if ( isset( $att['responsive'] ) && isset( $att['responsive']['additional_states'] ) && is_array( $att['responsive']['additional_states'] ) ) {
foreach ( $att['responsive']['additional_states'] as $responsive_state ) {
$r_param = $param;
$r_param['param_name'] = str_replace( $key, $responsive_state . '_' . $key, $param['param_name'] );
$r_param['default_state_option'] = $att['name'] . '_' . $responsive_state;
$r_param['responsive']['state'] = $responsive_state;
$states_params[ $r_param['param_name'] ] = $r_param;
}
}
$states_params[ $param['param_name'] ] = $param;
}
$position_2 = $position;
if ( isset( $att['states']['exclude_main_state'] ) && true === $att['states']['exclude_main_state'] ) {
$position_2 = $position + 1;
}
// Insert states params.
$params = array_merge( array_slice( $params, 0, $position ), $states_params, array_slice( $params, $position_2 ) );
}
return $params;
}
}
// Add replacement filter.
add_filter( 'fusion_builder_element_params', 'Fusion_Builder_Element_Helper::placeholders_to_params', 10, 2 );
// Add responsive filter.
add_filter( 'fusion_builder_responsive_params', 'Fusion_Builder_Element_Helper::add_responsive_params', 10, 3 );
// Add states filter.
add_filter( 'fusion_builder_states_params', 'Fusion_Builder_Element_Helper::add_states_params', 10, 3 );