PluginProbe
Packeta / trunk
Packeta vtrunk
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 trunk, at src/Packetery/Module/Order/PacketAutoSubmitter.php

176 lines 4.2 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 Packetery\Module\WcLogger;
15 use WC_Payment_Gateway;
16
17 /**
18 * Class PacketAutoSubmitter
19 *
20 * @package Packetery\Module\Order
21 */
22 class PacketAutoSubmitter {
23
24 private const HOOK_NAME_HANDLE_EVENT = 'packetery_auto_submission_handle_event';
25
26 public const EVENT_ON_ORDER_COMPLETED = 'onOrderCompleted';
27 public const EVENT_ON_ORDER_PROCESSING = 'onOrderProcessing';
28 public const EVENT_ON_ORDER_CREATION_FE = 'onOrderCreationFE';
29
30 /**
31 * Options provider.
32 *
33 * @var OptionsProvider
34 */
35 private $optionsProvider;
36
37 /**
38 * Packet submitter.
39 *
40 * @var PacketSubmitter
41 */
42 private $packetSubmitter;
43
44 /**
45 * Order repository.
46 *
47 * @var Repository
48 */
49 private $orderRepository;
50
51 /**
52 * Constructor.
53 *
54 * @param OptionsProvider $optionsProvider Options provider.
55 * @param PacketSubmitter $packetSubmitter Packet submitter.
56 * @param Repository $orderRepository Order repository.
57 */
58 public function __construct(
59 OptionsProvider $optionsProvider,
60 PacketSubmitter $packetSubmitter,
61 Repository $orderRepository
62 ) {
63 $this->optionsProvider = $optionsProvider;
64 $this->packetSubmitter = $packetSubmitter;
65 $this->orderRepository = $orderRepository;
66 }
67
68 /**
69 * Registers listeners.
70 *
71 * @return void
72 */
73 public function register(): void {
74 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
75 return;
76 }
77
78 add_action( self::HOOK_NAME_HANDLE_EVENT, [ $this, 'handleEvent' ], 10, 2 );
79
80 $mappedEvents = $this->optionsProvider->getPacketAutoSubmissionMappedUniqueEvents();
81 foreach ( $mappedEvents as $mappedEvent ) {
82 if ( $mappedEvent === self::EVENT_ON_ORDER_COMPLETED ) {
83 add_action(
84 'woocommerce_order_status_completed',
85 function ( $orderId ): void {
86 if ( ! is_int( $orderId ) ) {
87 WcLogger::logArgumentTypeError( __METHOD__, 'orderId', 'int', $orderId );
88
89 return;
90 }
91
92 $this->handleEvent( self::EVENT_ON_ORDER_COMPLETED, $orderId );
93 }
94 );
95
96 continue;
97 }
98
99 if ( $mappedEvent === self::EVENT_ON_ORDER_PROCESSING ) {
100 add_action(
101 'woocommerce_order_status_processing',
102 function ( $orderId ): void {
103 if ( ! is_int( $orderId ) ) {
104 WcLogger::logArgumentTypeError( __METHOD__, 'orderId', 'int', $orderId );
105
106 return;
107 }
108
109 $this->handleEvent( self::EVENT_ON_ORDER_PROCESSING, $orderId );
110 }
111 );
112 }
113 }
114 }
115
116 /**
117 * Handle event.
118 *
119 * @param string|mixed $event Event.
120 * @param int|mixed $orderId WC Order.
121 * @return void
122 */
123 public function handleEvent( $event, $orderId ): void {
124 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
125 return;
126 }
127
128 if ( ! is_string( $event ) ) {
129 WcLogger::logArgumentTypeError( __METHOD__, 'event', 'string', $event );
130
131 return;
132 }
133
134 if ( ! is_int( $orderId ) ) {
135 WcLogger::logArgumentTypeError( __METHOD__, 'orderId', 'int', $orderId );
136
137 return;
138 }
139
140 $wcOrder = $this->orderRepository->getWcOrderById( $orderId );
141 assert( $wcOrder !== null, 'WC order has to be present' );
142
143 $paymentGateway = wc_get_payment_gateway_by_order( $wcOrder );
144 if (
145 ! $paymentGateway instanceof WC_Payment_Gateway ||
146 array_key_exists( $paymentGateway->id, PaymentGatewayHelper::getAvailablePaymentGateways() ) === false
147 ) {
148 return;
149 }
150
151 $mappingEventForGateway = $this->optionsProvider->getPacketAutoSubmissionEventForPaymentGateway(
152 $this->optionsProvider->sanitizePaymentGatewayId( $paymentGateway->id )
153 );
154 if ( $mappingEventForGateway === null || $mappingEventForGateway !== $event ) {
155 return;
156 }
157
158 $this->packetSubmitter->submitPacket( $wcOrder );
159 }
160
161 /**
162 * Handles event async.
163 *
164 * @param string $event Event.
165 * @param int $orderId Order ID.
166 *
167 * @return void
168 */
169 public function handleEventAsync( string $event, int $orderId ): void {
170 if ( $this->optionsProvider->isPacketAutoSubmissionEnabled() === false ) {
171 return;
172 }
173 as_schedule_single_action( time(), self::HOOK_NAME_HANDLE_EVENT, [ $event, $orderId, is_admin() === false ] );
174 }
175 }
176