%PDF- %PDF-
| Direktori : /www/klubovnaostrava/test/wp-content/plugins/businessx-extensions/inc/customizer/ |
| Current File : //www/klubovnaostrava/test/wp-content/plugins/businessx-extensions/inc/customizer/helpers.php |
<?php
/**
* ----------------------------------------
* Some helper functions for the Customizer
* ----------------------------------------
*/
if( ! function_exists( 'bx_ext_controller_register' ) ) {
/**
* Adds multiple settings and controls based on callback functions
* and arguments
*
* @since 1.0.4.3
* @param array $options An array containing callback functions and arguments for them
* @return object Multiple instances of WP_Customize_Manager
*/
function bx_ext_controller_register( $options = array() ) {
/* Bail if no options */
if( empty( $options ) ) return;
/* Register and output all the settings/controls */
foreach( $options as $option => $setting ) {
$func = 'bx_ext_controller_' . $setting[ 'callback' ];
$args = $setting[ 'args' ];
/* If the callback function doesn't exist, continue. */
if( ! function_exists( $func ) ) continue;
/* Call the callback function with our arguments */
call_user_func( $func, $args );
}
}
}
/* New controllers
/* ------------------------------------ */
if ( ! function_exists( 'bx_ext_controller_simple' ) ) {
/**
* Wrapper for $wp_customize->add_*, registers a Customizer
* setting and control
*
* @see https://developer.wordpress.org/reference/classes/wp_customize_manager/add_control/
* @see https://developer.wordpress.org/reference/classes/wp_customize_manager/add_setting/
* @since 1.0.4.3
* @param array $args An array containing new arguments for add_setting & add_control
* @return object WP_Customize_Manager instance
*/
function bx_ext_controller_simple( $args = array() ) {
global $wp_customize;
/* Bail if $wp_customize doesn't exist */
if( ! is_object( $wp_customize ) ) return;
/* Vars */
$setting_args = $control_args = array();
/* Defaults */
$defaults = array(
'type' => 'text',
'setting_id' => '',
'section_id' => '',
'label' => '',
'description' => '',
'default' => '',
'selector' => '',
'transport' => true,
'sanitize' => 'sanitize_text_field',
'escape' => 'esc_html',
'priority' => 10,
'capability' => 'edit_theme_options',
'postmsg' => false
);
/* New args */
$args = wp_parse_args( $args, $defaults );
$type = $args['type'];
$args = apply_filters( 'bx_ext_controller_simple___' . $type .'_args', $args, $defaults, $type );
$setting_id = $args['setting_id'];
$section_id = $args['section_id'];
$label = $args['label'];
$description = $args['description'];
$default = $args['default'];
$selector = $args['selector'];
$sanitize = $args['sanitize'];
$escape = $args['escape'];
$priority = $args['priority'];
$capability = $args['capability'];
$postmsg = $args['postmsg'];
/**
* Transport type
* @see https://codex.wordpress.org/Theme_Customization_API#Part_2:_Generating_Live_CSS
* @var string
*/
$transport = $args['transport'] ? 'postMessage' : 'refresh';
/* Default section args */
$settings_args = apply_filters( 'bx_ext_controller_simple___' . $type .'_settings_args', array(
'default' => $default,
'sanitize_callback' => $sanitize,
'capability' => $capability,
'transport' => $transport,
), $args, $type, $transport );
/* Default control args */
$control_args = apply_filters( 'bx_ext_controller_simple___' . $type .'_control_args', array(
'label' => $label,
'description' => $description,
'section' => $section_id,
'settings' => $setting_id,
'type' => $type,
'priority' => intval( $priority ),
), $args, $type );
/* The type of control and setting we display and register. */
$types = array(
'select' => 1,
'checkbox' => 1,
'textarea' => 1,
'text' => 1,
'rgb' => 1,
'rgba' => 1,
'image' => 1,
'info' => 1,
'tabs' => 1,
);
if( array_key_exists( $type, $types ) ) {
switch( $type ) {
/**
* Tabs
*/
case 'tabs':
$control_args['type'] = 'section-tabs';
$control_args['title_colors'] = __( 'Colors', 'businessx-extensions' );
$control_args['title_background'] = __( 'Background', 'businessx-extensions' );
$wp_customize->add_setting( $setting_id, array() );
$wp_customize->add_control( new BXEXT_Control_Tabs( $wp_customize, $setting_id, $control_args ) );
break;
/**
* Information
*/
case 'info':
$control_args['type'] = 'info-control';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( new Businessx_Control_Info( $wp_customize, $setting_id, $control_args ) );
break;
/**
* Image uploader
*/
case 'image':
$control_args['type'] = 'image';
$settings_args['sanitize'] = $sanitize !== 'esc_html' ? $sanitize : 'esc_url_raw';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, $setting_id, $control_args ) );
break;
/**
* RGBA color picker
*/
case 'rgba':
$control_args['type'] = 'alpha-color';
$control_args['show_opacity'] = ! empty( $args['show_opacity'] ) ? $args['show_opacity'] : true;
$control_args['palette'] = ! empty( $args['palette'] ) ? $args['palette'] : array();
$settings_args['sanitize'] = $sanitize !== 'esc_html' ? $sanitize : 'businessx_sanitize_rgba';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( new Businessx_Control_RGBA( $wp_customize, $setting_id, $control_args ) );
break;
/**
* RGB color picker
*/
case 'rgb':
$control_args['type'] = 'color';
$settings_args['sanitize'] = $sanitize !== 'esc_html' ? $sanitize : 'sanitize_hex_color';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $setting_id, $control_args ) );
break;
/**
* Select box
*/
case 'select':
$control_args['type'] = 'select';
$control_args['width'] = ! empty( $args['width'] ) ? $args['width'] : '100';
$control_args['choices'] = ! empty( $args['choices'] ) ? $args['choices'] : array();
$settings_args['sanitize'] = $sanitize !== 'esc_html' ? $sanitize : 'businessx_sanitize_select';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( $setting_id, $control_args );
break;
/**
* Checkbox input
*/
case 'checkbox':
$control_args['type'] = 'checkbox';
$settings_args['sanitize'] = 'businessx_sanitize_checkbox';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( $setting_id, $control_args );
break;
/**
* Textarea field
*/
case 'textarea':
$control_args['type'] = 'textarea';
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( $setting_id, $control_args );
break;
/**
* Simple text field
*/
default:
$wp_customize->add_setting( $setting_id, $settings_args );
$wp_customize->add_control( $setting_id, $control_args );
}
}
/* Selective refresh in case transport is set to true */
if( $transport && $type !== 'rgb' && $type !== 'rgba' && $type !== 'image' && $type !== 'background' && $type !== 'opacity' && $postmsg === false ) {
$wp_customize->selective_refresh->add_partial( $setting_id, array(
'selector' => $selector,
'render_callback' => function() use ( &$setting_id, &$escape ) {
$tm = get_theme_mod( $setting_id );
if( function_exists( $escape ) ) {
return call_user_func( $escape, $tm );
} else {
return esc_html( $tm );
}
},
) );
}
/* Add new controls & settings */
do_action( 'bx_ext_controller_simple__new', $defaults, $args, $type, $settings_args, $control_args );
}
}
if( ! function_exists( 'bx_ext_controller_custom' ) ) {
/**
* Adds some custom options with preset defaults, build up with `bx_ext_controller_simple()`.
* Defaults to `background` if not `type` is chosen
*
* @since 1.0.4.3
* @param array $args A few custom arguments for `bx_ext_controller_simple()`
* @return object WP_Customize_Manager instance
*/
function bx_ext_controller_custom( $args = array() ) {
/* Defaults */
$defaults = array(
'type' => 'background',
'setting_id' => '',
'section_id' => '',
'default' => '',
);
/* New args */
$args = wp_parse_args( $args, $defaults );
$type = $args['type'];
$setting_id = $args['setting_id'];
$section_id = $args['section_id'];
$default = $args['default'];
/* The type of control and setting we display and register. */
$types = array(
'overlay' => 1,
'background' => 1
);
if( array_key_exists( $type, $types ) ) {
switch( $type ) {
/**
* Background overlay options
*/
case 'overlay':
// Show or hide overlay
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___overlay_show', array(
'type' => 'checkbox',
'setting_id' => $setting_id,
'section_id' => $section_id,
'label' => esc_html__( 'Show Background Overlay', 'businessx-extensions' ),
'default' => false,
'transport' => false,
'sanitize' => 'businessx_sanitize_checkbox',
), $type, $setting_id, $section_id ) );
// Overlay color
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___overlay_color', array(
'type' => 'rgb',
'setting_id' => $setting_id . '_color',
'section_id' => $section_id,
'label' => esc_html__( 'Overlay background color:', 'businessx-extensions' ),
'default' => $default === '' ? '#000000' : $default,
), $type, $setting_id, $section_id, $default ) );
// Overlay opacity
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___overlay_opacity', array(
'type' => 'select',
'setting_id' => $setting_id . '_opacity',
'section_id' => $section_id,
'label' => esc_html__( 'Background overlay opacity:', 'businessx-extensions' ),
'default' => '0.5',
'choices' => bx_ext_controller_overlay_opacity( $setting_id ),
'postmsg' => true,
), $type, $setting_id, $section_id ) );
break;
/**
* Background image options
*/
default:
// Image upload
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___bg_image', array(
'type' => 'image',
'setting_id' => $setting_id,
'section_id' => $section_id,
'label' => esc_html__( 'Background Image:', 'businessx-extensions' ),
'description' => esc_html__( 'Use a HD image, suggested size: 1920x1080px', 'businessx-extensions' ),
), $type, $setting_id, $section_id ) );
// Select a background size
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___bg_size', array(
'type' => 'select',
'setting_id' => $setting_id . '_size',
'section_id' => $section_id,
'label' => esc_html__( 'Background-size:', 'businessx-extensions' ),
'default' => 'cover',
'choices' => businessx_bg_options_size(),
'postmsg' => true,
), $type, $setting_id . '_size', $section_id ) );
// Select how the background repeats
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___bg_repeat', array(
'type' => 'select',
'setting_id' => $setting_id . '_repeat',
'section_id' => $section_id,
'label' => esc_html__( 'Background-repeat:', 'businessx-extensions' ),
'default' => 'no-repeat',
'choices' => businessx_bg_options_repeat(),
'postmsg' => true,
), $type, $setting_id . '_repeat', $section_id ) );
// Select a background position
bx_ext_controller_simple( apply_filters( 'bx_ext_controller_custom___bg_position', array(
'type' => 'select',
'setting_id' => $setting_id . '_position',
'section_id' => $section_id,
'label' => esc_html__( 'Background-position:', 'businessx-extensions' ),
'default' => 'center center',
'choices' => businessx_bg_options_position(),
'postmsg' => true,
), $type, $setting_id . '_position', $section_id ) );
}
}
/* Add new controls & settings */
do_action( 'bx_ext_controller_custom__new', $defaults, $args, $type, $setting_id, $section_id, $default );
}
}
if ( ! function_exists( 'bx_ext_controller_overlay_opacity' ) ) {
/**
* An array of options for a select option that changes
* the overlay opacty
*
* @since 1.0.4.3
* @param string $setting_id The theme mod setting ID
* @return array From 10% to 100% options
*/
function bx_ext_controller_overlay_opacity( $setting_id ) {
return apply_filters( 'businessx_' . $setting_id . '_opacity_select_filter', array(
'0' => esc_html__( 'Transparent', 'businessx-extensions' ),
'0.1' => esc_html__( '10%', 'businessx-extensions' ),
'0.2' => esc_html__( '20%', 'businessx-extensions' ),
'0.3' => esc_html__( '30%', 'businessx-extensions' ),
'0.4' => esc_html__( '40%', 'businessx-extensions' ),
'0.5' => esc_html__( '50%', 'businessx-extensions' ),
'0.6' => esc_html__( '60%', 'businessx-extensions' ),
'0.7' => esc_html__( '70%', 'businessx-extensions' ),
'0.8' => esc_html__( '80%', 'businessx-extensions' ),
'0.9' => esc_html__( '90%', 'businessx-extensions' ),
'1' => esc_html__( '100%', 'businessx-extensions' ),
) );
}
}