From f1a977e357120783bcc103695679ec730b024f07 Mon Sep 17 00:00:00 2001 From: gziolo Date: Mon, 29 Jan 2024 11:16:16 +0000 Subject: [PATCH] Editor: Add registry for block binding sources It is part of the sync from the Gutenberg plugin that introduces the registry for block binding sources required for the new Block Bindings API: https://github.com/WordPress/gutenberg/issues/54536. See #60282. Props czapla, artemiosans, santosguillamot, sc0ttkclark, lgladdy, talldanwp, swissspidy, youknowriad, fabiankaegy. Built from https://develop.svn.wordpress.org/trunk@57373 git-svn-id: http://core.svn.wordpress.org/trunk@56879 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../class-wp-block-bindings-registry.php | 194 ++++++++++++++++++ wp-includes/version.php | 2 +- wp-settings.php | 1 + 3 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 wp-includes/class-wp-block-bindings-registry.php diff --git a/wp-includes/class-wp-block-bindings-registry.php b/wp-includes/class-wp-block-bindings-registry.php new file mode 100644 index 00000000000..baffd2f3dc9 --- /dev/null +++ b/wp-includes/class-wp-block-bindings-registry.php @@ -0,0 +1,194 @@ +is_registered( $source_name ) ) { + _doing_it_wrong( + __METHOD__, + /* translators: %s: Block binding source name. */ + sprintf( __( 'Block binding source "%s" already registered.' ), $source_name ), + '6.5.0' + ); + return false; + } + + $source = array_merge( + array( 'name' => $source_name ), + $source_properties + ); + + $this->sources[ $source_name ] = $source; + + return $source; + } + + /** + * Unregisters a block binding source. + * + * @since 6.5.0 + * + * @param string $source_name Block binding source name including namespace. + * @return array|false The unregistred block binding source on success and `false` otherwise. + */ + public function unregister( $source_name ) { + if ( ! $this->is_registered( $source_name ) ) { + _doing_it_wrong( + __METHOD__, + /* translators: %s: Block binding source name. */ + sprintf( __( 'Block binding "%s" not found.' ), $source_name ), + '6.5.0' + ); + return false; + } + + $unregistered_source = $this->sources[ $source_name ]; + unset( $this->sources[ $source_name ] ); + + return $unregistered_source; + } + + /** + * Retrieves the list of all registered block bindings sources. + * + * @since 6.5.0 + * + * @return array The array of registered sources. + */ + public function get_all_registered() { + return $this->sources; + } + + /** + * Retrieves a registered block bindings source. + * + * @since 6.5.0 + * + * @param string $source_name The name of the source. + * @return array|null The registered block binding source, or `null` if it is not registered. + */ + public function get_registered( $source_name ) { + if ( ! $this->is_registered( $source_name ) ) { + return null; + } + + return $this->sources[ $source_name ]; + } + + /** + * Checks if a block binding source is registered. + * + * @since 6.5.0 + * + * @param string $source_name The name of the source. + * @return bool `true` if the block binding source is registered, `false` otherwise. + */ + public function is_registered( $source_name ) { + return isset( $this->sources[ $source_name ] ); + } + + /** + * Utility method to retrieve the main instance of the class. + * + * The instance will be created if it does not exist yet. + * + * @since 6.5.0 + * + * @return WP_Block_Bindings_Registry The main instance. + */ + public static function get_instance() { + if ( null === self::$instance ) { + self::$instance = new self(); + } + + return self::$instance; + } +} diff --git a/wp-includes/version.php b/wp-includes/version.php index c2a8bae0aae..6acf4e545cc 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.5-alpha-57372'; +$wp_version = '6.5-alpha-57373'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. diff --git a/wp-settings.php b/wp-settings.php index e30eeb493b8..9904bf50037 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -330,6 +330,7 @@ require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php'; require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-users.php'; require ABSPATH . WPINC . '/class-wp-block-editor-context.php'; +require ABSPATH . WPINC . '/class-wp-block-bindings-registry.php'; require ABSPATH . WPINC . '/class-wp-block-type.php'; require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php'; require ABSPATH . WPINC . '/class-wp-block-patterns-registry.php';