This repository has been archived on 2022-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
divi/includes/builder/api/DiviExtensions.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();