PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.12.2
Independent Analytics – WordPress Analytics Plugin v2.12.2
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 / EDD_Order.php
independent-analytics / IAWP / Ecommerce Last commit date
EDD_Order.php 1 year ago PMPro_Order.php 1 year ago SureCart_Event_Sync_Job.php 1 year ago SureCart_Order.php 1 year ago SureCart_Store.php 1 year ago WooCommerce_Order.php 1 year ago WooCommerce_Referrer_Meta_Box.php 1 year ago WooCommerce_Status_Manager.php 1 year ago
EDD_Order.php
86 lines
1 <?php
2
3 namespace IAWP\Ecommerce;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Models\Visitor;
7 use IAWP\Tables;
8 /** @internal */
9 class EDD_Order
10 {
11 private $order_id;
12 private $status;
13 private $total;
14 private $total_refunded;
15 private $total_refunds;
16 private $is_discounted;
17 public function __construct(int $order_id)
18 {
19 $order = \edd_get_order($order_id);
20 $refunds = \edd_get_order_refunds($order_id);
21 $total_refunded = 0;
22 $total_refunds = 0;
23 foreach ($refunds as $refund) {
24 $total_refunds++;
25 $total_refunded += \abs((float) $refund->total);
26 }
27 $this->order_id = $order_id;
28 $this->status = $order->status;
29 $this->total = \intval(\round((float) $order->total * 100));
30 $this->total_refunded = \intval(\round($total_refunded * 100));
31 $this->total_refunds = $total_refunds;
32 $this->is_discounted = (float) $order->discount > 0;
33 }
34 public function insert()
35 {
36 $visitor = Visitor::fetch_current_visitor();
37 if (!$visitor->has_recorded_session()) {
38 return;
39 }
40 Illuminate_Builder::new()->from(Tables::orders())->insertOrIgnore(['is_included_in_analytics' => $this->is_included_in_analytics($this->status), 'edd_order_id' => $this->order_id, 'edd_order_status' => $this->status, 'view_id' => $visitor->most_recent_view_id(), 'initial_view_id' => $visitor->most_recent_initial_view_id(), 'total' => $this->total, 'total_refunded' => $this->total_refunded, 'total_refunds' => $this->total_refunds, 'is_discounted' => $this->is_discounted, 'created_at' => (new \DateTime())->format('Y-m-d H:i:s')]);
41 }
42 public function update() : void
43 {
44 Illuminate_Builder::new()->from(Tables::orders())->where('edd_order_id', '=', $this->order_id)->update(['is_included_in_analytics' => $this->is_included_in_analytics($this->status), 'edd_order_status' => $this->status, 'total' => $this->total, 'total_refunded' => $this->total_refunded, 'total_refunds' => $this->total_refunds, 'is_discounted' => $this->is_discounted]);
45 }
46 private function is_included_in_analytics(string $status) : bool
47 {
48 return \in_array($status, ['complete', 'refunded', 'partially_refunded']);
49 }
50 public static function register_hooks() : void
51 {
52 // While the EDD docs recommend it, we cannot use `edd_after_order_actions` as it runs in
53 // a cron job 30 seconds after the order is completed. We need to run in the same request,
54 // so we can determine which visitor make the purchase and attach the order correctly.
55 \add_action('edd_complete_purchase', function ($order_id) {
56 try {
57 $order = new self($order_id);
58 $order->insert();
59 } catch (\Throwable $e) {
60 \error_log('Independent Analytics was unable to track the analytics for a EDD order. Please report this error to Independent Analytics. The error message is below.');
61 \error_log($e->getMessage());
62 }
63 }, 10, 1);
64 // Track order status changes
65 \add_action('edd_update_payment_status', function ($order_id) {
66 try {
67 $order = new self($order_id);
68 $order->update();
69 } catch (\Throwable $e) {
70 \error_log('Independent Analytics was unable to track the analytics for a EDD order. Please report this error to Independent Analytics. The error message is below.');
71 \error_log($e->getMessage());
72 }
73 }, 10, 1);
74 // Track refunds to orders
75 \add_action('edd_refund_order', function ($order_id) {
76 try {
77 $order = new self($order_id);
78 $order->update();
79 } catch (\Throwable $e) {
80 \error_log('Independent Analytics was unable to track the analytics for a EDD order. Please report this error to Independent Analytics. The error message is below.');
81 \error_log($e->getMessage());
82 }
83 }, 10, 1);
84 }
85 }
86