diff --git a/modules/ppcp-compat/services.php b/modules/ppcp-compat/services.php index 36dcf5f4c..f4f4c4937 100644 --- a/modules/ppcp-compat/services.php +++ b/modules/ppcp-compat/services.php @@ -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' ) ); }, diff --git a/modules/ppcp-order-tracking/services.php b/modules/ppcp-order-tracking/services.php index 8c52c4efa..26b34594c 100644 --- a/modules/ppcp-order-tracking/services.php +++ b/modules/ppcp-order-tracking/services.php @@ -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 ); - }, ); diff --git a/modules/ppcp-order-tracking/src/OrderTrackingModule.php b/modules/ppcp-order-tracking/src/OrderTrackingModule.php index fb12985f7..d7b289c99 100644 --- a/modules/ppcp-order-tracking/src/OrderTrackingModule.php +++ b/modules/ppcp-order-tracking/src/OrderTrackingModule.php @@ -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; + } }