Refactor order tracking asset loaded

This commit is contained in:
Emili Castells Guasch 2023-07-31 15:31:19 +02:00
parent a35bea207e
commit e8118381fa
3 changed files with 56 additions and 36 deletions

View file

@ -75,7 +75,7 @@ return array(
return new CompatAssets(
$container->get( 'compat.module.url' ),
$container->get( 'ppcp.asset-version' ),
$container->get( 'order-tracking.is-paypal-order-edit-page' ) && $container->get( 'compat.should-initialize-gzd-compat-layer' )
$container->get( 'compat.should-initialize-gzd-compat-layer' )
);
},

View file

@ -12,7 +12,6 @@ namespace WooCommerce\PayPalCommerce\OrderTracking;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\OrderTracking\Assets\OrderEditPageAssets;
use WooCommerce\PayPalCommerce\OrderTracking\Endpoint\OrderTrackingEndpoint;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
return array(
'order-tracking.assets' => function( ContainerInterface $container ) : OrderEditPageAssets {
@ -74,14 +73,4 @@ return array(
),
);
},
'order-tracking.is-paypal-order-edit-page' => static function ( ContainerInterface $container ): bool {
$order_id = isset( $_GET['post'] ) ? (int) $_GET['post'] : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( empty( $order_id ) ) {
return false;
}
$meta = get_post_meta( $order_id, PayPalGateway::ORDER_ID_META_KEY, true );
return ! empty( $meta );
},
);

View file

@ -19,9 +19,9 @@ use WC_Order;
use WooCommerce\PayPalCommerce\OrderTracking\Assets\OrderEditPageAssets;
use WooCommerce\PayPalCommerce\OrderTracking\Endpoint\OrderTrackingEndpoint;
use WooCommerce\PayPalCommerce\WcGateway\Exception\NotFoundException;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\WcGateway\Helper\PayUponInvoiceHelper;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
use WooCommerce\PayPalCommerce\WcGateway\Settings\SettingsListener;
/**
* Class OrderTrackingModule
@ -57,15 +57,10 @@ class OrderTrackingModule implements ModuleInterface {
}
$tracking_enabled = $settings->has( 'tracking_enabled' ) && $settings->get( 'tracking_enabled' );
if ( ! $tracking_enabled ) {
return;
}
$asset_loader = $c->get( 'order-tracking.assets' );
assert( $asset_loader instanceof OrderEditPageAssets );
$is_paypal_order_edit_page = $c->get( 'order-tracking.is-paypal-order-edit-page' );
$endpoint = $c->get( 'order-tracking.endpoint.controller' );
assert( $endpoint instanceof OrderTrackingEndpoint );
@ -73,23 +68,25 @@ class OrderTrackingModule implements ModuleInterface {
assert( $logger instanceof LoggerInterface );
add_action(
'init',
static function () use ( $asset_loader, $is_paypal_order_edit_page ) {
if ( ! $is_paypal_order_edit_page ) {
'admin_enqueue_scripts',
/**
* Param types removed to avoid third-party issues.
*
* @psalm-suppress MissingClosureParamType
*/
function ( $hook ) use ( $c ): void {
if ( $hook !== 'post.php' ) {
return;
}
if ( ! $this->is_paypal_order_edit_page() ) {
return;
}
$asset_loader = $c->get( 'order-tracking.assets' );
assert( $asset_loader instanceof OrderEditPageAssets );
$asset_loader->register();
}
);
add_action(
'admin_enqueue_scripts',
static function () use ( $asset_loader, $is_paypal_order_edit_page ) {
if ( ! $is_paypal_order_edit_page ) {
return;
}
$asset_loader->enqueue();
}
);
@ -99,18 +96,29 @@ class OrderTrackingModule implements ModuleInterface {
array( $endpoint, 'handle_request' )
);
$meta_box_renderer = $c->get( 'order-tracking.meta-box.renderer' );
add_action(
'add_meta_boxes',
static function() use ( $meta_box_renderer, $is_paypal_order_edit_page ) {
if ( ! $is_paypal_order_edit_page ) {
/**
* Param types removed to avoid third-party issues.
*
* @psalm-suppress MissingClosureParamType
*/
function( $post_type ) use ( $c ) {
if ( $post_type !== 'shop_order' || ! $this->is_paypal_order_edit_page() ) {
return;
}
add_meta_box( 'ppcp_order-tracking', __( 'Tracking Information', 'woocommerce-paypal-payments' ), array( $meta_box_renderer, 'render' ), 'shop_order', 'side' );
$meta_box_renderer = $c->get( 'order-tracking.meta-box.renderer' );
add_meta_box(
'ppcp_order-tracking',
__( 'Tracking Information', 'woocommerce-paypal-payments' ),
array( $meta_box_renderer, 'render' ),
'shop_order',
'side'
);
},
10,
2
1
);
add_action(
@ -146,4 +154,27 @@ class OrderTrackingModule implements ModuleInterface {
}
);
}
/**
* Checks if current post id is from a PayPal order.
*
* @return bool
*/
private function is_paypal_order_edit_page(): bool {
$post_id = isset( $_GET['post'] ) ? (int) $_GET['post'] : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( ! $post_id ) {
return false;
}
$order = wc_get_order( $post_id );
if ( ! is_a( $order, WC_Order::class ) ) {
return false;
}
if ( ! $order->get_meta( PayPalGateway::ORDER_ID_META_KEY ) ) {
return false;
}
return true;
}
}