OwlCyberSecurity - MANAGER
Edit File: class-redux-args.php
<?php /** * Redux Framework Args Class * * @package Redux_Framework/Classes * @noinspection PhpConditionCheckedByNextConditionInspection */ // Exit if accessed directly. defined( 'ABSPATH' ) || exit; if ( ! class_exists( 'Redux_Args', false ) ) { /** * Class Redux_Args */ class Redux_Args { /** * Returns entire arguments array. * * @var array|mixed */ public $get = array(); /** * ReduxFramework object. * * @var null */ private $parent; /** * Switch to omit social icons if dev_mode is set to true and Redux defaults are used. * * @var bool */ public $omit_icons = false; /** * Switch to omit support menu items if dev_mode is set to true and redux defaults are used. * * @var bool */ public $omit_items = false; /** * Flag to force dev_mod to true if in localhost or WP_DEBUG is set to true. * * @var bool */ public $dev_mode_forced = false; /** * Redux_Args constructor. * * @param object $redux ReduxFramework object. * @param array $args Global arguments array. */ public function __construct( $redux, array $args ) { $this->parent = $redux; $default = array( 'opt_name' => '', 'last_tab' => '', 'menu_icon' => '', 'menu_title' => '', 'page_title' => '', 'page_slug' => '', 'page_permissions' => 'manage_options', 'menu_type' => 'menu', 'page_parent' => 'themes.php', 'page_priority' => null, 'allow_sub_menu' => true, 'save_defaults' => true, 'footer_credit' => '', 'async_typography' => false, 'disable_google_fonts_link' => false, 'class' => '', 'admin_bar' => true, 'admin_bar_priority' => 999, 'admin_bar_icon' => '', 'help_tabs' => array(), 'help_sidebar' => '', 'database' => '', 'customizer' => false, 'global_variable' => '', 'output' => true, 'output_variables_prefix' => '--', 'compiler_output_variables_prefix' => '$', 'compiler' => true, 'output_tag' => true, 'output_location' => array( 'frontend' ), 'transient_time' => '', 'default_show' => false, 'default_mark' => '', 'disable_save_warn' => false, 'open_expanded' => false, 'hide_expand' => false, 'network_admin' => false, 'network_sites' => true, 'hide_reset' => false, 'hide_save' => false, 'hints' => array( 'icon' => 'el el-question-sign', 'icon_position' => 'right', 'icon_color' => 'lightgray', 'icon_size' => 'normal', 'tip_style' => array( 'color' => 'light', 'shadow' => true, 'rounded' => false, 'style' => '', ), 'tip_position' => array( 'my' => 'top_left', 'at' => 'bottom_right', ), 'tip_effect' => array( 'show' => array( 'effect' => 'slide', 'duration' => '500', 'event' => 'mouseover', ), 'hide' => array( 'effect' => 'fade', 'duration' => '500', 'event' => 'click mouseleave', ), ), ), 'font_weights' => array( array( 'id' => '400', 'name' => __( 'Regular 400', 'redux-framework' ), ), array( 'id' => '400italic', 'name' => __( 'Regular 400 Italic', 'redux-framework' ), ), array( 'id' => '700', 'name' => __( 'Bold 700', 'redux-framework' ), ), array( 'id' => '700italic', 'name' => __( 'Bold 700 Italic', 'redux-framework' ), ), ), 'show_import_export' => true, 'show_options_object' => true, 'dev_mode' => true, 'templates_path' => '', 'ajax_save' => true, 'use_cdn' => true, 'cdn_check_time' => 1440, 'options_api' => true, 'allow_tracking' => true, 'admin_theme' => 'wp', 'elusive_frontend' => false, 'fontawesome_frontend' => false, 'flyout_submenus' => true, 'font_display' => 'swap', // block|swap|fallback|optional. 'load_on_cron' => false, 'search' => false, ); $args = Redux_Functions::parse_args( $args, $default ); $args = $this->args( $args ); $args = $this->default_cleanup( $args ); if ( ! in_array( $args['font_display'], array( 'block', 'swap', 'fallback', 'optional' ), true ) ) { $args['font_display'] = 'swap'; } if ( isset( $args['async_typography'] ) && $args['async_typography'] ) { $args['async_typography'] = false; } $this->get = $args; $this->parent->args = $args; if ( 'redux_extensions_demo' !== $args['opt_name'] && 'redux_demo' !== $args['opt_name'] ) { $this->change_demo_defaults( $args ); } } /** * Builds and sanitizes a global args array. * * @param array $args Global args. * * @return array */ private function args( array $args ): array { $args = $this->no_errors_please( $args ); $this->parent->old_opt_name = $args['opt_name']; $args = $this->filters( $args ); if ( ! function_exists( 'wp_rand' ) ) { require_once ABSPATH . '/wp-includes/pluggable.php'; } if ( $args['opt_name'] === $this->parent->old_opt_name ) { $this->parent->old_opt_name = null; unset( $this->parent->old_opt_name ); } // Do not save the defaults if we're on a live preview! if ( 'customize' === $GLOBALS['pagenow'] && isset( $_GET['customize_theme'] ) && ! empty( $_GET['customize_theme'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification $args['save_defaults'] = false; } return $this->shim( $args ); } /** * Apply filters to arg data. * * @param array $args Global args. * * @return mixed|void */ private function filters( array $args ) { /** * Filter 'redux/args/{opt_name}' * * @param array $args ReduxFramework configuration */ // phpcs:ignore WordPress.NamingConventions.ValidHookName $args = apply_filters( "redux/args/{$args['opt_name']}", $args ); /** * Filter 'redux/options/{opt_name}/args' * * @param array $args ReduxFramework configuration */ // phpcs:ignore WordPress.NamingConventions.ValidHookName return apply_filters( "redux/options/{$args['opt_name']}/args", $args ); } /** * Sanitize args that should not be empty. * * @param array $args Global args. * * @return array */ private function no_errors_please( array $args ): array { if ( empty( $args['transient_time'] ) ) { $args['transient_time'] = 60 * MINUTE_IN_SECONDS; } if ( empty( $args['footer_credit'] ) ) { $footer_text = sprintf( /* translators: 1: Redux, 2: Link to plugin review */ __( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'redux-framework' ), '<strong>' . __( 'Redux', 'redux-framework' ) . '</strong>', '<a href="https://wordpress.org/support/plugin/redux-framework/reviews/?filter=5/#new-post" target="_blank">★★★★★</a>' ); $args['footer_credit'] = '<span id="footer-thankyou">' . $footer_text . '</span>'; } if ( empty( $args['menu_title'] ) ) { $args['menu_title'] = esc_html__( 'Options', 'redux-framework' ); } if ( empty( $args['page_title'] ) ) { $args['page_title'] = esc_html__( 'Options', 'redux-framework' ); } // Auto creates the page_slug appropriately. if ( empty( $args['page_slug'] ) ) { if ( ! empty( $args['display_name'] ) ) { $args['page_slug'] = sanitize_html_class( $args['display_name'] ); } elseif ( ! empty( $args['page_title'] ) ) { $args['page_slug'] = sanitize_html_class( $args['page_title'] ); } elseif ( ! empty( $args['menu_title'] ) ) { $args['page_slug'] = sanitize_html_class( $args['menu_title'] ); } else { $args['page_slug'] = str_replace( '-', '_', $args['opt_name'] ); } } return $args; } /** * Shims for much older v3 configs. * * @param array $args Global args. * * @return array */ private function shim( array $args ): array { /** * SHIM SECTION * Old variables and ways of doing things that need correcting. ;) * */ // Variable name change. if ( ! empty( $args['page_cap'] ) ) { $args['page_permissions'] = $args['page_cap']; unset( $args['page_cap'] ); } if ( ! empty( $args['page_position'] ) ) { $args['page_priority'] = $args['page_position']; unset( $args['page_position'] ); } if ( ! empty( $args['page_type'] ) ) { $args['menu_type'] = $args['page_type']; unset( $args['page_type'] ); } return $args; } /** * Verify to see if dev has bothered to change admin bar links and share icons from demo data to their own. * * @param array $args Global args. */ private function change_demo_defaults( array $args ) { if ( $args['dev_mode'] || true === Redux_Helpers::is_local_host() ) { if ( ! empty( $args['admin_bar_links'] ) ) { foreach ( $args['admin_bar_links'] as $arr ) { if ( is_array( $arr ) && ! empty( $arr ) ) { foreach ( $arr as $y ) { if ( strpos( Redux_Core::strtolower( $y ), 'redux' ) !== false ) { $this->omit_items = true; break; } } } } } if ( ! empty( $args['share_icons'] ) ) { foreach ( $args['share_icons'] as $arr ) { if ( is_array( $arr ) && ! empty( $arr ) ) { foreach ( $arr as $y ) { if ( strpos( Redux_Core::strtolower( $y ), 'redux' ) !== false ) { $this->omit_icons = true; } } } } } } } /** * Fix other arg criteria that sometimes gets hosed up. * * @param array $args Global args. * * @return array * @noinspection PhpStrictComparisonWithOperandsOfDifferentTypesInspection */ private function default_cleanup( array $args ): array { // Fix the global variable name. if ( '' === $args['global_variable'] && false !== $args['global_variable'] ) { $args['global_variable'] = str_replace( '-', '_', $args['opt_name'] ); } if ( isset( $args['customizer_only'] ) && $args['customizer_only'] ) { $args['menu_type'] = 'hidden'; $args['customizer'] = true; $args['admin_bar'] = false; $args['allow_sub_menu'] = false; } // Check if the Airplane Mode plugin is installed. if ( class_exists( 'Airplane_Mode_Core' ) ) { $airplane = Airplane_Mode_Core::getInstance(); if ( method_exists( $airplane, 'enabled' ) ) { if ( $airplane->enabled() ) { $args['use_cdn'] = false; } } elseif ( 'on' === $airplane->check_status() ) { $args['use_cdn'] = false; } } return $args; } } }