38217-vm/wp-content/plugins/fusion-builder/inc/class-fusion-builder-options-panel.php
2026-02-05 17:08:59 +03:00

210 lines
6.7 KiB
PHP

<?php
/**
* Handled the options panel for Element Options.
*
* @package fusion-builder
* @subpackage Options
* @since 1.1.0
*/
/**
* Instantiates Fusion Options
* and takes care of its options.
*/
class Fusion_Builder_Options_Panel {
/**
* The arguments we'll be passing-on to the options-framework.
*
* @access protected
* @since 1.1.0
* @var array
*/
protected $args = [];
/**
* The Fusion_Builder_Redux object.
*
* @access private
* @since 1.1.0
* @var object
*/
private $fusion_builder_redux;
/**
* Constructor.
*
* @since 1.1.0
*/
public function __construct() {
$this->includes();
// Set vars for i18n handling.
$option_name = Fusion_Settings::get_option_name();
$is_language_all = ( 'all' === Fusion_Multilingual::get_active_language() );
$default_language = Fusion_Multilingual::get_default_language();
if ( $is_language_all && 'fusion_options' === $option_name ) {
$option_name = $option_name . '_' . $default_language;
}
$this->args = [
'sections' => Fusion_Builder_Options::get_instance(),
'is_language_all' => $is_language_all,
'default_language' => $default_language,
'option_name' => $option_name,
'original_option_name' => Fusion_Settings::get_original_option_name(),
'version' => FUSION_BUILDER_VERSION,
'textdomain' => 'fusion-builder',
'disable_dependencies' => false,
'display_name' => 'Avada Builder',
'menu_title' => esc_attr__( 'Element Options', 'fusion-builder' ),
'page_title' => esc_attr__( 'Element Options', 'fusion-builder' ),
'global_variable' => 'fusion_fusionredux_options',
'page_parent' => 'fusion-builder-options',
'page_slug' => 'fusion-element-options',
'menu_type' => 'submenu',
'page_permissions' => 'manage_options',
];
if ( ! is_customize_preview() ) {
require_once FUSION_BUILDER_PLUGIN_DIR . 'inc/class-fusion-builder-redux.php';
// If the current theme doesn't have an integration with fusion-builder-options
// Instantiate our admin options.
if ( ! current_theme_supports( 'fusion-builder-options' ) ) {
$this->init_redux();
}
}
add_filter( 'fusion_admin_options_injection', [ $this, 'fusion_options_integration' ] );
}
/**
* Instantiates the options panel.
*
* @access public
* @since 1.1.0
*/
public function init_redux() {
$this->fusion_builder_redux = new Fusion_Builder_Redux( $this->args );
}
/**
* Include any needed files.
*
* @access protected
* @since 1.1.0
*/
protected function includes() {
if ( ! class_exists( 'Fusion_Builder_Options' ) ) {
include_once FUSION_BUILDER_PLUGIN_DIR . 'inc/class-fusion-builder-options.php';
}
}
/**
* Allows adding our options to another options panel.
*
* @access public
* @since 1.1.0
* @param object $sections The sections object.
* @return object
*/
public function fusion_options_integration( $sections ) {
$fb_options = Fusion_Builder_Options::get_instance();
$element_options = $fb_options->sections;
$fields_array = fusion_get_fields_array( $sections );
$has_addons_class = '';
// Options tweaks.
$option_panels = [
'shortcode_styling',
'fusion_builder_addons',
];
if ( ! isset( $element_options['fusion_builder_addons'] ) ) {
$has_addons_class = 'fusion-builder-no-addon-elements';
}
foreach ( $option_panels as $option_panel ) {
if ( isset( $element_options[ $option_panel ] ) ) {
ksort( $element_options[ $option_panel ]['fields'] );
if ( current_theme_supports( 'fusion-builder-options' ) ) {
foreach ( $element_options[ $option_panel ]['fields'] as $key => $value ) {
$element_options[ $option_panel ]['fields'][ $key ]['type'] = 'accordion';
if ( isset( $element_options[ $option_panel ]['fields'][ $key ]['fields'] ) &&
is_array( $element_options[ $option_panel ]['fields'][ $key ]['fields'] ) ) {
foreach ( $element_options[ $option_panel ]['fields'][ $key ]['fields'] as $field_key => $field_value ) {
if ( is_array( $fields_array ) && in_array( $field_key, $fields_array ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
// If the field already exist somewhere in $sections, then don't add twice.
$element_options[ $option_panel ]['fields'][ $key ];
unset( $element_options[ $option_panel ]['fields'][ $key ]['fields'][ $field_key ] ); // @phpstan-ignore-line
if ( empty( $element_options[ $option_panel ]['fields'][ $key ]['fields'] ) ) {
// If the accordian is now empty, remove it.
unset( $element_options[ $option_panel ]['fields'][ $key ] );
}
}
}
}
}
}
}
}
$new_options['shortcode_styling'] = [
'label' => esc_html__( 'Avada Builder Elements', 'fusion-builder' ),
'id' => 'shortcode_styling',
'is_panel' => 'true',
'class' => $has_addons_class,
'priority' => 14,
'icon' => 'el-icon-check',
'fields' => [],
];
$new_options['shortcode_styling']['fields']['fusion_builder_elements'] = [
'label' => esc_html__( 'Avada Builder Elements', 'fusion-builder' ),
'id' => 'fusion_builder_elements',
'type' => 'sub-section',
'priority' => 14,
'fields' => $element_options['shortcode_styling']['fields'],
];
if ( isset( $element_options['fusion_builder_addons'] ) ) {
$new_options['shortcode_styling']['fields']['fusion_builder_addons'] = [
'label' => esc_html__( 'Add-on Elements', 'fusion-builder' ),
'id' => 'fusion_builder_addons',
'type' => 'sub-section',
'priority' => 14,
'fields' => array_merge(
[
'fusion_builder_addons_important_note_info' => [
'label' => '',
'description' => '<div class="fusion-redux-important-notice">' . __( '<strong>IMPORTANT NOTE:</strong> This panel holds element options for any Avada Builder Add-on you have purchased from a 3rd party source. These are not made by ThemeFusion. If you require support for these elements, please contact the individual Add-on creator you purchased them from.', 'fusion-builder' ) . '</div>',
'id' => 'fusion_builder_addons_important_note_info',
'type' => 'custom',
],
],
$element_options['fusion_builder_addons']['fields']
),
];
}
$sections->sections['shortcode_styling'] = $new_options['shortcode_styling'];
return $sections;
}
/**
* Gets the $fusion_builder_redux private property.
*
* @access public
* @since 1.1.0
* @return object
*/
public function get_fusion_builder_redux() {
if ( null === $this->fusion_builder_redux ) {
$this->init_redux();
}
return $this->fusion_builder_redux;
}
}