38217-vm/wp-content/themes/Avada/includes/lib/inc/fusion-app/class-fusion-preferences.php
2026-02-05 17:08:59 +03:00

304 lines
11 KiB
PHP

<?php
/**
* Main Fusion_Preferences Class.
*
* @since 2.0
* @package fusion-library
*/
/**
* Main Fusion_Preferences Class.
*
* @since 2.0
*/
class Fusion_Preferences {
/**
* The one, true instance of this object.
*
* @static
* @access private
* @since 2.0
* @var object
*/
private static $instance;
/**
* An array of preferences.
*
* @static
* @access public
* @var null|object
*/
public static $preferences = null;
/**
* Creates or returns an instance of this class.
*
* @static
* @access public
* @since 2.0
*/
public static function get_instance() {
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
if ( null === self::$instance ) {
self::$instance = new Fusion_Preferences();
}
return self::$instance;
}
/**
* Initializes the plugin by setting localization, hooks, filters,
* and administrative functions.
*
* @access private
* @since 2.0
*/
public function __construct() {
if ( ! is_user_logged_in() ) {
return;
}
$this->init();
}
/**
* Initializes the plugin by setting localization, hooks, filters,
* and administrative functions.
*
* @access public
* @since 2.0
*/
public function init() {
$this->set_preferences();
// Save builder preferences.
add_action( 'wp_ajax_fusion_app_save_builder_preferences', [ $this, 'save_preferences' ] );
}
/**
* Sets Avada Builder front-end preferences.
*
* @access public
* @since 2.0
*/
public function set_preferences() {
$db_preference = get_option( 'fusion_builder_frontend_preferences' );
if ( false === $db_preference ) {
self::$preferences = [];
} else {
self::$preferences = $db_preference;
}
}
/**
* Gets Avada Builder front-end preferences.
*
* @access public
* @since 2.0
*/
public function get_preferences() {
return self::$preferences;
}
/**
* Save Avada Builder front-end preferences.
*
* @access public
* @since 2.0
*/
public function save_preferences() {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
if ( isset( $_POST['preferences'] ) ) {
$prferences_data = wp_unslash( $_POST['preferences'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
update_option( 'fusion_builder_frontend_preferences', $prferences_data );
$this->set_preferences();
echo wp_json_encode( $this->params(), JSON_FORCE_OBJECT );
die();
}
}
/**
* This method is used to get fusion builder preferences options.
*
* @access public
* @since 3.0.10
*/
public function params() {
$params = [
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Builder Styling Mode', 'fusion-builder' ),
'description' => esc_html__( 'Choose if you want a light or dark builder UI style.', 'fusion-builder' ),
'param_name' => 'styling_mode',
'value' => [
'light' => esc_html__( 'Light', 'fusion-builder' ),
'dark' => esc_html__( 'Dark', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['styling_mode'] ) ? self::$preferences['styling_mode'] : 'light' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Sidebar Panel Position', 'fusion-builder' ),
'description' => esc_html__( 'Select the side which you want the sidebar panel to be displayed on.', 'fusion-builder' ),
'param_name' => 'sidebar_position',
'value' => [
'left' => esc_html__( 'Left', 'fusion-builder' ),
'right' => esc_html__( 'Right', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['sidebar_position'] ) ? self::$preferences['sidebar_position'] : 'left' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Element Editing Mode', 'fusion-builder' ),
'description' => esc_html__( 'Choose if element editing should be in the sidebar or in dialogs.', 'fusion-builder' ),
'param_name' => 'editing_mode',
'value' => [
'sidebar' => esc_html__( 'Sidebar', 'fusion-builder' ),
'dialog' => esc_html__( 'Dialog', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['editing_mode'] ) ? self::$preferences['editing_mode'] : 'sidebar' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Automatically Open Element Settings', 'fusion-builder' ),
'description' => esc_html__( 'Choose if the settings should be opened automatically after adding an element.', 'fusion-builder' ),
'param_name' => 'open_settings',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['open_settings'] ) ? self::$preferences['open_settings'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Enable Keyboard Shortcuts', 'fusion-builder' ),
'description' => esc_html__( 'Choose if keyboard shortcuts should be enabled or disabled.', 'fusion-builder' ),
'param_name' => 'keyboard_shortcuts',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['keyboard_shortcuts'] ) ? self::$preferences['keyboard_shortcuts'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Show Option Descriptions By Default', 'fusion-builder' ),
'description' => esc_html__( 'Choose if option descriptions should be shown or hidden by default.', 'fusion-builder' ),
'param_name' => 'descriptions',
'value' => [
'show' => esc_html__( 'Show', 'fusion-builder' ),
'hide' => esc_html__( 'Hide', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['descriptions'] ) ? self::$preferences['descriptions'] : 'hide' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Show Tooltips', 'fusion-builder' ),
'description' => esc_html__( 'Choose if tooltips should be enabled or disabled.', 'fusion-builder' ),
'param_name' => 'tooltips',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['tooltips'] ) ? self::$preferences['tooltips'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => __( 'Enable Sticky Header & Containers', 'fusion-builder' ),
'description' => esc_html__( 'Choose if sticky header and sticky containers should be enabled or disabled.', 'fusion-builder' ),
'param_name' => 'sticky_header',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['sticky_header'] ) ? self::$preferences['sticky_header'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => __( 'Enable Transparent Header & Absolute Containers', 'fusion-builder' ),
'description' => esc_html__( 'Choose if transparent header and absolute containers should be enabled or disabled.', 'fusion-builder' ),
'param_name' => 'transparent_header',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['transparent_header'] ) ? self::$preferences['transparent_header'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Enable Preview for Filter Options', 'fusion-builder' ),
'description' => esc_html__( 'Choose if element filter options preview should be enabled or disabled.', 'fusion-builder' ),
'param_name' => 'element_filters',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['element_filters'] ) ? self::$preferences['element_filters'] : 'on' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Enable Preview for Transform Options', 'fusion-builder' ),
'description' => esc_html__( 'Choose if element transform options preview.', 'fusion-builder' ),
'param_name' => 'element_transform',
'value' => [
'always' => esc_html__( 'Always', 'fusion-builder' ),
'editing' => esc_html__( 'Editing', 'fusion-builder' ),
'never' => esc_html__( 'Never', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['element_transform'] ) ? self::$preferences['element_transform'] : 'editing' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Show Droppable Areas While Dragging', 'fusion-builder' ),
'description' => esc_html__( 'Enable in order to see all dropppable areas while dragging element.', 'fusion-builder' ),
'param_name' => 'droppables_visible',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['droppables_visible'] ) ? self::$preferences['droppables_visible'] : 'off' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Sidebar Panel Overlay Mode', 'fusion-builder' ),
'description' => esc_html__( 'Choose if the sidebar panel should act as an overlay. If enabled, the sidebar will overlay the preview content.', 'fusion-builder' ),
'param_name' => 'sidebar_overlay',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['sidebar_overlay'] ) ? self::$preferences['sidebar_overlay'] : 'off' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Options Sub Tabs', 'fusion-builder' ),
'description' => esc_html__( 'Choose if options sub tabs expanded or collapsed.', 'fusion-builder' ),
'param_name' => 'options_subtabs',
'value' => [
'expanded' => esc_html__( 'Expanded', 'fusion-builder' ),
'collapsed' => esc_html__( 'Collapsed', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['options_subtabs'] ) ? self::$preferences['options_subtabs'] : 'expanded' ),
],
[
'type' => 'radio_button_set',
'heading' => esc_html__( 'Enable Preview For Rendering Logic', 'fusion-builder' ),
'description' => esc_html__( 'Choose to enable the device rendering logic preview for container and columns.', 'fusion-builder' ),
'param_name' => 'rendering_logic',
'value' => [
'on' => esc_html__( 'On', 'fusion-builder' ),
'off' => esc_html__( 'Off', 'fusion-builder' ),
],
'default' => ( isset( self::$preferences['rendering_logic'] ) ? self::$preferences['rendering_logic'] : 'on' ),
],
];
return $params;
}
}