* @link https://www.elicus.com/
* @copyright 2022 Elicus Technologies Private Limited
* @version 1.6.0
*/
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
if( ! class_exists( 'El_Divi_Plus_Settings' ) ){
class El_Divi_Plus_Settings {
/**
* Plugin option name.
*
* @static
* @var string
* @access private
*/
private static $option;
/**
* Plugin version.
*
* @static
* @var string
* @access private
*/
private static $version;
/**
* Setting page title.
*
* @static
* @var string
* @access private
*/
private static $page_title;
/**
* Admin menu title.
*
* @static
* @var string
* @access private
*/
private static $menu_title;
/**
* Settings page slug.
*
* @static
* @var string
* @access private
*/
private static $menu_slug;
/**
* Plugin option page hook.
*
* @static
* @var string
* @access private
*/
private static $hook_suffix;
/**
* wpkses allowed html tags.
*
* @static
* @var array
* @access private
*/
private static $allowed_html;
/**
* Constructs the settings page.
*
* @uses el_admin_menu()
* @uses el_plugin_settings()
* @access public
*/
public function __construct($option) {
self::$option = $option;
self::$version = ELICUS_DIVI_PLUS_VERSION;
self::$page_title = 'Divi Plus';
self::$menu_title = 'Divi Plus';
self::$menu_slug = 'divi-plus-options';
self::$allowed_html = array(
'a' => array(
'href' => array(),
'title' => array(),
'target' => array(),
),
'em' => array(),
'strong' => array(
'class' => array(),
),
);
add_action( 'admin_menu', array( $this, 'el_admin_menu') );
// Ignoring 'page' warning as sanitizing 'page' below.
// phpcs:ignore WordPress,GET,POST,REQUEST.
if ( isset( $_GET['page'] ) && 'divi-plus-options' === sanitize_key( wp_unslash( $_GET['page'] ) ) ) {
add_action( 'admin_init', array( $this, 'el_plugin_settings' ) );
}
}
/**
* Adds the admin menu.
*
* @uses el_plugin_options()
* @access public
* @return void
*/
public function el_admin_menu() {
self::$hook_suffix = add_options_page( self::$page_title, self::$menu_title, 'activate_plugins', self::$menu_slug, array( $this, 'el_plugin_options' ) );
add_action('admin_enqueue_scripts', array( $this, 'el_panel_styles') );
add_action('admin_enqueue_scripts', array( $this, 'el_panel_scripts') );
}
/**
* Enqueue admin stylesheet for plugin panel.
*
* @return void
*/
public function el_panel_styles($hook_suffix){
if ( $hook_suffix == self::$hook_suffix ) {
wp_register_style('el-dipl-panel-style', plugins_url( '/panel/styles/panel.min.css', dirname(__FILE__) ), array(), self::$version );
wp_enqueue_style('el-dipl-panel-style');
}
}
/**
* Enqueue admin script for plugin panel.
*
* @return void
*/
public function el_panel_scripts($hook_suffix){
if ( $hook_suffix == self::$hook_suffix ) {
wp_register_script('el-dipl-panel-script', plugins_url( '/panel/scripts/panel.min.js', dirname(__FILE__) ), array( 'jquery' ), self::$version );
wp_localize_script(
'el-dipl-panel-script',
'el_dipl_panel_ajax_object',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'ajaxnonce' => wp_create_nonce( 'divi-plus-panel-nonce' ),
)
);
wp_enqueue_script('el-dipl-panel-script');
}
}
/**
* Creates setting page.
*
* @usedby el_admin_menu()
* @access public
* @return void
*/
public function el_plugin_options() {
?>
-
General
-
Extensions
-
Integration
Enabled
Disabled
%9$s',
et_core_esc_previously( $id ),
esc_html( $dependency ),
et_core_esc_previously( $value ),
et_core_esc_previously( $name ),
esc_html( $checked ),
et_core_esc_previously( $data_type ),
et_core_esc_previously( $dependent ),
et_core_esc_previously( $depends_on ),
et_core_esc_previously( $info )
),
'html'
);
}
/**
* Render dropdown field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_dropdown_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
if ( '' !== $setting ) {
$options = get_option( $setting );
if ( isset( $options ) && isset( $options[ $field_id ] ) ) {
$value = esc_attr( $options[ $field_id ] );
}
} else {
$options = get_option( $field_id );
if ( isset( $options ) && '' !== $options ) {
$value = esc_attr( $options );
}
}
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
$list_options = isset( $args['list_options'] ) ? $args['list_options'] : '';
if ( is_array( $list_options ) ) {
$list_options = array_map( 'esc_attr', $list_options );
$list = '';
foreach ( $list_options as $key => $option ) {
$selected = selected( esc_attr( $key ), $value, false );
$list .= '';
}
echo et_core_intentionally_unescaped(
sprintf(
'
%6$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $name ),
et_core_esc_previously( $data_type ),
et_core_esc_previously( $depends_on ),
et_core_intentionally_unescaped( $list, 'html' ),
et_core_esc_previously( $info )
),
'html'
);
} else {
echo et_core_intentionally_unescaped(
sprintf(
'%3$s
%4$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $depends_on ),
wp_kses( $list_options, self::$allowed_html ),
et_core_esc_previously( $info )
),
'html'
);
}
}
/**
* Render range slider field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_range_slider_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
if ( '' !== $setting ) {
$options = get_option( $setting );
if ( isset( $options ) && isset( $options[ $field_id ] ) ) {
$value = esc_attr( $options[ $field_id ] );
}
} else {
$options = get_option( $field_id );
if ( isset( $options ) && '' !== $options ) {
$value = esc_attr( $options );
}
}
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
echo et_core_intentionally_unescaped(
sprintf(
'
%2$s
%9$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $value ),
et_core_esc_previously( $name ),
et_core_esc_previously( $data_type ),
intval( $args['min'] ),
intval( $args['max'] ),
intval( $args['step'] ),
et_core_esc_previously( $depends_on ),
et_core_esc_previously( $info )
),
'html'
);
}
/**
* Render multiple checkbox field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_mutiple_checkbox_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
if ( '' !== $setting ) {
$options = get_option( $setting );
if ( isset( $options ) && isset( $options[ $field_id ] ) ) {
$value = esc_attr( $options[ $field_id ] );
}
} else {
$options = get_option( $field_id );
if ( isset( $options ) && '' !== $options ) {
$value = esc_attr( $options );
}
}
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
$list_options = isset( $args['list_options'] ) ? $args['list_options'] : '';
if ( is_array( $list_options ) ) {
$list_options = array_map( 'esc_attr', $list_options );
$list = '';
$value = array_map( 'esc_attr', explode( ',', $value ) );
foreach ( $list_options as $key => $option ) {
$checked = in_array( $key, $value, true ) ? checked( 1, 1, false ) : '';
$list .= '';
}
echo et_core_intentionally_unescaped(
sprintf(
'
%1$s
%7$s',
et_core_intentionally_unescaped( $list, 'html' ),
et_core_esc_previously( $id ),
esc_html( implode( ',', array_map( 'esc_attr', $value ) ) ),
et_core_esc_previously( $name ),
et_core_esc_previously( $data_type ),
et_core_esc_previously( $depends_on ),
et_core_esc_previously( $info )
),
'html'
);
} else {
echo et_core_intentionally_unescaped(
sprintf(
'%3$s
%4$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $depends_on ),
wp_kses( $list_options, self::$allowed_html ),
et_core_esc_previously( $info )
),
'html'
);
}
}
/**
* Render repeater field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_repeater_render( $args ) {
$value = isset( $args['default'] ) ? wp_specialchars_decode( $args['default'], ENT_COMPAT ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
if ( '' !== $setting ) {
$options = get_option( $setting );
if ( isset( $options ) && isset( $options[ $field_id ] ) ) {
$value = esc_attr( $options[ $field_id ] );
}
} else {
$options = get_option( $field_id );
if ( isset( $options ) && '' !== $options ) {
$value = esc_attr( $options );
}
}
$value = wp_specialchars_decode( $value, ENT_COMPAT );
$value = wp_unslash( $value );
$counter = isset( json_decode( $value, true )['counter'] ) ? intval( json_decode( $value, true )['counter'] ) : 0;
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
$fields = isset( $args['fields'] ) ? $args['fields'] : '';
if ( is_array( $fields ) ) {
$repeater_field_rows = array();
if ( 1 < $counter ) {
for ( $i = 1; $i <= $counter; $i++ ) {
$repeater_fields = array();
foreach ( $fields as $field ) {
if ( isset( $field[2]['field_id'] ) && isset( $field[2]['id'] ) ) {
$field[2]['field_id'] = preg_replace( '/[0-9]+/', $i, esc_html( $field[2]['field_id'] ) );
$field[2]['id'] = preg_replace( '/[0-9]+/', $i, esc_html( $field[2]['id'] ) );
$label = isset( $field[0] ) ?
sprintf(
esc_html__( '%s', 'divi-plus' ),
esc_html( $field[0] )
) :
'';
ob_start();
if ( isset( $field[1], $field[2] ) ) {
if ( method_exists( $this, $field[1] ) ) {
call_user_func( array( $this, $field[1] ), $field[2] );
}
}
$callback_field = ob_get_clean();
$repeater_field = sprintf(
'
%2$s
',
et_core_esc_previously( $label ),
et_core_intentionally_unescaped( $callback_field, 'html' )
);
array_push( $repeater_fields, $repeater_field );
}
}
$repeater_field_row = sprintf(
'',
et_core_intentionally_unescaped( implode( '', $repeater_fields ), 'html' )
);
array_push( $repeater_field_rows, $repeater_field_row );
}
} else {
$repeater_fields = array();
foreach ( $fields as $field ) {
if ( isset( $field[2]['field_id'] ) && isset( $field[2]['id'] ) ) {
$label = isset( $field[0] ) ?
sprintf(
esc_html__( '%s', 'divi-plus' ),
esc_html( $field[0] )
) :
'';
ob_start();
if ( isset( $field[1], $field[2] ) ) {
if ( method_exists( $this, $field[1] ) ) {
call_user_func( array( $this, $field[1] ), $field[2] );
}
}
$callback_field = ob_get_clean();
$repeater_field = sprintf(
'
%2$s
',
et_core_esc_previously( $label ),
et_core_intentionally_unescaped( $callback_field, 'html' )
);
array_push( $repeater_fields, $repeater_field );
}
}
$repeater_field_row = sprintf(
'',
et_core_intentionally_unescaped( implode( '', $repeater_fields ), 'html' )
);
array_push( $repeater_field_rows, $repeater_field_row );
}
echo et_core_intentionally_unescaped(
sprintf(
'
%8$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $name ),
et_core_esc_previously( $data_type ),
esc_attr( $value ),
et_core_esc_previously( $depends_on ),
et_core_esc_previously( $counter ),
et_core_intentionally_unescaped( implode( '', $repeater_field_rows ), 'html' ),
et_core_esc_previously( $info )
),
'html'
);
} else {
echo et_core_intentionally_unescaped(
sprintf(
'%3$s
%4$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $depends_on ),
wp_kses( $fields, self::$allowed_html ),
et_core_esc_previously( $info )
),
'html'
);
}
}
/**
* Render fieldset field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_fieldset_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
$fields = isset( $args['fields'] ) ? $args['fields'] : '';
if ( is_array( $fields ) ) {
$fieldset_fields = array();
foreach ( $fields as $field ) {
$label = isset( $field[0] ) ?
sprintf(
esc_html__( '%s', 'divi-plus' ),
esc_html( $field[0] )
) :
'';
ob_start();
if ( isset( $field[1], $field[2] ) ) {
if ( method_exists( $this, $field[1] ) ) {
call_user_func( array( $this, $field[1] ), $field[2] );
}
}
$callback_field = ob_get_clean();
$fieldset_field = sprintf(
'
%2$s
',
et_core_esc_previously( $label ),
et_core_intentionally_unescaped( $callback_field, 'html' )
);
array_push( $fieldset_fields, $fieldset_field );
}
echo et_core_intentionally_unescaped(
sprintf(
'
%4$s
%5$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $name ),
et_core_esc_previously( $depends_on ),
et_core_intentionally_unescaped( implode( '', $fieldset_fields ), 'html' ),
et_core_esc_previously( $info )
),
'html'
);
} else {
echo et_core_intentionally_unescaped(
sprintf(
'%3$s
%4$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $depends_on ),
wp_kses( $fields, self::$allowed_html ),
et_core_esc_previously( $info )
),
'html'
);
}
}
/**
* Render list field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_list_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
$list_options = isset( $args['list_options'] ) ? $args['list_options'] : '';
if ( is_array( $list_options ) ) {
$list = '';
foreach ( $list_options as $option ) {
$list .= '' . wp_kses( $option, self::$allowed_html ) . '';
}
echo et_core_intentionally_unescaped(
sprintf(
'
%5$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $name ),
et_core_esc_previously( $depends_on ),
et_core_intentionally_unescaped( $list, 'html' ),
et_core_esc_previously( $info )
),
'html'
);
} else {
echo et_core_intentionally_unescaped(
sprintf(
'%3$s
%4$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $depends_on ),
wp_kses( $list_options, self::$allowed_html ),
et_core_esc_previously( $info )
),
'html'
);
}
}
/**
* Render text field.
*
* @usedby el_plugin_settings
* @access public
*/
public function el_textfield_render( $args ) {
$value = isset( $args['default'] ) ? esc_attr( $args['default'] ) : '';
$name = isset( $args['field_id'] ) ? esc_attr( $args['field_id'] ) : '';
$setting = isset( $args['setting'] ) ? esc_attr( $args['setting'] ) : '';
$id = isset( $args['id'] ) ? esc_attr( $args['id'] ) : '';
$data_type = isset( $args['data-type'] ) ? esc_attr( $args['data-type'] ) : esc_attr( self::$option );
$info = isset( $args['info'] ) ? wp_kses( $args['info'], self::$allowed_html ) : '';
$field_id = $name;
if ( '' !== $setting ) {
$options = get_option( $setting );
if ( isset( $options ) && isset( $options[ $field_id ] ) ) {
$value = esc_attr( $options[ $field_id ] );
}
} else {
$options = get_option( $field_id );
if ( isset( $options ) && '' !== $options ) {
$value = esc_attr( $options );
}
}
$depends_on = ( isset( $args['depends-on'] ) ) ?
' data-depends-on="' . implode( ',', array_map( 'esc_attr', $args['depends-on'] ) ) . '"' :
'';
echo et_core_intentionally_unescaped(
sprintf(
'
%6$s',
et_core_esc_previously( $id ),
et_core_esc_previously( $value ),
et_core_esc_previously( $name ),
et_core_esc_previously( $data_type ),
et_core_esc_previously( $depends_on ),
et_core_esc_previously( $info )
),
'html'
);
}
}// End of El_Divi_Plus_Settings Class
new El_Divi_Plus_Settings(ELICUS_DIVI_PLUS_OPTION);
} // End of class_exists condition