PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.18
Independent Analytics – WordPress Analytics Plugin v1.18
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 / queries / visitors_over_time_finder.php
independent-analytics / IAWP / queries Last commit date
campaigns.php 3 years ago city_statistics.php 3 years ago country_statistics.php 3 years ago current_traffic_finder.php 3 years ago range_query.php 3 years ago referrers.php 3 years ago reset_database.php 3 years ago resources.php 3 years ago view.php 3 years ago views.php 3 years ago visitors_over_time_finder.php 3 years ago
visitors_over_time_finder.php
174 lines
1 <?php
2
3 namespace IAWP;
4
5 abstract class Interval
6 {
7 abstract public function get_query_name(): string;
8
9 abstract public function get_date_interval(): \DateInterval;
10
11 abstract public function short_label(): string;
12
13 abstract public function long_label_singular(): string;
14
15 abstract public function long_label_plural(): string;
16
17 abstract public function interval_multiplier(): int;
18
19 public function get_short_labels(array $intervals): array
20 {
21 return array_map(function ($interval) {
22 $interval = $interval * $this->interval_multiplier();
23
24 if ($interval === 0) {
25 return esc_html__('now', 'iawp');
26 } else {
27 return '-' . $interval . ' ' . $this->short_label();
28 }
29 }, $intervals);
30 }
31
32 public function get_full_labels($intervals): array
33 {
34 return array_map(function ($interval) {
35 $interval = $interval * $this->interval_multiplier();
36
37 if ($interval === 1) {
38 return $interval . ' ' . $this->long_label_singular();
39 } else {
40 return $interval . ' ' . $this->long_label_plural();
41 }
42 }, $intervals);
43 }
44 }
45
46 class Minute_Interval extends Interval
47 {
48 public function get_query_name(): string
49 {
50 return 'get_visitors_by_minute_interval';
51 }
52
53 public function get_date_interval(): \DateInterval
54 {
55 return new \DateInterval('PT1M');
56 }
57
58 public function short_label(): string
59 {
60 return __('min');
61 }
62
63 public function long_label_singular(): string
64 {
65 return __('minute ago');
66 }
67
68 public function long_label_plural(): string
69 {
70 return __('minutes ago');
71 }
72
73 public function interval_multiplier(): int
74 {
75 return 1;
76 }
77 }
78
79 class Ten_Second_Interval extends Interval
80 {
81 public function get_query_name(): string
82 {
83 return 'get_visitors_by_ten_second_interval';
84 }
85
86 public function get_date_interval(): \DateInterval
87 {
88 return new \DateInterval('PT10S');
89 }
90
91 public function short_label(): string
92 {
93 return __('sec');
94 }
95
96 public function long_label_singular(): string
97 {
98 return __('second ago');
99 }
100
101 public function long_label_plural(): string
102 {
103 return __('seconds ago');
104 }
105
106 public function interval_multiplier(): int
107 {
108 return 10;
109 }
110 }
111
112 class Visitors_Over_Time_Finder extends Range_Query
113 {
114 private $interval;
115
116 public function __construct($options)
117 {
118 parent::__construct($options);
119 $options = default_args($options, [
120 'interval' => null,
121 ]);
122 $this->interval = $options['interval'];
123 }
124
125 public function fetch()
126 {
127 $rows = Query::query($this->interval->get_query_name(), [
128 'start' => $this->formatted_start(),
129 'end' => $this->formatted_end(),
130 ])->rows();
131
132 return $this->rows_to_class($rows);
133 }
134
135 private function rows_to_class(array $rows): object
136 {
137 $date_interval = $this->interval->get_date_interval();
138 $date_period = new \DatePeriod($this->start(), $date_interval, $this->end());
139 $interval_data = [];
140 $visitors_data = [];
141 $views_data = [];
142
143 foreach ($date_period as $index => $date) {
144 $current_interval = $index;
145 $current_visitors = 0;
146 $current_views = 0;
147
148 foreach ($rows as $row) {
149 $row_interval = intval($row->interval_ago);
150 $row_visitors = intval($row->visitors);
151 $row_views = intval($row->views);
152
153 if ($row_interval === $index) {
154 $current_interval = $row_interval;
155 $current_visitors = $row_visitors;
156 $current_views = $row_views;
157 break;
158 }
159 }
160
161 $interval_data[] = $current_interval;
162 $visitors_data[] = $current_visitors;
163 $views_data[] = $current_views;
164 }
165
166 return (object) [
167 'visitors' => $visitors_data,
168 'views' => $views_data,
169 'interval_labels_short' => $this->interval->get_short_labels($interval_data),
170 'interval_labels_full' => $this->interval->get_full_labels($interval_data),
171 ];
172 }
173 }
174