PluginProbe
AliNext – WooCommerce Dropshipping Plugin for AliExpress / trunk
AliNext – WooCommerce Dropshipping Plugin for AliExpress vtrunk
ali2woo-lite / includes / classes / WooCommerceOrderItem.php

WooCommerceOrderItem.php in AliNext – WooCommerce Dropshipping Plugin for AliExpress trunk, at includes/classes/WooCommerceOrderItem.php

351 lines 10.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Description of WooCommerceOrderItem
5 *
6 * @author Ali2Woo Team
7 */
8
9 namespace AliNext_Lite;;
10
11 use WC_Order_Item_Product;
12 use WC_Product_Variable;
13
14 class WooCommerceOrderItem
15 {
16 /**
17 * @var WC_Order_Item_Product
18 */
19 private $orderItem;
20 private $has_changes; //use it for Woocommerce CRUD
21
22 public function __construct($order_item)
23 {
24 if (is_numeric($order_item)) {
25 $this->orderItem = new WC_Order_Item_Product($order_item);
26 } else {
27 $this->orderItem = $order_item;
28 }
29 $this->has_changes = false;
30 }
31
32 public function get_id()
33 {
34 if (get_class($this->orderItem) == 'WC_Order_Item_Product') {
35 return $this->orderItem->get_id();
36 } else {
37 return $this->orderItem['id'];
38 }
39 }
40
41 public function get_order_id(): int
42 {
43 return $this->orderItem->get_order()->get_id();
44 }
45
46 public function get_name()
47 {
48 if (get_class($this->orderItem) == 'WC_Order_Item_Product') {
49 return $this->orderItem->get_name();
50 } else {
51 return $this->orderItem['name'];
52 }
53 }
54
55 public function get_product_id()
56 {
57 if (get_class($this->orderItem) == 'WC_Order_Item_Product') {
58 return $this->orderItem->get_product_id();
59 } else {
60 return $this->orderItem['product_id'];
61 }
62 }
63
64 public function get_variation_id()
65 {
66 if (get_class($this->orderItem) == 'WC_Order_Item_Product') {
67 return $this->orderItem->get_variation_id();
68 } else {
69 return $this->orderItem['variation_id'];
70 }
71 }
72
73 public function get_quantity()
74 {
75 if (get_class($this->orderItem) == 'WC_Order_Item_Product') {
76 return $this->orderItem->get_quantity();
77 } else {
78 return $this->orderItem['qty'];
79 }
80 }
81
82 public static function check_is_delivered(string $status): bool
83 {
84 $checkStatus = strtolower(trim($status));
85 $allowedStatuses = ['delivery successful', 'delivered', 'buyer_accept_goods', 'finish'];
86
87 return in_array($checkStatus, $allowedStatuses, true);
88 }
89
90 public function is_delivered(): bool
91 {
92 $tracking_status = $this->get_tracking_status();
93 if ($tracking_status) {
94 return self::check_is_delivered($tracking_status);
95 }
96
97 return false;
98 }
99
100 public function is_shipped(): bool
101 {
102 $status = $this->get_tracking_status();
103
104 if ($status) {
105 $checkStatus = strtolower(trim($status));
106 $allowedStatuses = ['seller_shipped', 'seller_send_goods', 'wait_buyer_accept_goods'];
107
108 return in_array($checkStatus, $allowedStatuses, true);
109 }
110
111 return false;
112 }
113
114 public function get_external_product_id(): ?string
115 {
116 $product_id = $this->get_product_id();
117 $WC_Product = wc_get_product($product_id);
118 $result = null;
119 if ($WC_Product) {
120 /**
121 * here can be a case when product is already deleted in Woocommerce
122 */
123 $result = $WC_Product->get_meta(Constants::product_external_meta());
124 }
125
126 return $result;
127 }
128
129 public function get_external_order_id()
130 {
131 $external_order_id = $this->orderItem->get_meta(Constants::order_item_external_order_meta());
132
133 return is_array($external_order_id) ? $external_order_id[0] : '';
134 }
135
136 public function get_external_sku_id(): ?string
137 {
138 $productId = $this->get_product_id();
139 $variationId = $this->get_variation_id();
140
141 if (!$variationId && $productId) {
142 $WC_Product_Variable = new WC_Product_Variable($productId);
143 $variations = $WC_Product_Variable->get_available_variations();
144 if (!empty($variations)) {
145 $variationId = $variations[0]['variation_id'];
146 }
147 }
148
149 if (!$variationId) {
150 return null;
151 }
152
153 $skuId = get_post_meta($variationId, ImportedProductService::KEY_EXTERNAL_SKU_ID, true);
154 return $skuId !== '' ? $skuId : null;
155 }
156
157 private function get_tracking_data()
158 {
159 $tracking_data = $this->orderItem->get_meta(Constants::order_item_tracking_data_meta());
160
161 if (!$tracking_data) {
162 $tracking_data = array();
163 $tracking_data = array("tracking_codes" => array(), "carrier_name" => '', "carrier_url" => '', "tracking_status" => '');
164 }
165
166 if (!isset($tracking_data['tracking_codes'])) {
167 $tracking_data['tracking_codes'] = array();
168 }
169
170 if (!isset($tracking_data['carrier_name'])) {
171 $tracking_data['carrier_name'] = '';
172 }
173
174 if (!isset($tracking_data['carrier_url'])) {
175 $tracking_data['carrier_url'] = '';
176 }
177
178 if (!isset($tracking_data['tracking_status'])) {
179 $tracking_data['tracking_status'] = '';
180 }
181
182 return $tracking_data;
183 }
184
185 public function get_tracking_codes()
186 {
187
188 $tracking_data = $this->get_tracking_data();
189
190 return ($tracking_data && isset($tracking_data['tracking_codes'])) ? $tracking_data['tracking_codes'] : array();
191
192 return array();
193 }
194
195 public function get_tracking_status()
196 {
197 $tracking_data = $this->get_tracking_data();
198 $tracking_status = $tracking_data['tracking_status'];
199 return $tracking_status;
200 }
201
202 public function get_carrier_name()
203 {
204 $tracking_data = $this->get_tracking_data();
205 if ($tracking_data && isset($tracking_data['tracking_codes'])) {
206 return $tracking_data['carrier_name'];
207 }
208 return "";
209 }
210
211 public function get_ali_order_item_link()
212 {
213 $external_order_id = $this->get_external_order_id();
214
215 if ($external_order_id) {
216 $url = "https://trade.aliexpress.com/order_detail.htm?orderId={$external_order_id}";
217 return "<a target='_blank' href='{$url}'>" . $external_order_id . "</a>";
218 } else {
219 return false;
220 }
221
222 }
223
224 public function get_formated_carrier_link()
225 {
226 $tracking_data = $this->get_tracking_data();
227
228 if ($tracking_data && isset($tracking_data['tracking_codes'])) {
229
230 $tracking_url = $tracking_data['carrier_url'];
231 $carrier_name = $tracking_data['carrier_name'];
232
233 if ($tracking_url && $carrier_name) {
234 return "<a target='_blank' href='{$tracking_url}'>" . $carrier_name . "</a>";
235 } else if ($carrier_name) {
236 return $carrier_name;
237 }
238
239 }
240
241 return "";
242 }
243
244 public function get_formated_tracking_codes($plain = false)
245 {
246
247 $tracking_numbers = $this->get_tracking_codes();
248
249 $tracking_numbers_formated = array();
250
251 if (!$plain) {
252
253 $tracking_url_template = "https://global.cainiao.com/detail.htm?mailNoList={tracking_number}";
254
255 $tracking_url_template = apply_filters('a2wl_get_tracking_url_template', $tracking_url_template);
256
257 foreach ($tracking_numbers as $tracking_number) {
258 $tracking_url = str_replace('{tracking_number}', $tracking_number, $tracking_url_template);
259 $link_title = esc_html__('Click to see the tracking information', 'ali2woo');
260 $tracking_numbers_formated[] = "<a target='_blank' title='{$link_title}' href='{$tracking_url}'>" . $tracking_number . "</a>";
261 }
262
263 } else {
264 $tracking_numbers_formated = $tracking_numbers;
265 }
266
267 return !empty($tracking_numbers_formated) ? implode(",", $tracking_numbers_formated) : "";
268
269 }
270
271 public function get_ali_shipping_code()
272 {
273 $shipping_code = '';
274
275 $shipping_meta = $this->orderItem->get_meta(Shipping::get_order_item_shipping_meta_key());
276
277 $legacy_shipping_meta = $this->orderItem->get_meta(Shipping::get_order_item_legacy_shipping_meta_key());
278
279 if ($shipping_meta) {
280 $shipping_info = json_decode($shipping_meta, true);
281 $shipping_code = $shipping_info['service_name'];
282 } else
283
284 if ($legacy_shipping_meta) {
285 $shipping_code = $legacy_shipping_meta;
286 }
287
288 return $shipping_code;
289 }
290
291 public function update_tracking_data($tracking_codes, $carrier_name, $carrier_url, $tracking_status, $force_save = false)
292 {
293
294 foreach ($tracking_codes as $tracking_number) {
295 $order_id = $this->orderItem->get_order_id();
296 // $order_item_id = $this->orderItem->get_id();
297 do_action('wcae_after_add_tracking_code', $order_id, $tracking_number);
298 }
299
300 $this->orderItem->update_meta_data(Constants::order_item_tracking_data_meta(), array("tracking_codes" => $tracking_codes, "carrier_name" => $carrier_name, "carrier_url" => $carrier_url, "tracking_status" => $tracking_status));
301
302 $this->has_changes = true;
303 if ($force_save) {
304 $this->save();
305 }
306 }
307
308 public function update_tracking_codes($tracking_codes, $force_save = false)
309 {
310
311 foreach ($tracking_codes as $tracking_number) {
312 $order_id = $this->orderItem->get_order_id();
313 // $order_item_id = $this->orderItem->get_id();
314 do_action('wcae_after_add_tracking_code', $order_id, $tracking_number);
315 }
316
317 $tracking_data = $this->get_tracking_data();
318
319 $tracking_data["tracking_codes"] = $tracking_codes;
320
321 $this->orderItem->update_meta_data(Constants::order_item_tracking_data_meta(), $tracking_data);
322
323 $this->has_changes = true;
324 if ($force_save) {
325 $this->save();
326 }
327 }
328
329 public function update_external_order($external_order_id, $force_save = false)
330 {
331
332 $this->orderItem->update_meta_data(Constants::order_item_external_order_meta(), $external_order_id ? array($external_order_id) : "");
333
334 $this->has_changes = true;
335 if ($force_save) {
336 $this->save();
337 }
338 }
339
340 public function save()
341 {
342 if ($this->has_changes && get_class($this->orderItem) == 'WC_Order_Item_Product') {
343 $this->orderItem->save();
344 return true;
345 }
346
347 return false;
348 }
349
350 }
351