From e3055a69f0e53140bf979ea0eab0359370f4e0b3 Mon Sep 17 00:00:00 2001 From: David Remer Date: Wed, 30 Sep 2020 08:18:17 +0300 Subject: [PATCH] render the authorize action depending on the orders status --- modules/ppcp-wc-gateway/services.php | 5 ++ .../src/Admin/class-renderauthorizeaction.php | 51 +++++++++++++++++++ .../src/class-wcgatewaymodule.php | 21 +++++--- 3 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 modules/ppcp-wc-gateway/src/Admin/class-renderauthorizeaction.php diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 6928768ca..a7b01bba6 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -15,6 +15,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Helper\Cache; use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn; use WooCommerce\PayPalCommerce\WcGateway\Admin\PaymentStatusOrderDetail; +use WooCommerce\PayPalCommerce\WcGateway\Admin\RenderAuthorizeAction; use WooCommerce\PayPalCommerce\WcGateway\Checkout\CheckoutPayPalAddressPreset; use WooCommerce\PayPalCommerce\WcGateway\Checkout\DisableGateways; use WooCommerce\PayPalCommerce\WcGateway\Endpoint\ReturnUrlEndpoint; @@ -137,6 +138,10 @@ return array( $payments_endpoint = $container->get( 'api.endpoint.payments' ); return new AuthorizedPaymentsProcessor( $order_endpoint, $payments_endpoint ); }, + 'wcgateway.admin.render-authorize-action' => static function ( $container ): RenderAuthorizeAction { + + return new RenderAuthorizeAction(); + }, 'wcgateway.admin.order-payment-status' => static function ( $container ): PaymentStatusOrderDetail { return new PaymentStatusOrderDetail(); }, diff --git a/modules/ppcp-wc-gateway/src/Admin/class-renderauthorizeaction.php b/modules/ppcp-wc-gateway/src/Admin/class-renderauthorizeaction.php new file mode 100644 index 000000000..d15e95ef6 --- /dev/null +++ b/modules/ppcp-wc-gateway/src/Admin/class-renderauthorizeaction.php @@ -0,0 +1,51 @@ +should_render_for_order( $wc_order ) ) { + return $order_actions; + } + + $order_actions['ppcp_authorize_order'] = __( + 'Capture authorized PayPal payment', + 'paypal-payments-for-woocommerce' + ); + return $order_actions; + } + + /** + * Whether the action should be rendered for a certain WooCommerce order. + * + * @param \WC_Order $order The Woocommerce order. + * + * @return bool + */ + private function should_render_for_order( \WC_Order $order ) : bool { + $data = $order->get_meta( PayPalGateway::CAPTURED_META_KEY ); + return in_array( $data, array( 'true', 'false' ), true ); + } +} diff --git a/modules/ppcp-wc-gateway/src/class-wcgatewaymodule.php b/modules/ppcp-wc-gateway/src/class-wcgatewaymodule.php index 374ce0bd2..8a4555246 100644 --- a/modules/ppcp-wc-gateway/src/class-wcgatewaymodule.php +++ b/modules/ppcp-wc-gateway/src/class-wcgatewaymodule.php @@ -16,6 +16,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository; use WooCommerce\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn; use WooCommerce\PayPalCommerce\WcGateway\Admin\PaymentStatusOrderDetail; +use WooCommerce\PayPalCommerce\WcGateway\Admin\RenderAuthorizeAction; use WooCommerce\PayPalCommerce\WcGateway\Checkout\CheckoutPayPalAddressPreset; use WooCommerce\PayPalCommerce\WcGateway\Checkout\DisableGateways; use WooCommerce\PayPalCommerce\WcGateway\Endpoint\ReturnUrlEndpoint; @@ -257,12 +258,20 @@ class WcGatewayModule implements ModuleInterface { private function register_order_functionality( ContainerInterface $container ) { add_filter( 'woocommerce_order_actions', - static function ( $order_actions ): array { - $order_actions['ppcp_authorize_order'] = __( - 'Capture authorized PayPal payment', - 'paypal-payments-for-woocommerce' - ); - return $order_actions; + static function ( $order_actions ) use ( $container ): array { + global $theorder; + + if ( ! is_a( $theorder, \WC_Order::class ) ) { + return $order_actions; + } + + $render = $container->get( 'wcgateway.admin.render-authorize-action' ); + /** + * Renders the authorize action in the select field. + * + * @var RenderAuthorizeAction $render + */ + return $render->render( $order_actions, $theorder ); } );