diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-01-07 13:06:14 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-01-07 13:06:14 +0100 |
| commit | 7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8 (patch) | |
| tree | f7453d7dd5cbaaab246e23810b02d3edf1e451be /srcs/wordpress/wp-includes/class-wp-widget-factory.php | |
| parent | c59bdcf77c50cbe89b4a93782cdd6d9e7532080e (diff) | |
| download | ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.tar.gz ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.tar.bz2 ft_server-7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8.zip | |
Added wordpress
Diffstat (limited to 'srcs/wordpress/wp-includes/class-wp-widget-factory.php')
| -rw-r--r-- | srcs/wordpress/wp-includes/class-wp-widget-factory.php | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/srcs/wordpress/wp-includes/class-wp-widget-factory.php b/srcs/wordpress/wp-includes/class-wp-widget-factory.php new file mode 100644 index 0000000..ec5a96d --- /dev/null +++ b/srcs/wordpress/wp-includes/class-wp-widget-factory.php @@ -0,0 +1,115 @@ +<?php +/** + * Widget API: WP_Widget_Factory class + * + * @package WordPress + * @subpackage Widgets + * @since 4.4.0 + */ + +/** + * Singleton that registers and instantiates WP_Widget classes. + * + * @since 2.8.0 + * @since 4.4.0 Moved to its own file from wp-includes/widgets.php + */ +class WP_Widget_Factory { + + /** + * Widgets array. + * + * @since 2.8.0 + * @var array + */ + public $widgets = array(); + + /** + * PHP5 constructor. + * + * @since 4.3.0 + */ + public function __construct() { + add_action( 'widgets_init', array( $this, '_register_widgets' ), 100 ); + } + + /** + * PHP4 constructor. + * + * @since 2.8.0 + */ + public function WP_Widget_Factory() { + _deprecated_constructor( 'WP_Widget_Factory', '4.2.0' ); + self::__construct(); + } + + /** + * Memory for the number of times unique class instances have been hashed. + * + * This can be eliminated in favor of straight spl_object_hash() when 5.3 + * is the minimum requirement for PHP. + * + * @since 4.6.0 + * @var array + * + * @see WP_Widget_Factory::hash_object() + */ + private $hashed_class_counts = array(); + + /** + * Registers a widget subclass. + * + * @since 2.8.0 + * @since 4.6.0 Updated the `$widget` parameter to also accept a WP_Widget instance object + * instead of simply a `WP_Widget` subclass name. + * + * @param string|WP_Widget $widget Either the name of a `WP_Widget` subclass or an instance of a `WP_Widget` subclass. + */ + public function register( $widget ) { + if ( $widget instanceof WP_Widget ) { + $this->widgets[ spl_object_hash( $widget ) ] = $widget; + } else { + $this->widgets[ $widget ] = new $widget(); + } + } + + /** + * Un-registers a widget subclass. + * + * @since 2.8.0 + * @since 4.6.0 Updated the `$widget` parameter to also accept a WP_Widget instance object + * instead of simply a `WP_Widget` subclass name. + * + * @param string|WP_Widget $widget Either the name of a `WP_Widget` subclass or an instance of a `WP_Widget` subclass. + */ + public function unregister( $widget ) { + if ( $widget instanceof WP_Widget ) { + unset( $this->widgets[ spl_object_hash( $widget ) ] ); + } else { + unset( $this->widgets[ $widget ] ); + } + } + + /** + * Serves as a utility method for adding widgets to the registered widgets global. + * + * @since 2.8.0 + * + * @global array $wp_registered_widgets + */ + public function _register_widgets() { + global $wp_registered_widgets; + $keys = array_keys( $this->widgets ); + $registered = array_keys( $wp_registered_widgets ); + $registered = array_map( '_get_widget_id_base', $registered ); + + foreach ( $keys as $key ) { + // don't register new widget if old widget with the same id is already registered + if ( in_array( $this->widgets[ $key ]->id_base, $registered, true ) ) { + unset( $this->widgets[ $key ] ); + continue; + } + + $this->widgets[ $key ]->_register(); + } + } +} |
