automatewoo/includes/WooCommerce_Blocks_Integration.php
fei-source 47d3c9a8b6 Update to v6.2.2
Source: GrootMade/Festinger Vault
2026-03-15 08:31:15 +08:00

111 lines
3.4 KiB
PHP

<?php
namespace AutomateWoo;
use AutomateWoo\Blocks\Marketing_Optin_Block;
use Automattic\WooCommerce\Blocks\Package;
use Automattic\WooCommerce\Blocks\Domain\Services\ExtendRestApi;
use Automattic\WooCommerce\Blocks\StoreApi\Schemas\CheckoutSchema;
use Automattic\WooCommerce\Blocks\Integrations\IntegrationRegistry;
defined( 'ABSPATH' ) || exit;
/**
* Class WooCommerce_Blocks_Integration
*
* @since 5.5.9
* @package AutomateWoo
*/
class WooCommerce_Blocks_Integration {
/**
* WooCommerce_Blocks_Integration constructor.
*/
public function __construct() {
add_action( 'init', [ $this, 'register_blocks' ] );
add_action( 'woocommerce_blocks_checkout_block_registration', [ $this, 'register_checkout_frontend_blocks' ] );
add_filter( '__experimental_woocommerce_blocks_add_data_attributes_to_block', [ $this, 'add_attributes_to_frontend_blocks' ], 10, 1 );
self::extend_store_api();
}
/**
* Register blocks.
*/
public function register_blocks() {
$asset_file_path = AUTOMATEWOO_PATH . '/assets/js/build/marketing-optin-block.asset.php';
if ( file_exists( $asset_file_path ) && false === \WP_Block_Type_Registry::get_instance()->is_registered( 'automatewoo/marketing-optin' ) ) {
$block = register_block_type( AUTOMATEWOO_PATH . '/assets/js/marketing-optin-block' );
// Setup the block script to be loaded in the footer.
if ( $block instanceof \WP_Block_Type && $block->editor_script ) {
$wp_scripts = wp_scripts();
$wp_scripts->add_data( $block->editor_script, 'group', 1 );
}
}
}
/**
* Load blocks in frontend with Checkout.
*
* @param IntegrationRegistry $integration_registry
*/
public function register_checkout_frontend_blocks( $integration_registry ) {
$marketing_optin_block = new Marketing_Optin_Block();
if ( ! $integration_registry->is_registered( $marketing_optin_block->get_name() ) ) {
$integration_registry->register( $marketing_optin_block );
}
}
/**
* This allows dynamic (JS) blocks to access attributes in the frontend.
*
* @param string[] $allowed_blocks
*/
public function add_attributes_to_frontend_blocks( $allowed_blocks ) {
$allowed_blocks[] = 'automatewoo/marketing-optin';
return $allowed_blocks;
}
/**
* Add schema Store API to support posted data.
*/
public function extend_store_api() {
$args = array(
'endpoint' => CheckoutSchema::IDENTIFIER,
'namespace' => 'automatewoo',
'schema_callback' => function () {
return array(
'optin' => array(
'description' => __( 'Subscribe to marketing opt-in.', 'automatewoo' ),
'type' => array( 'boolean', 'null' ),
'context' => array(),
'arg_options' => array(
'validate_callback' => function ( $value ) {
if ( ! is_null( $value ) && ! is_bool( $value ) ) {
return new \WP_Error( 'api-error', 'value of type ' . gettype( $value ) . ' was posted to the automatewoo optin callback' );
}
return true;
},
'sanitize_callback' => function ( $value ) {
if ( is_bool( $value ) ) {
return $value;
}
// Return a boolean when "null" is passed,
// which is the only non-boolean value allowed.
return false;
},
),
),
);
},
);
if ( function_exists( 'woocommerce_store_api_register_endpoint_data' ) ) {
woocommerce_store_api_register_endpoint_data( $args );
} else {
Package::container()->get( ExtendRestApi::class )->register_endpoint_data( $args );
}
}
}