oont-contents/plugins/astra-addon/classes/builder/class-astra-addon-builder-helper.php
2025-02-08 15:10:23 +01:00

265 lines
9 KiB
PHP

<?php
/**
* Astra Addon Builder Helper.
*
* @since 3.0.0
* @package astra-builder
*/
/**
* Class Astra_Addon_Builder_Helper.
*
* @since 3.0.0
*/
final class Astra_Addon_Builder_Helper {
/**
* Member Variable
*
* @since 3.0.0
* @var instance
*/
private static $instance = null;
/**
* Cached Helper Variable.
*
* @since 3.0.0
* @var instance
*/
private static $cached_properties = null;
/**
* No. Of. Component count array.
*
* @var int
*/
public static $component_count_array = array();
/**
* No. Of. Component Limit.
*
* @var int
*/
public static $component_limit = 10;
/**
* No. Of. Header Dividers.
*
* @since 3.0.0
* @var int
*/
public static $num_of_header_divider;
/**
* No. Of. Footer Dividers.
*
* @since 3.0.0
* @var int
*/
public static $num_of_footer_divider;
/**
* Initiator
*
* @since 3.0.0
*/
public static function get_instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*
* @since 3.0.0
*/
public function __construct() {
add_filter( 'astra_builder_elements_count', __CLASS__ . '::elements_count', 10 );
$component_count_by_key = self::elements_count();
self::$num_of_header_divider = $component_count_by_key['header-divider'];
self::$num_of_footer_divider = $component_count_by_key['footer-divider'];
}
/**
* Update the count of elements in HF Builder.
*
* @param array $elements array of elements having key as slug and value as count.
* @return array $elements
*/
public static function elements_count( $elements = array() ) {
$db_elements = get_option( 'astra-settings' );
$db_elements = isset( $db_elements['cloned-component-track'] ) ? $db_elements['cloned-component-track'] : array();
/**
* If the header-divider & footer-divider is set to 0, then set it to 3.
* Case: If the theme is active or any starter template with old astra-settings gets imported then the header-divider & footer-divider will be set to 0. So to avoid the conflict, we are setting it to 3 which is counter by Astra Addon.
*
* @since 4.3.0
*/
if ( isset( $db_elements['header-divider'] ) && 0 === $db_elements['header-divider'] ) {
$db_elements['header-divider'] = 3;
}
if ( isset( $db_elements['footer-divider'] ) && 0 === $db_elements['footer-divider'] ) {
$db_elements['footer-divider'] = 3;
}
if ( ! empty( $db_elements ) ) {
return $db_elements;
}
$elements['header-button'] = 2;
$elements['footer-button'] = 2;
$elements['header-html'] = 3;
$elements['footer-html'] = 2;
$elements['header-menu'] = 3;
$elements['header-widget'] = 4;
$elements['footer-widget'] = 6;
$elements['header-social-icons'] = 1;
$elements['footer-social-icons'] = 1;
$elements['header-divider'] = 3;
$elements['footer-divider'] = 3;
$elements['removed-items'] = array();
return $elements;
}
/**
* Callback of external properties.
*
* @param string $property_name property name.
* @return false
*/
public function __get( $property_name ) {
if ( isset( self::$cached_properties[ $property_name ] ) ) {
return self::$cached_properties[ $property_name ];
}
if ( property_exists( 'Astra_Addon_Builder_Helper', $property_name ) ) {
// Directly override theme helper properties.
$return_value = self::astra_addon_get_addon_helper_static( $property_name );
} else {
$return_value = property_exists( 'Astra_Builder_Helper', $property_name ) ? self::astra_addon_get_theme_helper_static( $property_name ) : false;
}
self::$cached_properties[ $property_name ] = $return_value;
return $return_value;
}
/**
* Callback to get theme's static property.
*
* @param string $prop_name function name.
* @return mixed
*/
public static function astra_addon_get_theme_helper_static( $prop_name ) {
$theme_static_sets = array(
'general_tab' => Astra_Builder_Helper::$general_tab,
'general_tab_config' => Astra_Builder_Helper::$general_tab_config,
'design_tab' => Astra_Builder_Helper::$design_tab,
'design_tab_config' => Astra_Builder_Helper::$design_tab_config,
'tablet_device' => Astra_Builder_Helper::$tablet_device,
'mobile_device' => Astra_Builder_Helper::$mobile_device,
'responsive_devices' => Astra_Builder_Helper::$responsive_devices,
'responsive_general_tab' => Astra_Builder_Helper::$responsive_general_tab,
'desktop_general_tab' => Astra_Builder_Helper::$desktop_general_tab,
'default_responsive_spacing' => Astra_Builder_Helper::$default_responsive_spacing,
'default_button_responsive_spacing' => isset( Astra_Builder_Helper::$default_button_responsive_spacing ) ? Astra_Builder_Helper::$default_button_responsive_spacing : Astra_Builder_Helper::$default_responsive_spacing,
'tablet_general_tab' => Astra_Builder_Helper::$tablet_general_tab,
'mobile_general_tab' => Astra_Builder_Helper::$mobile_general_tab,
'component_limit' => Astra_Builder_Helper::$component_limit,
'component_count_array' => Astra_Builder_Helper::$component_count_array,
'num_of_footer_widgets' => Astra_Builder_Helper::$num_of_footer_widgets,
'num_of_footer_html' => Astra_Builder_Helper::$num_of_footer_html,
'num_of_header_widgets' => Astra_Builder_Helper::$num_of_header_widgets,
'num_of_header_menu' => Astra_Builder_Helper::$num_of_header_menu,
'num_of_header_button' => Astra_Builder_Helper::$num_of_header_button,
'num_of_footer_button' => Astra_Builder_Helper::$num_of_footer_button,
'num_of_header_html' => Astra_Builder_Helper::$num_of_header_html,
'num_of_footer_columns' => Astra_Builder_Helper::$num_of_footer_columns,
'num_of_header_social_icons' => Astra_Builder_Helper::$num_of_header_social_icons,
'num_of_footer_social_icons' => Astra_Builder_Helper::$num_of_footer_social_icons,
'num_of_header_divider' => Astra_Builder_Helper::$num_of_header_divider,
'num_of_footer_divider' => Astra_Builder_Helper::$num_of_footer_divider,
'is_header_footer_builder_active' => Astra_Builder_Helper::$is_header_footer_builder_active,
'footer_row_layouts' => Astra_Builder_Helper::$footer_row_layouts,
'header_desktop_items' => Astra_Builder_Helper::$header_desktop_items,
'footer_desktop_items' => Astra_Builder_Helper::$footer_desktop_items,
'header_mobile_items' => Astra_Builder_Helper::$header_mobile_items,
'loaded_grid' => Astra_Builder_Helper::$loaded_grid,
'grid_size_mapping' => Astra_Builder_Helper::$grid_size_mapping,
);
return isset( $theme_static_sets[ $prop_name ] ) ? $theme_static_sets[ $prop_name ] : $prop_name;
}
/**
* Callback to get addon's static property.
*
* @param string $prop_name function name.
* @return mixed
*/
public static function astra_addon_get_addon_helper_static( $prop_name ) {
$addon_static_sets = array(
'component_count_array' => self::$component_count_array,
'component_limit' => self::$component_limit,
'num_of_header_divider' => self::$num_of_header_divider,
'num_of_footer_divider' => self::$num_of_footer_divider,
);
return isset( $addon_static_sets[ $prop_name ] ) ? $addon_static_sets[ $prop_name ] : $prop_name;
}
/**
* Callback exception for static methods.
*
* @param string $function_name function name.
* @param array $function_agrs function arguments.
* @return false|mixed
*/
public static function __callStatic( $function_name, $function_agrs ) {
$key = hash( 'sha256', $function_name ) . hash( 'sha256', maybe_serialize( $function_agrs ) );
if ( isset( self::$cached_properties[ $key ] ) ) {
return self::$cached_properties[ $key ];
}
if ( method_exists( 'Astra_Addon_Builder_Helper', $function_name ) ) {
// Check if self method exists.
$class_name = 'Astra_Addon_Builder_Helper';
} elseif ( method_exists( 'Astra_Builder_Helper', $function_name ) ) {
// if self method doesnot exists then check for theme helper.
$class_name = 'Astra_Builder_Helper';
} else {
// If not found anything then return false directly.
return false;
}
$return_value = call_user_func_array( array( $class_name, $function_name ), $function_agrs );
self::$cached_properties[ $key ] = $return_value;
return $return_value;
}
}
/**
* Prepare if class 'Astra_Addon_Builder_Helper' exist.
* Kicking this off by calling 'get_instance()' method
*/
Astra_Addon_Builder_Helper::get_instance();
/**
* Get instance to call properties and methods.
*
* @return Astra_Addon_Builder_Helper|instance|null
*/
function astra_addon_builder_helper() {
return Astra_Addon_Builder_Helper::get_instance();
}