PluginProbe
Packeta / 2.0.9
Packeta v2.0.9
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Order / PacketAutoSubmitter.php

PacketAutoSubmitter.php in Packeta 2.0.9, at src/Packetery/Module/Order/PacketAutoSubmitter.php

152 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Class PacketAutoSubmitter
4 *
5 * @package Packetery\Module\Order
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Order;
11
12 use Packetery\Module\Options\OptionsProvider;
13 use Packetery\Module\PaymentGatewayHelper;
14 use WC_Payment_Gateway;
15
16 /**
17 * Class PacketAutoSubmitter
18 *
19 * @package Packetery\Module\Order
20 */
21 class PacketAutoSubmitter {
22
23 private const HOOK_NAME_HANDLE_EVENT = 'packetery_auto_submission_handle_event';
24
25 public const EVENT_ON_ORDER_COMPLETED = 'onOrderCompleted';
26 public const EVENT_ON_ORDER_PROCESSING = 'onOrderProcessing';
27 public const EVENT_ON_ORDER_CREATION_FE = 'onOrderCreationFE';
28
29 /**
30 * Options provider.
31 *
32 * @var OptionsProvider
33 */
34 private $optionsProvider;
35
36 /**
37 * Packet submitter.
38 *
39 * @var PacketSubmitter
40 */
41 private $packetSubmitter;
42
43 /**
44 * Order repository.
45 *
46 * @var Repository
47 */
48 private $orderRepository;
49
50 /**
51 * Constructor.
52 *
53 * @param OptionsProvider $optionsProvider Options provider.
54 * @param PacketSubmitter $packetSubmitter Packet submitter.
55 * @param Repository $orderRepository Order repository.
56 */
57 public function __construct(
58 OptionsProvider $optionsProvider,
59 PacketSubmitter $packetSubmitter,
60 Repository $orderRepository
61 ) {
62 $this->optionsProvider = $optionsProvider;
63 $this->packetSubmitter = $packetSubmitter;
64 $this->orderRepository = $orderRepository;
65 }
66
67 /**
68 * Registers listeners.
69 *
70 * @return void
71 */
72 public function register(): void {
73 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
74 return;
75 }
76
77 add_action( self::HOOK_NAME_HANDLE_EVENT, [ $this, 'handleEvent' ], 10, 2 );
78
79 $mappedEvents = $this->optionsProvider->getPacketAutoSubmissionMappedUniqueEvents();
80 foreach ( $mappedEvents as $mappedEvent ) {
81 if ( $mappedEvent === self::EVENT_ON_ORDER_COMPLETED ) {
82 add_action(
83 'woocommerce_order_status_completed',
84 function ( int $orderId ): void {
85 $this->handleEvent( self::EVENT_ON_ORDER_COMPLETED, $orderId );
86 }
87 );
88
89 continue;
90 }
91
92 if ( $mappedEvent === self::EVENT_ON_ORDER_PROCESSING ) {
93 add_action(
94 'woocommerce_order_status_processing',
95 function ( int $orderId ): void {
96 $this->handleEvent( self::EVENT_ON_ORDER_PROCESSING, $orderId );
97 }
98 );
99 }
100 }
101 }
102
103 /**
104 * Handle event.
105 *
106 * @param string $event Event.
107 * @param int $orderId WC Order.
108 *
109 * @return void
110 */
111 public function handleEvent( string $event, int $orderId ): void {
112 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
113 return;
114 }
115
116 $wcOrder = $this->orderRepository->getWcOrderById( $orderId );
117 assert( $wcOrder !== null, 'WC order has to be present' );
118
119 $paymentGateway = wc_get_payment_gateway_by_order( $wcOrder );
120 if (
121 ! $paymentGateway instanceof WC_Payment_Gateway ||
122 array_key_exists( $paymentGateway->id, PaymentGatewayHelper::getAvailablePaymentGateways() ) === false
123 ) {
124 return;
125 }
126
127 $mappingEventForGateway = $this->optionsProvider->getPacketAutoSubmissionEventForPaymentGateway(
128 $this->optionsProvider->sanitizePaymentGatewayId( $paymentGateway->id )
129 );
130 if ( $mappingEventForGateway === null || $mappingEventForGateway !== $event ) {
131 return;
132 }
133
134 $this->packetSubmitter->submitPacket( $wcOrder );
135 }
136
137 /**
138 * Handles event async.
139 *
140 * @param string $event Event.
141 * @param int $orderId Order ID.
142 *
143 * @return void
144 */
145 public function handleEventAsync( string $event, int $orderId ): void {
146 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
147 return;
148 }
149 as_schedule_single_action( time(), self::HOOK_NAME_HANDLE_EVENT, [ $event, $orderId, is_admin() === false ] );
150 }
151 }
152