PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.17
Independent Analytics – WordPress Analytics Plugin v1.17
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 / utils / relative_range.php
independent-analytics / IAWP / utils Last commit date
array_to_csv.php 3 years ago date_format.php 3 years ago exact_range.php 3 years ago number_formatter.php 3 years ago relative_range.php 3 years ago request.php 3 years ago salt.php 3 years ago security.php 3 years ago singleton.php 3 years ago string.php 3 years ago timezone.php 3 years ago url.php 3 years ago wp-async-request.php 3 years ago
relative_range.php
165 lines
1 <?php
2
3 namespace IAWP;
4
5 class Relative_Range
6 {
7 public $id;
8 public $label;
9 public $start;
10 public $end;
11
12 private function __construct($id)
13 {
14 $this->id = $id;
15 list($start, $end, $label) = $this->$id();
16 $this->label = $label;
17 $this->start = $start;
18 $this->end = $end;
19 }
20
21 private function today(): array
22 {
23 $tz = Timezone::local_timezone();
24 $today = new \DateTime('now', $tz);
25
26 return [$today, $today, __('Today', 'iawp')];
27 }
28
29 private function yesterday(): array
30 {
31 $tz = Timezone::local_timezone();
32 $yesterday = new \DateTime('-1 day', $tz);
33
34 return [$yesterday, $yesterday, __('Yesterday', 'iawp')];
35 }
36
37 private function last_seven(): array
38 {
39 $tz = Timezone::local_timezone();
40 $today = new \DateTime('now', $tz);
41 $seven_days_ago = new \DateTime('-6 days', $tz);
42
43 return [$seven_days_ago, $today, __('Last 7 Days', 'iawp')];
44 }
45
46 private function last_thirty(): array
47 {
48 $tz = Timezone::local_timezone();
49 $today = new \DateTime('now', $tz);
50 $thirty_days_ago = new \DateTime('-29 days', $tz);
51
52 return [$thirty_days_ago, $today, __('Last 30 Days', 'iawp')];
53 }
54
55 private function this_week(): array
56 {
57 $tz = Timezone::local_timezone();
58 $today = new \DateTime('now', $tz);
59 $firstDayOfWeek = intval(get_option('iawp_dow'));
60 $currentDayOfWeek = intval($today->format('w'));
61 $startOfWeekDaysAgo = $currentDayOfWeek - $firstDayOfWeek;
62
63 if ($startOfWeekDaysAgo < 0) {
64 $startOfWeekDaysAgo += 7;
65 }
66
67 $startOfWeek = new \DateTime("-$startOfWeekDaysAgo days", $tz);
68 $endOfWeek = (clone $startOfWeek)->modify('+6 days');
69
70 return [$startOfWeek, $endOfWeek, __('This Week', 'iawp')];
71 }
72
73 private function last_week(): array
74 {
75 list($start, $end) = $this->this_week();
76 $startOfWeek = $start->modify('-7 days');
77 $endOfWeek = $end->modify('-7 days');
78
79 return [$startOfWeek, $endOfWeek, __('Last Week', 'iawp')];
80 }
81
82 private function this_month(): array
83 {
84 $tz = Timezone::local_timezone();
85 $today = new \DateTime('now', $tz);
86 $day_of_month = intval($today->format('d')) - 1;
87 $days_in_month = intval($today->format('t')) - 1;
88 $start_of_month = (clone $today)->modify("-$day_of_month days");
89 $end_of_month = (clone $start_of_month)->modify("+$days_in_month days");
90
91 return [$start_of_month, $end_of_month, __('This Month', 'iawp')];
92 }
93
94 private function last_month(): array
95 {
96 list($start, $end) = $this->this_month();
97 $start_of_last_month = (clone $start)->modify('-1 month');
98 $days_in_last_month = intval($start_of_last_month->format('t')) - 1;
99 $end_of_last_month = (clone $start_of_last_month)->modify("+$days_in_last_month days");
100
101 return [$start_of_last_month, $end_of_last_month, __('Last Month', 'iawp')];
102 }
103
104 private function this_year(): array
105 {
106 $tz = Timezone::local_timezone();
107 $today = new \DateTime('now', $tz);
108 $year = intval($today->format('Y'));
109 $start_of_year = (clone $today)->setDate($year, 1, 1);
110 $end_of_year = (clone $today)->setDate($year, 12, 31);
111
112 return [$start_of_year, $end_of_year, __('This Year', 'iawp')];
113 }
114
115 private function last_year(): array
116 {
117 $tz = Timezone::local_timezone();
118 $today = new \DateTime('now', $tz);
119 $last_year = intval($today->format('Y')) - 1;
120 $start_of_last_year = (clone $today)->setDate($last_year, 1, 1);
121 $end_of_last_year = (clone $today)->setDate($last_year, 12, 31);
122
123 return [$start_of_last_year, $end_of_last_year, __('Last Year', 'iawp')];
124 }
125
126 /**
127 * Get a list of supported ranges including their id, text, start, and end date
128 *
129 * @return Relative_Range[] Supported ranges
130 */
131 public static function ranges(): array
132 {
133 return [
134 new self('TODAY'),
135 new self('YESTERDAY'),
136 new self('LAST_SEVEN'),
137 new self('LAST_THIRTY'),
138 new self('THIS_WEEK'),
139 new self('LAST_WEEK'),
140 new self('THIS_MONTH'),
141 new self('LAST_MONTH'),
142 new self('THIS_YEAR'),
143 new self('LAST_YEAR'),
144 ];
145 }
146
147 /**
148 * @param string $id
149 * @return Relative_Range
150 */
151 public static function range(string $id)
152 {
153 $ranges = self::ranges();
154 $matching_ranges = array_values(array_filter($ranges, function ($range) use ($id) {
155 return $range->id === $id;
156 }));
157
158 if (count($matching_ranges) > 0) {
159 return $matching_ranges[0];
160 } else {
161 return null;
162 }
163 }
164 }
165