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 / Journey / Events / Order.php
independent-analytics / IAWP / Journey / Events Last commit date
Click.php 5 months ago Event.php 5 months ago Order.php 5 months ago Origin.php 5 months ago Submission.php 5 months ago View.php 3 months ago
Order.php
149 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, 'utc')->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 try {
104 if ($this->platform === 'fluent_cart' && \IAWPSCOPED\iawp()->is_fluent_cart_support_enabled()) {
105 $order = \FluentCart\App\Models\Order::find($this->order_id);
106 if ($order === null) {
107 return null;
108 }
109 return $order->getViewURL('admin');
110 }
111 if ($this->platform === 'woocommerce' && \IAWPSCOPED\iawp()->is_woocommerce_support_enabled()) {
112 $order = wc_get_order($this->order_id);
113 if ($order === null) {
114 return null;
115 }
116 return $order->get_edit_order_url();
117 }
118 if ($this->platform === 'surecart' && \IAWPSCOPED\iawp()->is_surecart_support_enabled()) {
119 $admin_url = \admin_url('admin.php');
120 $args = ['page' => 'sc-orders', 'action' => 'edit', 'id' => $this->order_id];
121 $url = \add_query_arg($args, $admin_url);
122 return $url;
123 }
124 if ($this->platform === 'edd' && \IAWPSCOPED\iawp()->is_edd_support_enabled()) {
125 $admin_url = \admin_url('edit.php');
126 $args = ['page' => 'edd-payment-history', 'post_type' => 'download', 'view' => 'view-order-details', 'id' => $this->order_id];
127 $url = \add_query_arg($args, $admin_url);
128 return $url;
129 }
130 if ($this->platform === 'pmpro' && \IAWPSCOPED\iawp()->is_pmpro_support_enabled()) {
131 $admin_url = \admin_url('admin.php');
132 $args = ['page' => 'pmpro-orders', 'id' => $this->order_id];
133 $url = \add_query_arg($args, $admin_url);
134 return $url;
135 }
136 } catch (\Throwable $error) {
137 }
138 return null;
139 }
140 public static function from_session(int $session_id) : array
141 {
142 $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);
143 $records = $query->get()->all();
144 return \array_map(function ($record) {
145 return new \IAWP\Journey\Events\Order(Obj::empty_strings_to_null($record));
146 }, $records);
147 }
148 }
149