124 lines
2.4 KiB
PHP
124 lines
2.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Extension API: DiviExtensions class.
|
||
|
*
|
||
|
* @package Builder
|
||
|
* @subpackage API
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Composite class to manage all Divi Extensions.
|
||
|
*/
|
||
|
class DiviExtensions {
|
||
|
|
||
|
/**
|
||
|
* Utility class instance.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @var ET_Core_Data_Utils
|
||
|
*/
|
||
|
protected static $_;
|
||
|
|
||
|
/**
|
||
|
* The first extension to enable debug mode for itself. Only one Divi Extension can be in
|
||
|
* debug mode at a time.
|
||
|
*
|
||
|
* @var DiviExtension
|
||
|
*/
|
||
|
protected static $_debugging_extension;
|
||
|
|
||
|
/**
|
||
|
* List of all instances of the Divi Extension.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @var DiviExtension[] {
|
||
|
* All current Divi Extension instances
|
||
|
*
|
||
|
* @type DiviExtension $name Instance
|
||
|
* }
|
||
|
*/
|
||
|
private static $_extensions;
|
||
|
|
||
|
/**
|
||
|
* Register a Divi Extension instance.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @param DiviExtension $instance Instance.
|
||
|
*/
|
||
|
public static function add( $instance ) {
|
||
|
if ( ! isset( self::$_extensions[ $instance->name ] ) ) {
|
||
|
self::$_extensions[ $instance->name ] = $instance;
|
||
|
} else {
|
||
|
et_error( "A Divi Extension named {$instance->name} already exists!" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get one or all Divi Extension instances.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @param string $name The extension name. Default: 'all'.
|
||
|
*
|
||
|
* @return DiviExtension|DiviExtension[]|null
|
||
|
*/
|
||
|
public static function get( $name = 'all' ) {
|
||
|
if ( 'all' === $name ) {
|
||
|
return self::$_extensions;
|
||
|
}
|
||
|
|
||
|
return self::$_->array_get( self::$_extensions, $name, null );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initialize the base `DiviExtension` class.
|
||
|
*/
|
||
|
public static function initialize() {
|
||
|
self::$_ = ET_Core_Data_Utils::instance();
|
||
|
|
||
|
require_once ET_BUILDER_DIR . 'api/DiviExtension.php';
|
||
|
|
||
|
/**
|
||
|
* Fires when the {@see DiviExtension} base class is available.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*/
|
||
|
do_action( 'divi_extensions_init' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Whether or not a Divi Extension is in debug mode.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public static function is_debugging_extension() {
|
||
|
return ! is_null( self::$_debugging_extension );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Register's an extension instance for debug mode if one hasn't already been registered.
|
||
|
*
|
||
|
* @since 3.1
|
||
|
*
|
||
|
* @param DiviExtension $instance Instance.
|
||
|
*
|
||
|
* @return bool Whether or not request was successful
|
||
|
*/
|
||
|
public static function register_debug_mode( $instance ) {
|
||
|
if ( ! self::$_debugging_extension ) {
|
||
|
self::$_debugging_extension = $instance;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
DiviExtensions::initialize();
|