299 lines
7.6 KiB
PHP
299 lines
7.6 KiB
PHP
<?php
|
|
/**
|
|
* Astra Addon Customizer
|
|
*
|
|
* @package Astra Addon
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
if ( ! class_exists( 'Astra_Addon_Customizer' ) ) :
|
|
|
|
/**
|
|
* Astra_Addon_Customizer
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
class Astra_Addon_Customizer {
|
|
|
|
/**
|
|
* Instance
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @var object Class object.
|
|
*/
|
|
private static $instance;
|
|
|
|
/**
|
|
* Initiator
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @return object initialized object of class.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @since 1.4.0
|
|
*/
|
|
public function __construct() {
|
|
|
|
add_action( 'customize_register', array( $this, 'customize_register' ) );
|
|
add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
|
add_action( 'customize_register', array( $this, 'customize_register_new' ), 3 );
|
|
|
|
}
|
|
|
|
/**
|
|
* Register custom section and panel.
|
|
*
|
|
* @since 1.0.0
|
|
* @param WP_Customize_Manager $wp_customize Theme Customizer object.
|
|
*/
|
|
public function customize_register_new( $wp_customize ) {
|
|
|
|
require ASTRA_EXT_DIR . 'classes/customizer/class-astra-customizer-notices-configs.php';
|
|
|
|
}
|
|
|
|
/**
|
|
* Register custom section and panel.
|
|
*
|
|
* @since 1.0.0
|
|
* @param WP_Customize_Manager $wp_customize Theme Customizer object.
|
|
*/
|
|
public function customize_register( $wp_customize ) {
|
|
|
|
// if Customizer Control base class exist.
|
|
if ( class_exists( 'Astra_Customizer_Control_Base' ) ) {
|
|
|
|
/**
|
|
* Add Controls
|
|
*/
|
|
Astra_Customizer_Control_Base::add_control(
|
|
'ast-customizer-refresh',
|
|
array(
|
|
'callback' => 'Astra_Control_Customizer_refresh',
|
|
'sanitize_callback' => '',
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
// Control Class files.
|
|
require ASTRA_EXT_DIR . 'classes/customizer/controls/class-astra-control-customizer-refresh.php';
|
|
|
|
}
|
|
|
|
/**
|
|
* Sanitize Alpha color
|
|
*
|
|
* @param string $color setting input.
|
|
* @return string setting input value.
|
|
*/
|
|
public static function sanitize_alpha_color( $color ) {
|
|
|
|
if ( '' === $color ) {
|
|
return '';
|
|
}
|
|
|
|
if ( false === strpos( $color, 'rgba' ) ) {
|
|
/* Hex sanitize */
|
|
return Astra_Customizer_Sanitizes::sanitize_hex_color( $color );
|
|
}
|
|
|
|
/* rgba sanitize */
|
|
$color = str_replace( ' ', '', $color );
|
|
sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
|
|
return 'rgba(' . $red . ',' . $green . ',' . $blue . ',' . $alpha . ')';
|
|
}
|
|
|
|
/**
|
|
* Sanitize background obj
|
|
*
|
|
* @param array $bg_obj Background object.
|
|
* @return array Background object.
|
|
*/
|
|
public static function sanitize_background_obj( $bg_obj ) {
|
|
if ( is_callable( 'Astra_Customizer_Sanitizes::sanitize_background_obj' ) ) {
|
|
return Astra_Customizer_Sanitizes::sanitize_background_obj( $bg_obj );
|
|
}
|
|
|
|
return $bg_obj;
|
|
}
|
|
|
|
/**
|
|
* Sanitize Border
|
|
*
|
|
* @param array $border Background object.
|
|
* @return array Background object.
|
|
*/
|
|
public static function sanitize_border( $border ) {
|
|
if ( is_callable( 'Astra_Customizer_Sanitizes::sanitize_border' ) ) {
|
|
return Astra_Customizer_Sanitizes::sanitize_border( $border );
|
|
}
|
|
|
|
return $border;
|
|
}
|
|
|
|
/**
|
|
* Sanitize Responsive Background Image
|
|
*
|
|
* @param array $bg_obj Background object.
|
|
* @return array Background object.
|
|
*/
|
|
public static function sanitize_responsive_background( $bg_obj ) {
|
|
if ( is_callable( 'Astra_Customizer_Sanitizes::sanitize_responsive_background' ) ) {
|
|
return Astra_Customizer_Sanitizes::sanitize_responsive_background( $bg_obj );
|
|
}
|
|
|
|
// Default Responsive Background Image.
|
|
$defaults = array(
|
|
'desktop' => array(
|
|
'background-color' => '',
|
|
'background-image' => '',
|
|
'background-repeat' => 'repeat',
|
|
'background-position' => 'center center',
|
|
'background-size' => 'auto',
|
|
'background-attachment' => 'scroll',
|
|
),
|
|
'tablet' => array(
|
|
'background-color' => '',
|
|
'background-image' => '',
|
|
'background-repeat' => 'repeat',
|
|
'background-position' => 'center center',
|
|
'background-size' => 'auto',
|
|
'background-attachment' => 'scroll',
|
|
),
|
|
'mobile' => array(
|
|
'background-color' => '',
|
|
'background-image' => '',
|
|
'background-repeat' => 'repeat',
|
|
'background-position' => 'center center',
|
|
'background-size' => 'auto',
|
|
'background-attachment' => 'scroll',
|
|
),
|
|
);
|
|
|
|
// Merge responsive background object and default object into $out_bg_obj array.
|
|
$out_bg_obj = wp_parse_args( $bg_obj, $defaults );
|
|
|
|
foreach ( $out_bg_obj as $device => $bg ) {
|
|
foreach ( $bg as $key => $value ) {
|
|
if ( 'background-image' === $key ) {
|
|
$out_bg_obj[ $device ] [ $key ] = esc_url_raw( $value );
|
|
} else {
|
|
$out_bg_obj[ $device ] [ $key ] = esc_attr( $value );
|
|
}
|
|
}
|
|
}
|
|
return $out_bg_obj;
|
|
}
|
|
|
|
/**
|
|
* Sanitize Box Shadow control
|
|
*
|
|
* @since 3.3.0
|
|
* @param array|number $val Customizer setting input number.
|
|
* @return array Return number.
|
|
*/
|
|
public static function sanitize_box_shadow( $val ) {
|
|
|
|
$box_shadow = array(
|
|
'x' => '',
|
|
'y' => '',
|
|
'blur' => '',
|
|
'spread' => '',
|
|
);
|
|
if ( is_array( $val ) ) {
|
|
$box_shadow['x'] = is_numeric( $val['x'] ) ? $val['x'] : '';
|
|
$box_shadow['y'] = is_numeric( $val['y'] ) ? $val['y'] : '';
|
|
$box_shadow['blur'] = is_numeric( $val['blur'] ) ? $val['blur'] : '';
|
|
$box_shadow['spread'] = is_numeric( $val['spread'] ) ? $val['spread'] : '';
|
|
}
|
|
return $box_shadow;
|
|
}
|
|
|
|
/**
|
|
* Sanitize Responsive Color
|
|
*
|
|
* @param array $color_obj color object.
|
|
* @return array color object.
|
|
*/
|
|
public static function sanitize_responsive_color( $color_obj ) {
|
|
|
|
// Default Responsive Background Image.
|
|
$defaults = array(
|
|
'desktop' => '',
|
|
'tablet' => '',
|
|
'mobile' => '',
|
|
);
|
|
|
|
// Merge responsive color object and default object into $out_color_obj array.
|
|
$out_color_obj = wp_parse_args( $color_obj, $defaults );
|
|
|
|
foreach ( $out_color_obj as $device => $color ) {
|
|
$out_color_obj[ $device ] = Astra_Customizer_Sanitizes::sanitize_alpha_color( $color );
|
|
}
|
|
return $out_color_obj;
|
|
}
|
|
|
|
/**
|
|
* Enqueue Admin Scripts
|
|
*
|
|
* @since 3.1.0
|
|
*/
|
|
public function enqueue_scripts() {
|
|
|
|
$dir_name = ( SCRIPT_DEBUG ) ? 'unminified' : 'minified';
|
|
$file_prefix = ( SCRIPT_DEBUG ) ? '' : '.min';
|
|
$js_uri = ASTRA_EXT_URI . 'classes/customizer/assets/js/';
|
|
|
|
wp_enqueue_style( 'ast-ext-admin-settings', ASTRA_EXT_URI . 'admin/assets/css/customizer-controls.css', array(), ASTRA_EXT_VER );
|
|
|
|
if ( ! SCRIPT_DEBUG ) {
|
|
// Enqueue Customizer script.
|
|
$custom_controls_deps = array(
|
|
'jquery',
|
|
'customize-base',
|
|
'jquery-ui-tabs',
|
|
'jquery-ui-sortable',
|
|
'wp-i18n',
|
|
'wp-components',
|
|
'wp-element',
|
|
'wp-media-utils',
|
|
'wp-block-editor',
|
|
);
|
|
|
|
wp_enqueue_script( 'astra-addon-custom-control-script', $js_uri . 'custom-controls.min.js', $custom_controls_deps, ASTRA_EXT_VER, true );
|
|
|
|
} else {
|
|
|
|
// Enqueue Customizer React.JS script.
|
|
$custom_controls_react_deps = array(
|
|
'astra-custom-control-plain-script',
|
|
'wp-i18n',
|
|
'wp-components',
|
|
'wp-element',
|
|
'wp-media-utils',
|
|
'wp-block-editor',
|
|
);
|
|
|
|
wp_enqueue_script( 'astra-addon-custom-control-react-script', ASTRA_EXT_URI . 'classes/customizer/extend-controls/build/index.js', $custom_controls_react_deps, ASTRA_EXT_VER, true );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize class object with 'get_instance()' method
|
|
*/
|
|
Astra_Addon_Customizer::get_instance();
|
|
|
|
endif;
|