PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.1
Independent Analytics – WordPress Analytics Plugin v2.14.1
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 / Journey / Events / Order.php
independent-analytics / IAWP / Journey / Events Last commit date
Click.php 7 months ago Event.php 7 months ago Order.php 7 months ago Origin.php 7 months ago Submission.php 7 months ago View.php 7 months ago
Order.php
146 lines
1 <?php
2
3 namespace IAWP\Journey\Events;
4
5 use IAWPSCOPED\Carbon\CarbonImmutable;
6 use IAWP\Illuminate_Builder;
7 use IAWP\Tables;
8 use IAWP\Utils\Currency;
9 use IAWP\Utils\Obj;
10 use IAWP\Utils\Timezone;
11 /** @internal */
12 class Order extends \IAWP\Journey\Events\Event
13 {
14 private int $session_id;
15 private string $created_at;
16 private int $total;
17 private int $total_refunded;
18 private ?string $platform;
19 private string $status;
20 private string $order_id;
21 private ?string $admin_url;
22 public function __construct(object $record)
23 {
24 $this->session_id = $record->session_id;
25 $this->created_at = $record->created_at;
26 $this->total = $record->total;
27 $this->total_refunded = $record->total_refunded;
28 // The order of these method calls is important!
29 $this->platform = $this->calculate_platform($record);
30 $this->status = $this->calculate_status($record);
31 $this->order_id = $this->calculate_order_id($record);
32 $this->admin_url = $this->calculate_admin_url();
33 }
34 public function type() : string
35 {
36 return 'order';
37 }
38 public function label() : string
39 {
40 return \__('Order', 'independent-analytics');
41 }
42 public function created_at() : ?CarbonImmutable
43 {
44 return CarbonImmutable::parse($this->created_at)->timezone(Timezone::site_timezone());
45 }
46 public function html() : string
47 {
48 return \IAWPSCOPED\iawp_render('journeys.timeline.order', ['event' => $this]);
49 }
50 public function total() : string
51 {
52 return Currency::format($this->total, \false);
53 }
54 public function total_refunded() : ?string
55 {
56 $total_refunded = $this->total_refunded;
57 if ($total_refunded === 0) {
58 return null;
59 }
60 return Currency::format($total_refunded, \false);
61 }
62 public function status() : string
63 {
64 return $this->status;
65 }
66 public function order_id() : string
67 {
68 return $this->order_id;
69 }
70 public function admin_url() : ?string
71 {
72 return $this->admin_url;
73 }
74 private function calculate_platform(object $record) : ?string
75 {
76 $platforms = ['woocommerce', 'surecart', 'edd', 'pmpro', 'fluent_cart'];
77 foreach ($platforms as $platform) {
78 $key = $platform . '_order_status';
79 if (\is_string($record->{$key} ?? null)) {
80 return $platform;
81 }
82 }
83 return null;
84 }
85 private function calculate_status(object $record) : string
86 {
87 if ($this->platform === null) {
88 return '';
89 }
90 $key = $this->platform . '_order_status';
91 return $record->{$key};
92 }
93 private function calculate_order_id(object $record) : string
94 {
95 if ($this->platform === null) {
96 return 0;
97 }
98 $key = $this->platform . '_order_id';
99 return $record->{$key};
100 }
101 private function calculate_admin_url() : ?string
102 {
103 if ($this->platform === 'fluent_cart' && \IAWPSCOPED\iawp()->is_fluent_cart_support_enabled()) {
104 $order = \FluentCart\App\Models\Order::find($this->order_id);
105 if ($order === null) {
106 return null;
107 }
108 return $order->getViewURL('admin');
109 }
110 if ($this->platform === 'woocommerce' && \IAWPSCOPED\iawp()->is_woocommerce_support_enabled()) {
111 $order = wc_get_order($this->order_id);
112 if ($order === null) {
113 return null;
114 }
115 return $order->get_edit_order_url();
116 }
117 if ($this->platform === 'surecart' && \IAWPSCOPED\iawp()->is_surecart_support_enabled()) {
118 $admin_url = \admin_url('admin.php');
119 $args = ['page' => 'sc-orders', 'action' => 'edit', 'id' => $this->order_id];
120 $url = \add_query_arg($args, $admin_url);
121 return $url;
122 }
123 if ($this->platform === 'edd' && \IAWPSCOPED\iawp()->is_edd_support_enabled()) {
124 $admin_url = \admin_url('edit.php');
125 $args = ['page' => 'edd-payment-history', 'post_type' => 'download', 'view' => 'view-order-details', 'id' => $this->order_id];
126 $url = \add_query_arg($args, $admin_url);
127 return $url;
128 }
129 if ($this->platform === 'pmpro' && \IAWPSCOPED\iawp()->is_pmpro_support_enabled()) {
130 $admin_url = \admin_url('admin.php');
131 $args = ['page' => 'pmpro-orders', 'id' => $this->order_id];
132 $url = \add_query_arg($args, $admin_url);
133 return $url;
134 }
135 return null;
136 }
137 public static function from_session(int $session_id) : array
138 {
139 $query = Illuminate_Builder::new()->select(['sessions.session_id', 'orders.*'])->from(Tables::sessions(), 'sessions')->join(Tables::views() . ' AS views', 'sessions.session_id', '=', 'views.session_id')->join(Tables::orders() . ' AS orders', 'views.id', '=', 'orders.view_id')->where('sessions.session_id', '=', $session_id);
140 $records = $query->get()->all();
141 return \array_map(function ($record) {
142 return new \IAWP\Journey\Events\Order(Obj::empty_strings_to_null($record));
143 }, $records);
144 }
145 }
146