<?php
/**
* The blocks module.
*
* @package WooCommerce\PayPalCommerce\Blocks
*/
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\Blocks;
use Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry;
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
use WooCommerce\PayPalCommerce\Blocks\Endpoint\UpdateShippingEndpoint;
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExecutableModule;
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExtendingModule;
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ModuleClassNameIdTrait;
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ServiceModule;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
/**
* Class BlocksModule
*/
class BlocksModule implements ServiceModule, ExtendingModule, ExecutableModule
{
use ModuleClassNameIdTrait;
/**
* {@inheritDoc}
*/
public function services(): array
{
return require __DIR__ . '/../services.php';
}
/**
* {@inheritDoc}
*/
public function extensions(): array
{
return require __DIR__ . '/../extensions.php';
}
/**
* {@inheritDoc}
*/
public function run(ContainerInterface $c): bool
{
if (!class_exists('Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType') || !function_exists('woocommerce_store_api_register_payment_requirements')) {
add_action('admin_notices', function () {
printf('<div class="notice notice-error"><p>%1$s</p></div>', wp_kses_post(__('PayPal checkout block initialization failed, possibly old WooCommerce version or disabled WooCommerce Blocks plugin.', 'woocommerce-paypal-payments')));
});
return \true;
}
add_action('woocommerce_blocks_payment_method_type_registration', function (PaymentMethodRegistry $payment_method_registry) use ($c): void {
$payment_method_registry->register($c->get('blocks.method'));
$payment_method_registry->register($c->get('blocks.advanced-card-method'));
});
woocommerce_store_api_register_payment_requirements(array('data_callback' => function () use ($c): array {
$smart_button = $c->get('button.smart-button');
assert($smart_button instanceof SmartButtonInterface);
if (isset($smart_button->script_data()['continuation'])) {
return array('ppcp_continuation');
}
return array();
}));
add_action('wc_ajax_' . UpdateShippingEndpoint::ENDPOINT, static function () use ($c) {
$endpoint = $c->get('blocks.endpoint.update-shipping');
assert($endpoint instanceof UpdateShippingEndpoint);
$endpoint->handle_request();
});
// Enqueue frontend scripts.
add_action('wp_enqueue_scripts', static function () use ($c) {
if (!has_block('woocommerce/checkout') && !has_block('woocommerce/cart')) {
return;
}
$asset_getter = $c->get('blocks.asset_getter');
assert($asset_getter instanceof AssetGetter);
$asset_version = $c->get('ppcp.asset-version');
wp_register_style('wc-ppcp-blocks', $asset_getter->get_asset_url('gateway.css'), array(), $asset_version);
wp_enqueue_style('wc-ppcp-blocks');
});
// Enqueue editor styles.
add_action('enqueue_block_editor_assets', static function () use ($c) {
$asset_getter = $c->get('blocks.asset_getter');
assert($asset_getter instanceof AssetGetter);
$asset_version = $c->get('ppcp.asset-version');
wp_register_style('wc-ppcp-blocks-editor', $asset_getter->get_asset_url('gateway-editor.css'), array(), $asset_version);
wp_enqueue_style('wc-ppcp-blocks-editor');
});
add_filter('woocommerce_paypal_payments_sdk_components_hook', function (array $components, string $context) {
if (substr($context, -6) === '-block') {
$components[] = 'buttons';
}
return $components;
}, 10, 2);
return \true;
}
}