PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Ecommerce / WooCommerce_Status_Manager.php
independent-analytics / IAWP / Ecommerce Last commit date
EDD_Order.php 5 months ago Fluent_Cart_Order.php 5 months ago PMPro_Order.php 5 months ago SureCart_Event_Sync_Job.php 1 year ago SureCart_Order.php 5 months ago SureCart_Store.php 1 year ago WooCommerce_Order.php 5 months ago WooCommerce_Status_Manager.php 1 year ago
WooCommerce_Status_Manager.php
98 lines
1 <?php
2
3 namespace IAWP\Ecommerce;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Query;
7 use IAWPSCOPED\Illuminate\Support\Str;
8 /** @internal */
9 class WooCommerce_Status_Manager
10 {
11 private static $default_status_to_track = [
12 'completed',
13 'processing',
14 'refunded',
15 'shipped',
16 'partial-shipped',
17 'delivered',
18 // Specific to WooCommerce Amazon Fulfillment plugin
19 'sent-to-fba',
20 'part-to-fba',
21 ];
22 public function __construct()
23 {
24 }
25 /**
26 * WooCommerce don't know if it wants statuses to be prefixed with `wc-` or not. It's a bit
27 * of a mess. Instead of calling `wc_get_order_statuses` directly, this proxy function
28 * should be used to normalize those values and strip the prefix off.
29 *
30 * @return array{id: string, name: string, is_tracked: bool}[]
31 */
32 public function get_statuses() : array
33 {
34 $prefixed_statuses = wc_get_order_statuses();
35 $statuses = [];
36 foreach ($prefixed_statuses as $key => $value) {
37 if (Str::startsWith($key, 'wc-')) {
38 $key = Str::replaceFirst('wc-', '', $key);
39 }
40 $statuses[] = ['id' => \strval($key), 'name' => \strval($value), 'is_tracked' => $this->is_tracked_status($key)];
41 }
42 return $statuses;
43 }
44 public function is_valid_status(string $status_id) : bool
45 {
46 $statuses = $this->get_statuses();
47 foreach ($statuses as $status) {
48 if ($status['id'] === $status_id) {
49 return \true;
50 }
51 }
52 return \false;
53 }
54 /**
55 * Use the currently configured statuses to recalculate if a given order in `wp_orders`
56 * should be included in the analytics or not.
57 *
58 * @return void
59 */
60 public function update_order_records_based_on_tracked_statuses() : void
61 {
62 $orders_table = Query::get_table_name(Query::ORDERS);
63 Illuminate_Builder::new()->from($orders_table)->whereNotIn('woocommerce_order_status', $this->get_tracked_status_ids())->update(['is_included_in_analytics' => \false]);
64 Illuminate_Builder::new()->from($orders_table)->whereIn('woocommerce_order_status', $this->get_tracked_status_ids())->update(['is_included_in_analytics' => \true]);
65 }
66 public function set_tracked_statuses(array $tracked_status_ids) : void
67 {
68 $filtered_statuses = \array_filter($tracked_status_ids, function ($status_id) {
69 return $this->is_valid_status($status_id);
70 });
71 \update_option('iawp_tracked_woocommerce_status_ids', $filtered_statuses);
72 }
73 public function is_tracked_status(string $status_id) : bool
74 {
75 return \in_array($status_id, $this->get_tracked_status_ids());
76 }
77 public function reset_tracked_statuses() : void
78 {
79 \delete_option('iawp_tracked_woocommerce_status_ids');
80 }
81 /**
82 * @return string[]
83 */
84 private function get_tracked_status_ids() : array
85 {
86 $status_ids = \IAWPSCOPED\iawp()->get_option('iawp_tracked_woocommerce_status_ids', []);
87 $prefixed_statuses = [];
88 if (!\is_array($status_ids) || \count($status_ids) === 0) {
89 $status_ids = self::$default_status_to_track;
90 }
91 // These need to be prefixed, because you never know what you're going to get back from WooCommerce
92 foreach ($status_ids as $status_id) {
93 $prefixed_statuses[] = 'wc-' . $status_id;
94 }
95 return \array_merge($status_ids, $prefixed_statuses);
96 }
97 }
98