File "class-redux-api.php"
Full Path: /home/elegucvf/public_html/video/wp-content/plugins/atlas-core/framework/redux-core/inc/classes/class-redux-api.php
File size: 52.62 KB
MIME-type: text/x-php
Charset: utf-8
<?php // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
/**
* Redux Framework API Class
* Makes instantiating a Redux object an absolute piece of cake.
*
* @package Redux_Framework
* @author Dovy Paukstys
* @subpackage Core
* @noinspection PhpUnused
* @noinspection PhpMissingParamTypeInspection
*/
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit;
// Don't duplicate me!
if ( ! class_exists( 'Redux', false ) ) {
/**
* Redux API Class
* Simple API for Redux Framework
*
* @since 3.0.0
*/
class Redux {
/**
* Option fields.
*
* @var array
*/
public static $fields = array();
/**
* Option sections.
*
* @var array
*/
public static $sections = array();
/**
* Option defaults.
*
* @var array
*/
public static $options_defaults = array();
/**
* Option help array.
*
* @var array
*/
public static $help = array();
/**
* Option global args.
*
* @var array
*/
public static $args = array();
/**
* Option section priorities.
*
* @var array
*/
public static $priority = array();
/**
* Panel validations errors.
*
* @var array
*/
public static $errors = array();
/**
* Init.
*
* @var array
*/
public static $init = array();
/**
* Delay Init opt_names
*
* @var array
*/
public static $delay_init = array();
/**
* Extension list.
*
* @var array
*/
public static $extensions = array();
/**
* Extensions in use.
*
* @var array
*/
public static $uses_extensions = array();
/**
* Extension paths.
*
* @var array
*/
public static $extension_paths = array();
/**
* Extension capability flag.
*
* @var boolean
*/
public static $extension_compatibility = false;
/**
* Code to run at creation in instance.
*/
public static function load() {
add_action( 'after_setup_theme', array( 'Redux', 'create_redux' ) );
add_action( 'init', array( 'Redux', 'create_redux' ) );
add_action( 'switch_theme', array( 'Redux', 'create_redux' ) );
require_once Redux_Core::$dir . 'inc/extensions/metaboxes/class-redux-metaboxes-api.php';
require_once Redux_Core::$dir . 'inc/extensions/users/class-redux-users-api.php';
require_once Redux_Core::$dir . 'inc/extensions/taxonomy/class-redux-taxonomy-api.php';
}
/**
* Delay init action function
* Delays all Redux objects from loaded before `plugins_loaded` runs.
*
* @throws ReflectionException Exception.
*/
public static function delay_init() {
if ( ! empty( self::$delay_init ) ) {
foreach ( self::$delay_init as $opt_name ) {
self::init( $opt_name );
$parent = Redux_Instances::get_instance( $opt_name );
// translators: This is only shown to developers, should not impact users.
$msg = sprintf(
'<strong>%s</strong><br /><code>%s</code> %s',
esc_html__( 'Warning, Premature Initialization', 'redux-framework' ),
'self::init("' . esc_html( $opt_name ) . '")',
// translators: This is only shown to developers, should not impact users.
sprintf( esc_html__( 'was run before the %s hook and was delayed to avoid errors.', 'redux-framework' ), '<code>plugins_loaded</code>' )
);
if ( isset( $parent->args ) ) {
$data = array(
'parent' => $parent,
'type' => 'error',
'msg' => $msg,
'id' => 'redux_init',
'dismiss' => true,
);
Redux_Admin_Notices::set_notice( $data );
}
}
}
}
/**
* Init Redux object
*
* @param string $opt_name Panel opt_name.
*
* @throws ReflectionException Exception.
*/
public static function init( string $opt_name = '' ) {
if ( ! empty( $opt_name ) ) {
if ( ! did_action( 'plugins_loaded' ) ) {
// We don't want to load before plugins_loaded EVER.
self::$delay_init[] = $opt_name;
add_action( 'plugins_loaded', array( 'Redux', 'delay_init' ) );
} else {
// The hook `plugins_loaded` has run, let's get going!
self::load_redux( $opt_name );
remove_action( 'setup_theme', array( 'Redux', 'create_redux' ) );
}
}
}
/**
* Retrieve ReduxFramework object.
*
* @param string $opt_name Panel opt_name.
*
* @return object|ReduxFramework
*/
public static function instance( string $opt_name ) {
return Redux_Instances::get_instance( $opt_name );
}
/**
* Retrieve all ReduxFramework Instances.
*
* @return null|array|ReduxFramework[]
*/
public static function all_instances(): ?array {
return Redux_Instances::get_all_instances();
}
/**
* Load external extensions.
*
* @param object $redux_framework ReduxFramework object.
*
* @deprecated No longer using camelCase naming conventions.
*/
public static function loadExtensions( $redux_framework ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, ' Redux 4.3', 'Redux::load_extensions( $redux_framework )' );
self::load_extensions( $redux_framework );
}
/**
* Load external extensions.
*
* @param object $redux_framework ReduxFramework object.
*/
public static function load_extensions( $redux_framework ) {
$instance_extensions = self::get_extensions( $redux_framework->args['opt_name'] );
if ( $instance_extensions ) {
foreach ( $instance_extensions as $name => $extension ) {
$old_class = str_replace( 'Redux_', 'ReduxFramework_', $extension['class'] );
if ( ! class_exists( $extension['class'] ) && ! class_exists( $old_class ) ) {
// In case you wanted to override your override, hah.
// Phpcs:ignore WordPress.NamingConventions.ValidHookName
$extension['path'] = apply_filters( 'redux/extension/' . $redux_framework->args['opt_name'] . '/' . $name, $extension['path'] );
if ( file_exists( $extension['path'] ) ) {
require_once $extension['path'];
}
}
if ( isset( $extension['field'] ) ) {
require_once $extension['field'];
}
if ( ! isset( $redux_framework->extensions[ $name ] ) ) {
$field_classes = array( $extension['class'], $old_class );
$ext_class = Redux_Functions::class_exists_ex( $field_classes );
if ( false !== $ext_class ) {
$redux_framework->extensions[ $name ] = new $ext_class( $redux_framework );
// Backwards compatibility for extensions.
if ( ! is_subclass_of( $redux_framework->extensions[ $name ], 'Redux_Extension_Abstract' ) ) {
$new_class_name = $ext_class . '_extended';
self::$extension_compatibility = true;
$redux_framework->extensions[ $name ] = Redux_Functions_Ex::extension_compatibility( $redux_framework, $extension['path'], $ext_class, $new_class_name, $name );
}
} elseif ( is_admin() && true === $redux_framework->args['dev_mode'] ) {
echo '<div id="message" class="error"><p>No class named <strong>' . esc_html( $extension['class'] ) . '</strong> exists. Please verify your extension path.</p></div>';
}
}
}
}
}
/**
* Deprecated function to set an extension path.
*
* @param string $extension Path.
* @param bool $folder Set if a path is a folder.
*
* @return bool|mixed
* @deprecated No longer using cameCase naming conventions.
*/
public static function extensionPath( string $extension, bool $folder = true ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::extension_path( $extension, $folder )' );
return self::extension_path( $extension, $folder );
}
/**
* Sets a path to an extension.
*
* @param string $extension Path to an extension.
* @param bool $folder Set if a path is a folder.
*
* @return bool|mixed
*/
public static function extension_path( string $extension, bool $folder = true ) {
if ( ! isset( self::$extensions[ $extension ] ) ) {
return false;
}
$path = end( self::$extensions[ $extension ] );
if ( ! $folder ) {
return $path;
}
return dirname( $path );
}
/**
* Deprecated function of Load Redux Framework.
*
* @param string $opt_name Panel opt_name.
*
* @throws ReflectionException Exception.
*
* @deprecated No longer using camelCase naming conventions.
*/
public static function loadRedux( string $opt_name = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::load_redux( $opt_name )' );
self::load_redux( $opt_name );
}
/**
* Load defaults values for a given opt_name.
*
* @param string $opt_name Panel opt_name.
*/
public static function set_defaults( string $opt_name = '' ) {
// Try to load the class if in the same directory, so the user only has to include the Redux API.
if ( ! class_exists( 'Redux_Options_Defaults' ) ) {
$file_check = trailingslashit( __DIR__ ) . 'class-redux-options-defaults.php';
if ( file_exists( dirname( $file_check ) ) ) {
include_once $file_check;
$file_check = trailingslashit( __DIR__ ) . 'class-redux-wordpress-data.php';
if ( file_exists( dirname( $file_check ) ) ) {
include_once $file_check;
}
}
}
if ( class_exists( 'Redux_Options_Defaults' ) && ! isset( self::$options_defaults[ $opt_name ] ) ) {
$sections = self::construct_sections( $opt_name );
$wordpress_data = ( ! class_exists( 'Redux_WordPress_Data' ) ) ? null : new Redux_WordPress_Data( $opt_name );
$options_defaults_class = new Redux_Options_Defaults();
self::$options_defaults[ $opt_name ] = $options_defaults_class->default_values( $opt_name, $sections, $wordpress_data );
if ( ! isset( self::$args[ $opt_name ]['global_variable'] ) || ( '' === self::$args[ $opt_name ]['global_variable'] && false !== self::$args[ $opt_name ]['global_variable'] ) ) {
self::$args[ $opt_name ]['global_variable'] = str_replace( '-', '_', $opt_name );
}
if ( isset( self::$args[ $opt_name ]['global_variable'] ) && self::$args[ $opt_name ]['global_variable'] ) {
$option_global = self::$args[ $opt_name ]['global_variable'];
/**
* Filter 'redux/options/{opt_name}/global_variable'
*
* @param array $value option value to set global_variable with
*/
global $$option_global;
// phpcs:ignore WordPress.NamingConventions.ValidHookName
$$option_global = apply_filters( 'redux/options/' . $opt_name . '/global_variable', self::$options_defaults[ $opt_name ] );
}
}
}
/**
* Load Redux Framework.
*
* @param string $opt_name Panel opt_name.
*
* @throws ReflectionException Exception.
*/
public static function load_redux( string $opt_name = '' ) {
if ( empty( $opt_name ) ) {
return;
}
if ( class_exists( 'ReduxFramework' ) ) {
if ( isset( self::$init[ $opt_name ] ) && ! empty( self::$init[ $opt_name ] ) ) {
return;
}
} else {
echo '<div id="message" class="error"><p>' . esc_html__( 'Redux Framework is not installed. Please install it.', 'redux-framework' ) . '</p></div>';
return;
}
self::instance( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( isset( self::$init[ $opt_name ] ) && 1 === self::$init[ $opt_name ] ) {
return;
}
self::set_defaults( $opt_name );
$args = self::construct_args( $opt_name );
$sections = self::construct_sections( $opt_name );
if ( isset( self::$uses_extensions[ $opt_name ] ) && ! empty( self::$uses_extensions[ $opt_name ] ) ) {
add_action( "redux/extensions/$opt_name/before", array( 'Redux', 'load_extensions' ), 0 );
}
$redux = new ReduxFramework( $sections, $args );
self::$init[ $opt_name ] = 1;
if ( isset( $redux->args['opt_name'] ) && $redux->args['opt_name'] !== $opt_name ) {
self::$init[ $redux->args['opt_name'] ] = 1;
}
}
/**
* Deprecated Create Redux instance.
*
* @throws ReflectionException Exception.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function createRedux() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::createRedux()' );
self::create_redux();
}
/**
* Create Redux instance.
*
* @throws ReflectionException Exception.
*/
public static function create_redux() {
foreach ( self::$sections as $opt_name => $the_sections ) {
if ( ! empty( $the_sections ) ) {
if ( ! self::$init[ $opt_name ] ) {
self::load_redux( $opt_name );
}
}
}
}
/**
* Construct global arguments.
*
* @param string $opt_name Panel opt_name.
*
* @return array|mixed
*/
public static function construct_args( string $opt_name ) {
$args = self::$args[ $opt_name ] ?? array();
$args['opt_name'] = $opt_name;
if ( ! isset( $args['menu_title'] ) ) {
$args['menu_title'] = ucfirst( $opt_name ) . ' Options';
}
if ( ! isset( $args['page_title'] ) ) {
$args['page_title'] = ucfirst( $opt_name ) . ' Options';
}
if ( ! isset( $args['page_slug'] ) ) {
$args['page_slug'] = $opt_name . '_options';
}
return $args;
}
/**
* Construct option panel sections.
*
* @param string $opt_name Panel opt_name.
*
* @return array
*/
public static function construct_sections( string $opt_name ): array {
$sections = array();
if ( ! isset( self::$sections[ $opt_name ] ) ) {
return $sections;
}
foreach ( self::$sections[ $opt_name ] as $section_id => $section ) {
$section['fields'] = self::construct_fields( $opt_name, $section_id );
$p = $section['priority'];
while ( isset( $sections[ $p ] ) ) {
++$p;
}
$sections[ $p ] = $section;
}
ksort( $sections );
return $sections;
}
/**
* Construct option panel fields.
*
* @param string $opt_name Panel opt_name.
* @param string $section_id ID of a section.
*
* @return array
*/
public static function construct_fields( string $opt_name = '', string $section_id = '' ): array {
$fields = array();
if ( ! empty( self::$fields[ $opt_name ] ) ) {
foreach ( self::$fields[ $opt_name ] as $field ) {
if ( $field['section_id'] === $section_id ) {
$p = esc_html( $field['priority'] );
while ( isset( $fields[ $p ] ) ) {
echo intval( $p++ );
}
$fields[ $p ] = $field;
}
}
}
ksort( $fields );
return $fields;
}
/**
* Deprecated Retrieve panel section.
*
* @param string $opt_name Panel opt_name.
* @param string $id Section ID.
*
* @return bool
* @deprecated No longer using camelCase naming convention.
*/
public static function getSection( string $opt_name = '', string $id = '' ): bool { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_section( $opt_name, $id )' );
return self::get_section( $opt_name, $id );
}
/**
* Retrieve panel section.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Section ID.
*
* @return bool|string|int
*/
public static function get_section( string $opt_name = '', $id = '' ) {
self::check_opt_name( $opt_name );
if ( ! empty( $opt_name ) && ! empty( $id ) ) {
if ( ! isset( self::$sections[ $opt_name ][ $id ] ) ) {
$id = Redux_Core::strtolower( sanitize_html_class( $id ) );
}
return self::$sections[ $opt_name ][ $id ] ?? false;
}
return false;
}
/**
* Deprecated Create a section of the option panel.
*
* @param string $opt_name Panel opt_name.
* @param array $sections Section ID.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setSections( string $opt_name = '', array $sections = array() ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_sections( $opt_name, $sections )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::set_sections( $opt_name, $sections );
}
/**
* Create multiple sections of the option panel.
*
* @param string $opt_name Panel opt_name.
* @param array $sections Section ID.
*/
public static function set_sections( string $opt_name = '', array $sections = array() ) {
if ( empty( $sections ) || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
foreach ( $sections as $section ) {
self::set_section( $opt_name, $section );
}
}
/**
* Deprecated Retrieve all sections from the option panel.
*
* @param string $opt_name Panel opt_name.
*
* @return array|mixed
* @deprecated No longer using camelCase naming convention.
*/
public static function getSections( string $opt_name = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_sections( $opt_name )' );
return self::get_sections( $opt_name );
}
/**
* Retrieve all sections from the option panel.
*
* @param string $opt_name Panel opt_name.
*
* @return array|mixed
*/
public static function get_sections( string $opt_name = '' ) {
self::check_opt_name( $opt_name );
if ( ! empty( self::$sections[ $opt_name ] ) ) {
return self::$sections[ $opt_name ];
}
return array();
}
/**
* Deprecated Remove option panel by ID.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Section ID.
* @param bool $fields Remove fields.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function removeSection( string $opt_name = '', $id = '', bool $fields = false ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::remove_section( $opt_name, $id )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::remove_section( $opt_name, $id, $fields );
}
/**
* Remove an option panel by ID.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Section ID.
* @param bool $fields Remove fields.
*/
public static function remove_section( string $opt_name = '', $id = '', bool $fields = false ) {
if ( '' !== $opt_name && '' !== $id ) {
Redux_Functions_Ex::record_caller( $opt_name );
if ( isset( self::$sections[ $opt_name ][ $id ] ) ) {
$priority = '';
foreach ( self::$sections[ $opt_name ] as $key => $section ) {
if ( $key === $id ) {
$priority = $section['priority'];
--self::$priority[ $opt_name ]['sections'];
unset( self::$sections[ $opt_name ][ $id ] );
continue;
}
if ( '' !== $priority ) {
$new_priority = $section['priority'];
$section['priority'] = $priority;
self::$sections[ $opt_name ][ $key ] = $section;
$priority = $new_priority;
}
}
if ( isset( self::$fields[ $opt_name ] ) && ! empty( self::$fields[ $opt_name ] ) && true === $fields ) {
foreach ( self::$fields[ $opt_name ] as $key => $field ) {
if ( $field['section_id'] === $id ) {
unset( self::$fields[ $opt_name ][ $key ] );
}
}
}
}
}
}
/**
* Deprecated Sets a single option panel section.
*
* @param string $opt_name Panel opt_name.
* @param array|null $section Section data.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setSection( string $opt_name = '', ?array $section = array() ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
// phpcs:ignore Squiz.PHP.CommentedOutCode.Found
// _deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_section( $opt_name, $section )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::set_section( $opt_name, $section );
}
/**
* Sets a single option panel section.
*
* @param string $opt_name Panel opt_name.
* @param array|null $section Section data.
* @param bool $replace Replaces a section instead of creating a new one.
*/
public static function set_section( string $opt_name = '', ?array $section = array(), bool $replace = false ) {
if ( empty( $section ) || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( ! isset( $section['id'] ) ) {
if ( isset( $section['type'] ) && 'divide' === $section['type'] ) {
$section['id'] = time();
} elseif ( isset( $section['title'] ) ) {
$section['id'] = Redux_Core::strtolower( sanitize_title( $section['title'] ) );
} else {
$section['id'] = time();
}
if ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) && ! $replace ) {
$orig = $section['id'];
$i = 0;
while ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) ) {
$section['id'] = $orig . '_' . $i;
++$i;
}
} elseif ( isset( self::$sections[ $opt_name ][ $section['id'] ] ) && $replace ) {
// If replace is set, let's update the default values with these!
$fields = false;
if ( isset( self::$sections[ $opt_name ][ $section['id'] ]['fields'] ) && ! empty( self::$sections[ $opt_name ][ $section['id'] ]['fields'] ) ) {
$fields = self::$sections[ $opt_name ][ $section['id'] ]['fields'];
}
self::$sections[ $opt_name ][ $section['id'] ] = wp_parse_args( $section, self::$sections[ $opt_name ][ $section['id'] ] );
if ( ! empty( $fields ) ) {
if ( ! isset( self::$sections[ $opt_name ][ $section['id'] ]['fields'] ) || ( isset( self::$sections[ $opt_name ][ $section['id'] ]['fields'] ) && empty( self::$sections[ $opt_name ][ $section['id'] ]['fields'] ) ) ) {
self::$sections[ $opt_name ][ $section['id'] ]['fields'] = $fields;
}
}
}
}
if ( ! empty( $opt_name ) && is_array( $section ) && ! empty( $section ) ) {
if ( ! isset( $section['id'] ) && ! isset( $section['title'] ) ) {
self::$errors[ $opt_name ]['section']['missing_title'] = esc_html__( 'Unable to create a section due to missing id and title.', 'redux-framework' );
return;
}
if ( ! isset( $section['priority'] ) ) {
$section['priority'] = self::get_priority( $opt_name, 'sections' );
}
if ( isset( $section['fields'] ) ) {
if ( ! empty( $section['fields'] ) && is_array( $section['fields'] ) ) {
self::process_field_array( $opt_name, $section['id'], $section['fields'] );
}
unset( $section['fields'] );
}
self::$sections[ $opt_name ][ $section['id'] ] = $section;
} else {
self::$errors[ $opt_name ]['section']['empty'] = esc_html__( 'Unable to create a section due an empty section array or the section variable passed was not an array.', 'redux-framework' );
}
}
/**
* Deprecated Hides an option panel section.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Section ID.
* @param bool $hide Flag to hide/show.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function hideSection( string $opt_name = '', $id = '', bool $hide = true ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::hide_section( $opt_name, $id )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::hide_section( $opt_name, $id, $hide );
}
/**
* Hides an option panel section.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Section ID.
* @param bool $hide Flag to hide/show.
*/
public static function hide_section( string $opt_name = '', $id = '', bool $hide = true ) {
self::check_opt_name( $opt_name );
if ( '' !== $opt_name && '' !== $id ) {
Redux_Functions_Ex::record_caller( $opt_name );
if ( isset( self::$sections[ $opt_name ][ $id ] ) ) {
self::$sections[ $opt_name ][ $id ]['hidden'] = $hide;
}
}
}
/**
* Compiles field array data.
*
* @param string $opt_name Panel opt_name.
* @param string|int $section_id Section ID.
* @param array $fields Field data.
*/
private static function process_field_array( string $opt_name = '', $section_id = '', array $fields = array() ) {
if ( ! empty( $opt_name ) && ! empty( $section_id ) && is_array( $fields ) && ! empty( $fields ) ) {
foreach ( $fields as $field ) {
if ( ! is_array( $field ) ) {
continue;
}
self::set_field( $opt_name, $section_id, $field );
}
}
}
/**
* Deprecated Retrieves an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
*
* @return int|bool
* @deprecated No longer using camelCase naming convention.
*/
public static function getField( string $opt_name = '', $id = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_field( $opt_name, $id )' );
return self::get_field( $opt_name, $id );
}
/**
* Retrieves an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
*
* @return int|bool
*/
public static function get_field( string $opt_name = '', $id = '' ) {
self::check_opt_name( $opt_name );
if ( ! empty( $opt_name ) && ! empty( $id ) ) {
return self::$fields[ $opt_name ][ $id ] ?? false;
}
return false;
}
/**
* Deprecated Hides an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
* @param bool $hide Set hide/show.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function hideField( string $opt_name = '', $id = '', bool $hide = true ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::hide_field( $opt_name, $id )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::hide_field( $opt_name, $id, $hide );
}
/**
* Hides an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
* @param bool $hide Set hide/show.
*/
public static function hide_field( string $opt_name = '', $id = '', bool $hide = true ) {
self::check_opt_name( $opt_name );
if ( '' !== $opt_name && '' !== $id ) {
if ( isset( self::$fields[ $opt_name ][ $id ] ) ) {
Redux_Functions_Ex::record_caller( $opt_name );
if ( ! $hide ) {
self::$fields[ $opt_name ][ $id ]['class'] = str_replace( 'hidden', '', self::$fields[ $opt_name ][ $id ]['class'] );
} else {
self::$fields[ $opt_name ][ $id ]['class'] .= 'hidden';
}
}
}
}
/**
* Deprecated Creates an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $section_id Section ID this field belongs to.
* @param array $field Field data.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setField( string $opt_name = '', $section_id = '', array $field = array() ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_field( $opt_name, $section_id, $field )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::set_field( $opt_name, $section_id, $field );
}
/**
* Creates an option panel field and adds to a section.
*
* @param string $opt_name Panel opt_name.
* @param string|int $section_id Section ID this field belongs to.
* @param array $field Field data.
*/
public static function set_field( string $opt_name = '', $section_id = '', array $field = array() ) {
if ( ! is_array( $field ) || empty( $field ) || '' === $opt_name || '' === $section_id ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
// Shim for the old method!
if ( is_array( $section_id ) ) {
$field = $section_id;
if ( isset( $field['section_id'] ) ) {
$section_id = $field['section_id'];
}
}
$field['section_id'] = $section_id;
if ( ! isset( $field['priority'] ) ) {
$field['priority'] = self::get_priority( $opt_name, 'fields' );
}
$field['id'] = $field['id'] ?? "{$opt_name}_{$section_id}_{$field['type']}_" . wp_rand( 1, 9999 );
self::$fields[ $opt_name ][ $field['id'] ] = $field;
}
/**
* Create multiple fields of the option panel and apply to a section.
*
* @param string $opt_name Panel opt_name.
* @param int|string $section_id Section ID this field belongs to.
* @param array $fields Array of field arrays.
*/
public static function set_fields( string $opt_name = '', $section_id = '', array $fields = array() ) {
if ( ! is_array( $fields ) || empty( $fields ) || '' === $opt_name || '' === $section_id ) {
return;
}
self::check_opt_name( $opt_name );
// phpcs:ignore WordPress.PHP.DevelopmentFunctions
Redux_Functions_Ex::record_caller( $opt_name );
foreach ( $fields as $field ) {
if ( is_array( $field ) ) {
self::set_field( $opt_name, $section_id, $field );
}
}
}
/**
* Deprecated Removes an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
*
* @return bool
* @deprecated No longer using camelCase naming convention.
*/
public static function removeField( string $opt_name = '', $id = '' ): bool { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::remove_field( $opt_name, $id )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
return self::remove_field( $opt_name, $id );
}
/**
* Removes an option panel field.
*
* @param string $opt_name Panel opt_name.
* @param string|int $id Field ID.
*
* @return bool
*/
public static function remove_field( string $opt_name = '', $id = '' ): bool {
if ( '' !== $opt_name && '' !== $id ) {
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( isset( self::$fields[ $opt_name ][ $id ] ) ) {
foreach ( self::$fields[ $opt_name ] as $key => $field ) {
if ( $key === $id ) {
$priority = $field['priority'];
--self::$priority[ $opt_name ]['fields'];
unset( self::$fields[ $opt_name ][ $id ] );
continue;
}
if ( isset( $priority ) && '' !== $priority ) {
$new_priority = $field['priority'];
$field['priority'] = $priority;
self::$fields[ $opt_name ][ $key ] = $field;
$priority = $new_priority;
}
}
}
}
return false;
}
/**
* Deprecated Sets help tabs on option panel admin page.
*
* @param string $opt_name Panel opt_name.
* @param array $tab Tab data.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setHelpTab( string $opt_name = '', array $tab = array() ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_help_tab( $opt_name, $tab )' );
self::set_help_tab( $opt_name, $tab );
}
/**
* Sets help tabs on option panel admin page.
*
* @param string $opt_name Panel opt_name.
* @param array $tab Tab data.
*/
public static function set_help_tab( string $opt_name = '', array $tab = array() ) {
if ( ! is_array( $tab ) && empty( $tab ) ) {
return;
}
self::check_opt_name( $opt_name );
if ( '' !== $opt_name ) {
if ( ! isset( self::$args[ $opt_name ]['help_tabs'] ) ) {
self::$args[ $opt_name ]['help_tabs'] = array();
}
if ( isset( $tab['id'] ) ) {
self::$args[ $opt_name ]['help_tabs'][] = $tab;
} elseif ( is_array( end( $tab ) ) ) {
foreach ( $tab as $tab_item ) {
self::$args[ $opt_name ]['help_tabs'][] = $tab_item;
}
}
}
}
/**
* Deprecated Sets the help sidebar content.
*
* @param string $opt_name Panel opt_name.
* @param string $content Content.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setHelpSidebar( string $opt_name = '', string $content = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_help_sidebar( $opt_name, $content )' );
self::set_help_sidebar( $opt_name, $content );
}
/**
* Sets the help sidebar content.
*
* @param string $opt_name Panel opt_name.
* @param string $content Content.
*/
public static function set_help_sidebar( string $opt_name = '', string $content = '' ) {
if ( '' === $content || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
self::$args[ $opt_name ]['help_sidebar'] = $content;
}
/**
* Deprecated Sets option panel global arguments.
*
* @param string $opt_name Panel opt_name.
* @param array $args Argument data.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setArgs( string $opt_name = '', array $args = array() ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
// phpcs:ignore Squiz.PHP.CommentedOutCode.Found
// _deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_args( $opt_name, $args )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::set_args( $opt_name, $args );
}
/**
* Sets option panel global arguments.
*
* @param string $opt_name Panel opt_name.
* @param array $args Argument data.
*/
public static function set_args( string $opt_name = '', array $args = array() ) {
if ( empty( $args ) || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( is_array( $args ) ) {
if ( isset( self::$args[ $opt_name ]['clearArgs'] ) ) {
self::$args[ $opt_name ] = array();
}
self::$args[ $opt_name ] = wp_parse_args( $args, self::$args[ $opt_name ] );
}
}
/**
* Set's developer key for premium services.
*
* @param string $opt_name Panel opt_name.
* @param string|array $arg Args data.
*/
public static function set_developer( string $opt_name = '', $arg = '' ) {
if ( empty( $arg ) || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
self::$args[ $opt_name ]['developer'] = $arg;
}
/**
* Deprecated Retries option panel global argument array.
*
* @param string $opt_name Panel opt_name.
*
* @return mixed
* @deprecated No longer camelCase naming convention.
*/
public static function getArgs( string $opt_name = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_args( $opt_name )' );
return self::get_args( $opt_name );
}
/**
* Retries option panel global argument array.
*
* @param string $opt_name Panel opt_name.
* @param string $key Argument key name to be returned.
*
* @return mixed|null|array
*/
public static function get_args( string $opt_name = '', string $key = '' ) {
self::check_opt_name( $opt_name );
if ( ! empty( $opt_name ) && ! empty( $key ) ) {
if ( ! empty( self::$args[ $opt_name ] ) ) {
return self::$args[ $opt_name ][ $key ];
} else {
return null;
}
} elseif ( ! empty( $opt_name ) && ! empty( self::$args[ $opt_name ] ) ) {
return self::$args[ $opt_name ];
}
return null;
}
/**
* Deprecated Retrieves a single global argument.
*
* @param string $opt_name Panel opt_name.
* @param string $key Argument name.
*
* @return mixed
* @deprecated No longer using camelCase naming convention and using singular function self::get_args() now.
*/
public static function getArg( string $opt_name = '', string $key = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_arg( $opt_name, $key )' );
return self::get_args( $opt_name, $key );
}
/**
* Retrieves a single global argument.
*
* @param string $opt_name Panel opt_name.
* @param string $key Argument name.
*
* @return mixed|array|null
*/
public static function get_arg( string $opt_name = '', string $key = '' ) {
self::check_opt_name( $opt_name );
if ( ! empty( $opt_name ) && ! empty( $key ) && ! empty( self::$args[ $opt_name ] ) ) {
return self::$args[ $opt_name ][ $key ];
} else {
return null;
}
}
/**
* Deprecated Retrieves a single option from the database.
*
* @param string $opt_name Panel opt_name.
* @param string $key Option key.
* @param string|array $defaults Default value.
*
* @return mixed
* @deprecated No longer using camelCase naming convention.
*/
public static function getOption( string $opt_name = '', string $key = '', $defaults = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_option( $opt_name, $key, $default )' );
return self::get_option( $opt_name, $key, $defaults );
}
/**
* Retrieves meta for a given post page, IE WordPress meta values
*
* @param string $opt_name Panel opt_name.
* @param mixed $the_post Post object to denote the current post, or custom.
* @param string $key Option key.
* @param mixed $defaults Default value.
*
* @return mixed
*/
public static function get_post_meta( string $opt_name = '', $the_post = array(), string $key = '', $defaults = null ) {
self::check_opt_name( $opt_name );
if ( empty( $opt_name ) ) {
return null;
}
global $post;
$redux = ReduxFrameworkInstances::get_instance( $opt_name );
$metaboxes = $redux->extensions['metaboxes'];
if ( null === $defaults || '' === $defaults ) {
$defaults = self::get_option( $opt_name, $key );
}
if ( isset( $the_post ) && is_array( $the_post ) ) {
$the_post = $post;
} elseif ( ! isset( $the_post ) || 0 === $the_post ) {
return $defaults;
} elseif ( is_numeric( $the_post ) ) {
$the_post = get_post( $the_post );
} elseif ( ! is_object( $the_post ) ) {
$the_post = $post;
}
$defaults = self::get_option( $opt_name, $key );
return $metaboxes->get_values( $the_post, $key, $defaults );
}
/**
* Retrieves a single option from the database.
*
* @param string $opt_name Panel opt_name.
* @param string $key Option key.
* @param mixed $default Default value.
*
* @return mixed
*/
public static function get_option( string $opt_name = '', string $key = '', $default = null ) { // phpcs:ignore Universal.NamingConventions
self::check_opt_name( $opt_name );
if ( ! empty( $opt_name ) && ! empty( $key ) ) {
global $$opt_name;
if ( empty( $$opt_name ) ) {
$values = get_option( $opt_name );
$$opt_name = $values;
} else {
$values = $$opt_name;
}
if ( ! isset( $values[ $key ] ) ) {
if ( null === $default ) {
$field = self::get_field( $opt_name, $key );
if ( false !== $field ) {
$defaults_class = new Redux_Options_Defaults();
$sections = self::construct_sections( $opt_name );
$defaults = $defaults_class->default_values( $opt_name, $sections );
if ( isset( $defaults[ $key ] ) ) {
$default = $defaults[ $key ];
}
}
}
}
if ( ! empty( $subkeys ) && is_array( $subkeys ) ) {
$value = $default;
if ( isset( $values[ $key ] ) ) {
$count = count( $subkeys );
if ( 1 === $count ) {
$value = $values[ $key ][ $subkeys[1] ] ?? $default;
} elseif ( 2 === $count ) {
if ( isset( $values[ $key ][ $subkeys[1] ] ) ) {
$value = $values[ $key ][ $subkeys[1] ][ $subkeys[2] ] ?? $default;
}
} elseif ( 3 === $count ) {
if ( isset( $values[ $key ][ $subkeys[1] ] ) ) {
if ( isset( $values[ $key ][ $subkeys[1] ][ $subkeys[2] ] ) ) {
$value = $values[ $key ][ $subkeys[1] ][ $subkeys[2] ][ $subkeys[3] ] ?? $default;
}
}
}
}
} else {
$value = $values[ $key ] ?? $default;
}
return $value;
} else {
return false;
}
}
/**
* Deprecated Sets an option into the database.
*
* @param string $opt_name Panel opt_name.
* @param string $key Option key.
* @param mixed $option Option value.
*
* @return bool
* @deprecated No longer using camelCase naming convention.
*/
public static function setOption( string $opt_name = '', string $key = '', $option = '' ): bool { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::set_option( $opt_name, $key, $option )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
return self::set_option( $opt_name, $key, $option );
}
/**
* Sets an option into the database.
*
* @param string $opt_name Panel opt_name.
* @param string $key Option key.
* @param mixed $option Option value.
*
* @return bool
*/
public static function set_option( string $opt_name = '', string $key = '', $option = '' ): bool {
if ( '' === $key ) {
return false;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( '' !== $opt_name ) {
$redux = get_option( $opt_name );
$redux[ $key ] = $option;
return update_option( $opt_name, $redux );
} else {
return false;
}
}
/**
* Get the next available priority for field/section.
*
* @param string $opt_name Panel opt_name.
* @param string $type Field or section.
*
* @return mixed
*/
public static function get_priority( string $opt_name, string $type ) {
$priority = self::$priority[ $opt_name ][ $type ];
self::$priority[ $opt_name ][ $type ] += 1;
return $priority;
}
/**
* Check opt_name integrity.
*
* @param string $opt_name Panel opt_name.
*/
public static function check_opt_name( string $opt_name = '' ) {
if ( empty( $opt_name ) || is_array( $opt_name ) ) {
return;
}
if ( ! isset( self::$sections[ $opt_name ] ) ) {
self::$sections[ $opt_name ] = array();
self::$priority[ $opt_name ]['sections'] = 1;
}
if ( ! isset( self::$args[ $opt_name ] ) ) {
self::$args[ $opt_name ] = array();
self::$priority[ $opt_name ]['args'] = 1;
}
if ( ! isset( self::$fields[ $opt_name ] ) ) {
self::$fields[ $opt_name ] = array();
self::$priority[ $opt_name ]['fields'] = 1;
}
if ( ! isset( self::$help[ $opt_name ] ) ) {
self::$help[ $opt_name ] = array();
self::$priority[ $opt_name ]['help'] = 1;
}
if ( ! isset( self::$errors[ $opt_name ] ) ) {
self::$errors[ $opt_name ] = array();
}
if ( ! isset( self::$init[ $opt_name ] ) ) {
self::$init[ $opt_name ] = false;
}
}
/**
* Retrieve metadata from a file. Based on WP Core's get_file_data function
*
* @param string $file Path to the file.
*
* @return string
* @since 2.1.1
*/
public static function get_file_version( string $file ): string {
$data = get_file_data( $file, array( 'version' ), 'plugin' );
return $data[0];
}
/**
* Verify extension class name.
*
* @param string $opt_name Panel opt_name.
* @param string $name extension name.
* @param string $class_file Extension class file.
*/
private static function check_extension_class_file( string $opt_name, string $name = '', string $class_file = '' ) {
$instance = null;
if ( file_exists( $class_file ) ) {
self::$uses_extensions[ $opt_name ] = self::$uses_extensions[ $opt_name ] ?? array();
if ( ! in_array( $name, self::$uses_extensions[ $opt_name ], true ) ) {
self::$uses_extensions[ $opt_name ][] = $name;
}
self::$extensions[ $name ] = self::$extensions[ $name ] ?? array();
$version = Redux_Helpers::get_template_version( $class_file );
if ( empty( $version ) && ! empty( $instance ) ) {
if ( isset( $instance->version ) ) {
$version = $instance->version;
}
}
self::$extensions[ $name ][ $version ] = self::$extensions[ $name ][ $version ] ?? $class_file;
$new_name = str_replace( '_', '-', $name );
$api_check = str_replace(
array(
'extension_' . $name,
'class-redux-extension-' . $new_name,
),
array(
$name . '_api',
'class-redux-' . $new_name . '-api',
),
$class_file
);
if ( file_exists( $api_check ) && ! class_exists( 'Redux_' . ucfirst( $name ) ) ) {
include_once $api_check;
}
}
}
/**
* Deprecated Sets all extensions in a path.
*
* @param string $opt_name Panel opt_name.
* @param string $path Path to extension folder.
*
* @deprecated No longer using camelCase naming convention.
*/
public static function setExtensions( string $opt_name, string $path ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.3', 'Redux::get_extensions( $opt_name, $path )' );
if ( '' !== $opt_name ) {
Redux_Functions_Ex::record_caller( $opt_name );
}
self::set_extensions( $opt_name, $path );
}
/**
* Sets all extensions in a path.
*
* @param string $opt_name Panel opt_name.
* @param string $path Path to extension folder.
* @param bool $force Make extension reload.
*/
public static function set_extensions( string $opt_name, string $path, bool $force = false ) {
if ( '' === $path || '' === $opt_name ) {
return;
}
self::check_opt_name( $opt_name );
Redux_Functions_Ex::record_caller( $opt_name );
if ( is_dir( $path ) ) {
$path = trailingslashit( $path );
$folder = str_replace( '.php', '', basename( $path ) );
$folder_fix = str_replace( '_', '-', $folder );
$files = array(
$path . 'extension_' . $folder . '.php',
$path . 'class-redux-extension-' . $folder_fix . '.php',
);
$ext_file = Redux_Functions::file_exists_ex( $files );
if ( $ext_file ) {
self::check_extension_class_file( $opt_name, $folder, $ext_file );
} else {
$folders = scandir( $path );
foreach ( $folders as $folder ) {
if ( '.' === $folder || '..' === $folder ) {
continue;
}
if ( is_dir( $path . $folder ) ) {
self::set_extensions( $opt_name, $path . $folder );
}
}
}
} elseif ( file_exists( $path ) ) {
$name = explode( 'extension_', basename( $path ) );
if ( ! empty( $name[1] ) ) {
$name = str_replace( '.php', '', $name[1] );
self::check_extension_class_file( $opt_name, $name, $path );
}
}
self::$extension_paths[ $opt_name ] = $path;
if ( true === $force ) {
if ( isset( self::$uses_extensions[ $opt_name ] ) && ! empty( self::$uses_extensions[ $opt_name ] ) ) {
$redux = self::instance( $opt_name );
if ( isset( $redux ) ) {
self::load_extensions( $redux );
}
}
}
}
/**
* Retrieves all loaded extensions.
*/
private static function get_all_extension() {
$redux = self::all_instances();
foreach ( $redux as $instance ) {
if ( ! empty( self::$uses_extensions[ $instance['args']['opt_name'] ] ) ) {
continue;
}
if ( ! empty( $instance['extensions'] ) ) {
self::get_instance_extension( $instance['args']['opt_name'], $instance );
}
}
}
/**
* Gets all loaded extensions for the passed ReduxFramework instance.
*
* @param string $opt_name Panel opt_name.
* @param object|null $instance ReduxFramework instance.
*/
public static function get_instance_extension( string $opt_name, $instance ) {
if ( ! empty( self::$uses_extensions[ $opt_name ] ) || empty( $opt_name ) ) {
return;
}
if ( empty( $instance ) ) {
$instance = self::instance( $opt_name );
}
if ( empty( $instance ) || empty( $instance->extensions ) ) {
return;
}
foreach ( $instance->extensions as $name => $extension ) {
if ( 'widget_areas' === $name ) {
new Redux_Widget_Areas( $instance );
}
if ( isset( self::$uses_extensions[ $opt_name ][ $name ] ) ) {
continue;
}
if ( isset( $extension->extension_dir ) ) {
self::set_extensions( $opt_name, str_replace( $name, '', $extension->extension_dir ) );
}
}
}
/**
* Deprecated Gets loaded extensions.
*
* @param string $opt_name Panel opt_name.
* @param string $key Extension name.
*
* @return array|bool|mixed
* @deprecated No longer using camelCase naming convention.
*/
public static function getExtensions( string $opt_name = '', string $key = '' ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
_deprecated_function( __CLASS__ . '::' . __FUNCTION__, 'Redux 4.0.0', 'self::get_extensions( $opt_name, $key )' );
return self::get_extensions( $opt_name, $key );
}
/**
* Gets loaded extensions.
*
* @param string $opt_name Panel opt_name.
* @param string $key Extension name.
*
* @return array|bool|mixed
*/
public static function get_extensions( string $opt_name = '', string $key = '' ) {
if ( empty( $opt_name ) ) {
self::get_all_extension();
if ( empty( $key ) ) {
return self::$extension_paths;
} elseif ( isset( self::$extension_paths[ $key ] ) ) {
return self::$extension_paths[ $key ];
}
} else {
if ( empty( self::$uses_extensions[ $opt_name ] ) ) {
self::get_instance_extension( $opt_name, null );
}
if ( empty( self::$uses_extensions[ $opt_name ] ) ) {
return false;
}
$instance_extensions = array();
foreach ( self::$uses_extensions[ $opt_name ] as $extension ) {
$class_file = end( self::$extensions[ $extension ] );
$directory = explode( DIRECTORY_SEPARATOR, $class_file );
array_pop( $directory );
$directory = trailingslashit( join( DIRECTORY_SEPARATOR, $directory ) );
$name = str_replace( '.php', '', basename( $extension ) );
$extension_class = 'Redux_Extension_' . $name;
$the_data = array(
'path' => $class_file,
'dir' => $directory,
'class' => $extension_class,
'version' => Redux_Helpers::get_template_version( $class_file ),
);
if ( is_dir( $the_data['dir'] . $extension ) ) {
$test_path = trailingslashit( $the_data['dir'] . $extension );
if ( file_exists( $test_path . 'field_' . str_replace( '-', '', $extension ) . '.php' ) ) {
$the_data['field'] = $test_path . 'field_' . str_replace( '-', '', $extension ) . '.php';
}
// Old extensions!
if ( file_exists( $test_path . str_replace( '-', '', $extension ) . '.php' ) ) {
$the_data['field'] = $test_path . str_replace( '-', '', $extension ) . '.php';
}
}
$instance_extensions[ $extension ] = $the_data;
}
return $instance_extensions;
}
return false;
}
/**
* Method to disables Redux demo mode popup.
*/
public static function disable_demo() {
add_action( 'ReduxFrameworkPlugin_admin_notice', 'Redux::remove_demo' );
add_action( 'redux_framework_plugin_admin_notice', 'Redux::remove_demo' );
}
/**
* Callback used by self::disable_demo() to remove the demo mode notice from Redux.
*/
public static function remove_demo() {
update_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES', '' );
}
/**
* Function which forces a panel/page to render.
*
* @param string|object $redux Panel opt_name or Redux object.
*/
public static function render( $redux = '' ) {
if ( is_string( $redux ) ) {
$redux = Redux_Instances::get_instance( $redux );
if ( empty( $redux ) ) {
return;
}
}
$enqueue = new Redux_Enqueue( $redux );
$enqueue->init();
$panel = new Redux_Panel( $redux );
$panel->init();
}
}
Redux::load();
}