PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.3.26
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.3.26
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
fluent-cart / app / Helpers / Status.php

Status.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.3.26, at app/Helpers/Status.php

493 lines 18.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Helpers;
4
5 class Status
6 {
7 // product statuses: publish, draft, pending, private, future
8 public const PRODUCT_PUBLISH = 'publish';
9 public const PRODUCT_DRAFT = 'draft';
10 public const PRODUCT_PRIVATE = 'private';
11 public const PRODUCT_FUTURE = 'future';
12 public const PRODUCT_TRASH = 'trash';
13
14 // Order Statuses
15 public const ORDER_PROCESSING = 'processing';
16 public const ORDER_COMPLETED = 'completed';
17 public const ORDER_ON_HOLD = 'on-hold';
18 public const ORDER_CANCELED = 'canceled';
19 public const ORDER_FAILED = 'failed';
20
21 public const ORDER_MODE_TEST = 'test';
22 public const ORDER_MODE_LIVE = 'live';
23
24 // Payment Statuses
25 public const PAYMENT_PENDING = 'pending';
26 public const PAYMENT_PAID = 'paid';
27 public const PAYMENT_PARTIALLY_PAID = 'partially_paid';
28 public const PAYMENT_FAILED = 'failed';
29 public const PAYMENT_REFUNDED = 'refunded';
30 public const PAYMENT_PARTIALLY_REFUNDED = 'partially_refunded';
31 public const PAYMENT_AUTHORIZED = 'authorized';
32
33 // Transaction Statuses
34 public const TRANSACTION_SUCCEEDED = 'succeeded';
35 public const TRANSACTION_AUTHORIZED = 'authorized';
36 public const TRANSACTION_PENDING = 'pending';
37 public const TRANSACTION_REFUNDED = 'refunded';
38 public const TRANSACTION_FAILED = 'failed';
39 public const TRANSACTION_DISPUTE_LOST = 'dispute_lost';
40
41
42 // Transaction table transaction_type status
43 public const TRANSACTION_TYPE_CHARGE = 'charge';
44 public const TRANSACTION_TYPE_REFUND = 'refund';
45 public const TRANSACTION_TYPE_DISPUTE = 'dispute';
46
47 // todo: will remove after some necessary test
48 public const TRANSACTION_TYPE_SIGNUP = 'signup_fee';
49
50 // Subscription Statuses
51 public const SUBSCRIPTION_PENDING = 'pending';
52 public const SUBSCRIPTION_INTENDED = 'intended';
53 public const SUBSCRIPTION_TRIALING = 'trialing';
54 public const SUBSCRIPTION_ACTIVE = 'active';
55
56 public const SUBSCRIPTION_CANCELED = 'canceled';
57 public const SUBSCRIPTION_PAUSED = 'paused';
58 public const SUBSCRIPTION_PAST_DUE = 'past_due';
59 public const SUBSCRIPTION_EXPIRED = 'expired';
60 public const SUBSCRIPTION_FAILING = 'failing';
61 public const SUBSCRIPTION_EXPIRING = 'expiring';
62 public const SUBSCRIPTION_COMPLETED = 'completed';
63 public const SUBSCRIPTION_AUTHENTICATED = 'authenticated';
64 public const SUBSCRIPTION_CREATED = 'created';
65
66 // billing interval
67 public const BILLING_YEARLY = 'yearly';
68 public const BILLING_HALF_YEARLY = 'half_yearly';
69 public const BILLING_QUARTERLY = 'quarterly';
70 public const BILLING_MONTHLY = 'monthly';
71 public const BILLING_WEEKLY = 'weekly';
72 public const BILLING_DAILY = 'daily';
73
74 // Shipping Statuses
75 public const SHIPPING_UNSHIPPED = 'unshipped';
76 public const SHIPPING_SHIPPED = 'shipped';
77 public const SHIPPING_DELIVERED = 'delivered';
78 public const SHIPPING_UNSHIPPABLE = 'unshippable';
79
80 // Customer Statuses
81 public const CUSTOMER_ACTIVE = 'active';
82 public const CUSTOMER_INACTIVE = 'inactive';
83
84 // Stock Statuses
85 public const STOCK_INSTOCK = 'instock';
86 public const STOCK_OUTOFSTOCK = 'outofstock';
87 public const STOCK_ONBACKORDER = 'onbackorder';
88
89
90 public const SCHEDULE_PENDING = 'pending';
91 public const SCHEDULE_COMPLETED = 'completed';
92 public const SCHEDULE_FAILED = 'failed';
93
94 public const SCHEDULE_PROCESSING = 'processing';
95
96 public const LICENSE_ACTIVE = 'active';
97 public const LICENSE_DISABLED = 'disabled';
98 public const LICENSE_EXPIRED = 'expired';
99
100 public const FULFILLMENT_TYPE_PHYSICAL = 'physical';
101 public const FULFILLMENT_TYPE_DIGITAL = 'digital';
102
103 public const ORDER_TYPE_PAYMENT = 'payment';
104 public const ORDER_TYPE_SUBSCRIPTION = 'subscription';
105 public const ORDER_TYPE_RENEWAL = 'renewal';
106
107
108 public static function getProductStatuses($withLabel = true)
109 {
110 return apply_filters('fluent_cart/product_statuses', [
111 self::PRODUCT_PUBLISH => __('Publish', 'fluent-cart'),
112 self::PRODUCT_DRAFT => __('Draft', 'fluent-cart'),
113 self::PRODUCT_PRIVATE => __('Private', 'fluent-cart'),
114 self::PRODUCT_FUTURE => __('Scheduled', 'fluent-cart'),
115 self::PRODUCT_TRASH => __('Trashed', 'fluent-cart'),
116 ], []);
117
118 if ($withLabel) {
119 return $statues;
120 }
121
122 return array_keys($statues);
123 }
124
125 public static function getScheduleStatus($status): string
126 {
127 $statuses = [
128 'pending' => Status::SCHEDULE_PENDING,
129 'processing' => Status::SCHEDULE_PROCESSING,
130 'completed' => Status::SCHEDULE_COMPLETED,
131 'failed' => Status::SCHEDULE_FAILED,
132 ];
133
134 return $statuses[$status] ?? Status::SCHEDULE_PENDING;
135 }
136
137 public static function getLicenseStatus($status): string
138 {
139 $statuses = [
140 'active' => Status::LICENSE_ACTIVE,
141 'disabled' => Status::LICENSE_DISABLED,
142 'expired' => Status::LICENSE_EXPIRED,
143 ];
144
145 return $statuses[$status] ?? Status::LICENSE_ACTIVE;
146 }
147
148 public static function productAdminAllStatuses()
149 {
150 $statuses = self::getProductStatuses();
151 unset($statuses[self::PRODUCT_TRASH]);
152 return array_keys($statuses);
153 }
154
155
156 // Order statuses
157 public static function getOrderStatuses()
158 {
159 return apply_filters('fluent_cart/order_statuses', [
160 self::ORDER_PROCESSING => __('Processing', 'fluent-cart'),
161 self::ORDER_COMPLETED => __('Completed', 'fluent-cart'),
162 self::ORDER_ON_HOLD => __('On Hold', 'fluent-cart'),
163 self::ORDER_CANCELED => __('Canceled', 'fluent-cart'),
164 self::ORDER_FAILED => __('Failed', 'fluent-cart'),
165 ], []);
166 }
167
168 public static function getEditableOrderStatuses()
169 {
170 $statuses = apply_filters_deprecated('fluent-cart/editable_order_statuses', [
171 [
172 self::ORDER_ON_HOLD => __('On Hold', 'fluent-cart'),
173 self::ORDER_PROCESSING => __('Processing', 'fluent-cart'),
174 self::ORDER_COMPLETED => __('Completed', 'fluent-cart'),
175 // 'archived' => __('Archived', 'fluent-cart'),
176 self::ORDER_CANCELED => __('Canceled', 'fluent-cart')
177 ], []
178 ], '1.3.16', 'fluent_cart/editable_order_statuses', 'Use fluent_cart/editable_order_statuses instead of fluent-cart/editable_order_statuses.');
179
180 return apply_filters('fluent_cart/editable_order_statuses', $statuses, []);
181 }
182
183
184 // Payment statuses
185 public static function getPaymentStatuses()
186 {
187 return apply_filters('fluent_cart/payment_statuses', [
188 self::PAYMENT_PENDING => __('Pending', 'fluent-cart'),
189 self::PAYMENT_PAID => __('Paid', 'fluent-cart'),
190 self::PAYMENT_PARTIALLY_PAID => __('Partially Paid', 'fluent-cart'),
191 self::PAYMENT_FAILED => __('Failed', 'fluent-cart'),
192 self::PAYMENT_REFUNDED => __('Refunded', 'fluent-cart'),
193 self::PAYMENT_PARTIALLY_REFUNDED => __('Partially Refunded', 'fluent-cart'),
194 self::PAYMENT_AUTHORIZED => __('Authorized', 'fluent-cart'),
195 ], []);
196 }
197
198 // Transaction statuses
199 public static function getTransactionStatuses($withLabel = true)
200 {
201 return apply_filters('fluent_cart/transaction_statuses', [
202 self::TRANSACTION_PENDING => __('Pending', 'fluent-cart'),
203 self::TRANSACTION_SUCCEEDED => __('Succeeded', 'fluent-cart'),
204 self::TRANSACTION_AUTHORIZED => __('Authorized', 'fluent-cart'),
205 self::TRANSACTION_FAILED => __('Failed', 'fluent-cart'),
206 self::TRANSACTION_REFUNDED => __('Refunded', 'fluent-cart'),
207 ], []);
208
209 if ($withLabel) {
210 return $statuses;
211 }
212
213 return array_keys($statuses);
214 }
215
216 public static function getEditableTransactionStatuses($withLabel = true)
217 {
218 $statuses = apply_filters_deprecated('fluent-cart/editable_transaction_statuses', [
219 [
220 self::TRANSACTION_PENDING => __('Pending', 'fluent-cart'),
221 self::TRANSACTION_SUCCEEDED => __('Succeeded', 'fluent-cart'),
222 self::TRANSACTION_AUTHORIZED => __('Authorized', 'fluent-cart'),
223 self::TRANSACTION_FAILED => __('Failed', 'fluent-cart'),
224 self::TRANSACTION_REFUNDED => __('Refunded', 'fluent-cart'),
225 ], []
226 ], '1.3.16', 'fluent_cart/editable_transaction_statuses', 'Use fluent_cart/editable_transaction_statuses instead of fluent-cart/editable_transaction_statuses.');
227
228 $statuses = apply_filters('fluent_cart/editable_transaction_statuses', $statuses, []);
229
230 if ($withLabel) {
231 return $statuses;
232 }
233
234 return array_keys($statuses);
235 }
236
237 // Shipping statuses
238 public static function getShippingStatuses()
239 {
240 return apply_filters('fluent_cart/shipping_statuses', [
241 self::SHIPPING_UNSHIPPED => __('Unshipped', 'fluent-cart'),
242 self::SHIPPING_SHIPPED => __('Shipped', 'fluent-cart'),
243 self::SHIPPING_DELIVERED => __('Delivered', 'fluent-cart'),
244 self::SHIPPING_UNSHIPPABLE => __('Unshippable', 'fluent-cart'),
245 ], []);
246 }
247
248 public static function getEditableShippingStatuses()
249 {
250 $statuses = apply_filters_deprecated('fluent-cart/editable_order_statuses', [
251 [
252 self::SHIPPING_UNSHIPPED => __('Unshipped', 'fluent-cart'),
253 self::SHIPPING_SHIPPED => __('Shipped', 'fluent-cart'),
254 self::SHIPPING_DELIVERED => __('Delivered', 'fluent-cart'),
255 self::SHIPPING_UNSHIPPABLE => __('Unshippable', 'fluent-cart'),
256 ], []
257 ], '1.3.16', 'fluent_cart/editable_shipping_statuses', 'Use fluent_cart/editable_shipping_statuses instead of fluent-cart/editable_order_statuses.');
258
259 return apply_filters('fluent_cart/editable_shipping_statuses', $statuses, []);
260 }
261
262 // Subscription statuses
263 public static function getSubscriptionStatuses()
264 {
265 return apply_filters('fluent_cart/subscription_statuses', [
266 self::SUBSCRIPTION_PENDING => __('Pending', 'fluent-cart'),
267 self::SUBSCRIPTION_ACTIVE => __('Active', 'fluent-cart'),
268 self::SUBSCRIPTION_FAILING => __('Failing', 'fluent-cart'),
269 self::SUBSCRIPTION_PAUSED => __('Paused', 'fluent-cart'),
270 self::SUBSCRIPTION_EXPIRED => __('Expired', 'fluent-cart'),
271 self::SUBSCRIPTION_EXPIRING => __('Expiring', 'fluent-cart'),
272 self::SUBSCRIPTION_CANCELED => __('Canceled', 'fluent-cart'),
273 self::SUBSCRIPTION_TRIALING => __('Trialing', 'fluent-cart'),
274 self::SUBSCRIPTION_INTENDED => __('Intended', 'fluent-cart'),
275 self::SUBSCRIPTION_PAST_DUE => __('Past Due', 'fluent-cart'),
276 self::SUBSCRIPTION_COMPLETED => __('Completed', 'fluent-cart'),
277 ], []);
278 }
279
280 // Get Validable Subscription Statuses
281 public static function getValidableSubscriptionStatuses()
282 {
283 return apply_filters('fluent_cart/validable_subscription_statuses', [
284 self::SUBSCRIPTION_ACTIVE,
285 self::SUBSCRIPTION_TRIALING,
286 ], []);
287 }
288
289
290 // Stock statuses
291 public static function getStockStatuses($withLabel = true)
292 {
293 $statues = [
294 self::STOCK_INSTOCK => __('In Stock', 'fluent-cart'),
295 self::STOCK_OUTOFSTOCK => __('Out Of Stock', 'fluent-cart'),
296 ];
297
298 if ($withLabel) {
299 return $statues;
300 }
301
302 return array_keys($statues);
303 }
304
305 public static function getOrderSuccessStatuses()
306 {
307 return [
308 self::ORDER_COMPLETED,
309 self::ORDER_PROCESSING,
310 ];
311 }
312
313 public static function getOrderFailedStatuses()
314 {
315 return [
316 self::ORDER_FAILED,
317 //'refunded',
318 self::ORDER_CANCELED,
319 ];
320 }
321
322 public static function getOrderPaymentSuccessStatuses()
323 {
324 return [
325 self::PAYMENT_PAID,
326 self::PAYMENT_PARTIALLY_REFUNDED,
327 self::PAYMENT_PARTIALLY_PAID
328 ];
329 }
330
331 public static function getReportStatuses()
332 {
333 return [
334 self::PAYMENT_PAID,
335 self::PAYMENT_REFUNDED,
336 self::PAYMENT_PARTIALLY_PAID,
337 self::PAYMENT_PARTIALLY_REFUNDED,
338 ];
339 }
340
341 public static function getTransactionSuccessStatuses()
342 {
343 return apply_filters('fluent_cart/transaction_success_statuses', [self::TRANSACTION_SUCCEEDED, self::TRANSACTION_AUTHORIZED], []);
344 }
345
346 // Get all statuses (optional utility)
347 public static function all()
348 {
349 return [
350 'product' => self::getProductStatuses(),
351 'order' => self::getOrderStatuses(),
352 'payment' => self::getPaymentStatuses(),
353 'transaction' => self::getTransactionStatuses(),
354 'shipping' => self::getShippingStatuses(),
355 'customer' => self::getEditableCustomerStatuses(),
356 'subscription' => self::getSubscriptionStatuses(),
357 ];
358 }
359
360 public static function getEditableCustomerStatuses()
361 {
362 $statuses = apply_filters_deprecated('fluent-cart/editable_customer_statuses', [
363 [
364 self::CUSTOMER_ACTIVE => __('Active', 'fluent-cart'),
365 self::CUSTOMER_INACTIVE => __('Inactive', 'fluent-cart'),
366 ], []
367 ], '1.3.16', 'fluent_cart/editable_customer_statuses', 'Use fluent_cart/editable_customer_statuses instead of fluent-cart/editable_customer_statuses.');
368
369 return apply_filters('fluent_cart/editable_customer_statuses', $statuses, []);
370 }
371
372 // call when syncing status from external services, ex:
373 public static function syncPaymentStatus($status)
374 {
375 $status = strtolower($status);
376 $statuses = self::getPaymentStatuses();
377
378 if (isset($statuses[$status])) {
379 return $status;
380 }
381
382 if ('completed' === $status) {
383 return self::PAYMENT_PAID;
384 }
385
386 if ('succeeded' === $status) {
387 return self::PAYMENT_PAID;
388 }
389
390 return $status;
391 }
392
393 public static function syncTransactionStatus($status)
394 {
395 $status = strtolower($status);
396 $statuses = self::getTransactionStatuses();
397
398 if (isset($statuses[$status])) {
399 return $status;
400 }
401
402 if ('paid' === $status) {
403 return self::TRANSACTION_SUCCEEDED;
404 } else if ('succeeded' === $status) {
405 return self::TRANSACTION_SUCCEEDED;
406 }
407
408 return $status;
409 }
410
411 public static function syncSubscriptionStatus($status)
412 {
413 if ('cancelled' === $status || 'canceled' === $status) {
414 return self::SUBSCRIPTION_CANCELED;
415 }
416
417 return $status;
418 }
419
420 public static function eventTriggers(): array
421 {
422 return [
423 'require_list' => false,
424 'required' => true,
425 'key' => 'event_trigger',
426 'options' => [
427 'order' => [
428 'label' => __('Orders', 'fluent-cart'),
429 'options' => [
430 [
431 'value' => 'order_paid_done',
432 'label' => __('Order Paid (Payment / Subscription)', 'fluent-cart')
433 ],
434 [
435 'value' => 'order_status_changed_to_canceled',
436 'label' => __('Order Canceled', 'fluent-cart')
437 ],
438 [
439 'value' => 'order_fully_refunded',
440 'label' => __('Order Refunded (Full)', 'fluent-cart')
441 ]
442 ]
443 ],
444 'subscription' => [
445 'label' => __('Subscriptions', 'fluent-cart'),
446 'options' => [
447 [
448 'value' => 'subscription_activated',
449 'label' => __('Subscription Activated', 'fluent-cart')
450 ],
451 [
452 'value' => 'subscription_canceled',
453 'label' => __('Subscription Canceled', 'fluent-cart')
454 ],
455 [
456 'value' => 'subscription_renewed',
457 'label' => __('Subscription Renewed', 'fluent-cart')
458 ],
459 [
460 'value' => 'subscription_eot',
461 'label' => __('Subscription End of Term (Completed)', 'fluent-cart')
462 ],
463 [
464 'value' => 'subscription_expired_validity',
465 'label' => __('Subscription Expired / End of Access Validity', 'fluent-cart')
466 ]
467 ]
468 ],
469 'product' => [
470 'label' => __('Shipping', 'fluent-cart'),
471 'options' => [
472 [
473 'value' => 'shipping_status_changed_to_shipped',
474 'label' => __('Order Shipped', 'fluent-cart')
475 ],
476 [
477 'value' => 'shipping_status_changed_to_delivered',
478 'label' => __('Order Delivered', 'fluent-cart')
479 ]
480 ]
481 ]
482 ],
483 'inline_tip' => __('Select in which event you want to trigger this feed', 'fluent-cart'),
484 'label' => __('Event Trigger', 'fluent-cart'),
485 'placeholder' => __('Select Event', 'fluent-cart'),
486 'component' => 'selection_group',
487 'checkbox_label' => __('Event Trigger For This Feed', 'fluent-cart'),
488 ];
489 }
490
491 // Additional statuses can be added here as needed
492 }
493