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 / PMPro_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
PMPro_Order.php
78 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 PMPro_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 = new \MemberOrder($order_id);
20 $this->order_id = $order_id;
21 $this->status = $order->status;
22 $this->total = \intval(\round((float) $order->total * 100));
23 $this->total_refunded = $order->status === 'refunded' ? $this->total : 0;
24 $this->total_refunds = $order->status === 'refunded' ? 1 : 0;
25 $this->is_discounted = \is_numeric($order->discount_code_id) && (int) $order->discount_code_id !== 0;
26 }
27 public function insert()
28 {
29 $visitor = Visitor::fetch_current_visitor();
30 if (!$visitor->has_recorded_session()) {
31 return;
32 }
33 Illuminate_Builder::new()->from(Tables::orders())->insertOrIgnore(['is_included_in_analytics' => $this->is_included_in_analytics($this->status), 'pmpro_order_id' => $this->order_id, 'pmpro_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')]);
34 }
35 public function update() : void
36 {
37 Illuminate_Builder::new()->from(Tables::orders())->where('pmpro_order_id', '=', $this->order_id)->update(['is_included_in_analytics' => $this->is_included_in_analytics($this->status), 'pmpro_order_status' => $this->status, 'total' => $this->total, 'total_refunded' => $this->total_refunded, 'total_refunds' => $this->total_refunds, 'is_discounted' => $this->is_discounted]);
38 }
39 private function is_included_in_analytics(string $status) : bool
40 {
41 return \in_array($status, ['success', 'refunded']);
42 }
43 public static function register_hooks() : void
44 {
45 // Create a new order when a PMPro order is created
46 \add_action('pmpro_added_order', function ($pmpro_order) {
47 try {
48 $order = new self((int) $pmpro_order->id);
49 $order->insert();
50 } catch (\Throwable $e) {
51 \error_log('Independent Analytics was unable to track the analytics for a Paid Memberships Pro order. Please report this error to Independent Analytics. The error message is below.');
52 \error_log($e->getMessage());
53 }
54 }, 10, 1);
55 // Calculating is_discounted doesn't seem possible at the time pmpro_added_order runs. This hooks
56 // runs just after it but allows is_discounted to be correctly determined.
57 \add_action('pmpro_discount_code_used', function ($discount_code_id, $user_id, $order_id) {
58 try {
59 $order = new self((int) $order_id);
60 $order->update();
61 } catch (\Throwable $e) {
62 \error_log('Independent Analytics was unable to track the analytics for a Paid Memberships Pro order. Please report this error to Independent Analytics. The error message is below.');
63 \error_log($e->getMessage());
64 }
65 }, 10, 3);
66 // Update an existing order when a PMPro order is updated
67 \add_action('pmpro_updated_order', function ($pmpro_order) {
68 try {
69 $order = new self((int) $pmpro_order->id);
70 $order->update();
71 } catch (\Throwable $e) {
72 \error_log('Independent Analytics was unable to track the analytics for a Paid Memberships Pro order. Please report this error to Independent Analytics. The error message is below.');
73 \error_log($e->getMessage());
74 }
75 }, 10, 1);
76 }
77 }
78