PluginProbe
MultiSafepay plugin for WooCommerce / trunk
MultiSafepay plugin for WooCommerce vtrunk
6.11.1 6.12.0 6.13.0 6.2.0 6.2.1 6.3.0 6.3.1 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.6.0 6.6.1 6.6.2 6.7.0 6.7.1 6.7.2 6.7.3 6.8.0 6.8.1 6.8.2 6.8.3 6.9.0 All 84 releases
multisafepay / src / PaymentMethods / Filters / CancelOrderStatuses.php

CancelOrderStatuses.php in MultiSafepay plugin for WooCommerce trunk, at src/PaymentMethods/Filters/CancelOrderStatuses.php

77 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types=1);
2
3 namespace MultiSafepay\WooCommerce\PaymentMethods\Filters;
4
5 use MultiSafepay\WooCommerce\Services\PaymentMethodService;
6 use MultiSafepay\WooCommerce\Utils\Logger;
7 use MultiSafepay\WooCommerce\Utils\Order as OrderUtil;
8 use WC_Order;
9
10 /**
11 * Allow order cancellation for MultiSafepay orders configured with on-hold initial status.
12 */
13 class CancelOrderStatuses {
14
15 /**
16 * @var PaymentMethodService|null
17 */
18 private $payment_method_service;
19
20 /**
21 * @var Logger
22 */
23 private $logger;
24
25 /**
26 * @param PaymentMethodService|null $payment_method_service
27 * @param Logger|null $logger
28 */
29 public function __construct( ?PaymentMethodService $payment_method_service = null, ?Logger $logger = null ) {
30 $this->payment_method_service = $payment_method_service;
31 $this->logger = $logger ?? new Logger();
32 }
33
34 /**
35 * Filter used to introduce on-hold as a valid order status to cancel an order via cancel_url.
36 *
37 * @param array $order_status
38 * @param WC_Order $order
39 * @return array
40 */
41 public function allow_cancel_multisafepay_orders_with_on_hold_status( array $order_status, WC_Order $order ): array {
42 if ( OrderUtil::is_multisafepay_order( $order ) ) {
43 $payment_method = $order->get_payment_method();
44 $gateway = $this->get_payment_method_service()->get_woocommerce_payment_gateway_by_id( $payment_method );
45 if ( ! $gateway ) {
46 $this->logger->log_error(
47 sprintf(
48 'CancelOrderStatuses: gateway not found for order_id=%d payment_method=%s',
49 $order->get_id(),
50 $payment_method
51 )
52 );
53 return $order_status;
54 }
55 $initial_order_status = $gateway->initial_order_status;
56 if ( 'wc-on-hold' === $initial_order_status && ! in_array( 'on-hold', $order_status, true ) ) {
57 $order_status[] = 'on-hold';
58 }
59 }
60
61 return $order_status;
62 }
63
64 /**
65 * Lazy-load the service to avoid SDK setup during plugin initialization.
66 *
67 * @return PaymentMethodService
68 */
69 private function get_payment_method_service(): PaymentMethodService {
70 if ( null === $this->payment_method_service ) {
71 $this->payment_method_service = new PaymentMethodService();
72 }
73
74 return $this->payment_method_service;
75 }
76 }
77