aboutsummaryrefslogtreecommitdiff
path: root/srcs/wordpress/wp-includes/class-wp-widget-factory.php
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-01-07 13:06:14 +0100
committerCharles <sircharlesaze@gmail.com>2020-01-07 13:06:14 +0100
commit7086111ad4dd997e12a3220e1ee60c9b9bcf0bb8 (patch)
treef7453d7dd5cbaaab246e23810b02d3edf1e451be /srcs/wordpress/wp-includes/class-wp-widget-factory.php
parentc59bdcf77c50cbe89b4a93782cdd6d9e7532080e (diff)
downloadft_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.php115
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();
+ }
+ }
+}