PluginProbe
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment / 1.0.0
FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment v1.0.0
3.1.13 3.1.12 3.1.11 3.1.10 3.1.9 3.1.8 3.1.7 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 All 122 releases
firebox / Inc / Core / Admin / Analytics / Toolbar / Date.php

Date.php in FireBox – WooCommerce Popup Builder, Exit Intent Popup, Email Optin & Cart Abandonment 1.0.0, at Inc/Core/Admin/Analytics/Toolbar/Date.php

391 lines 9.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package FireBox
4 * @version 1.0.0 Free
5 *
6 * @author FirePlugins <info@fireplugins.com>
7 * @link https://www.fireplugins.com
8 * @copyright Copyright © 2021 FirePlugins All Rights Reserved
9 * @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
10 */
11
12 namespace FireBox\Core\Admin\Analytics\Toolbar;
13
14 if (!defined('ABSPATH'))
15 {
16 exit; // Exit if accessed directly.
17 }
18
19 use FireBox\Core\Admin\Analytics\ToolbarItem;
20 use FireBox\Core\Admin\Analytics\ToolbarItemInterface;
21
22 class Date extends ToolbarItem implements ToolbarItemInterface
23 {
24 /**
25 * Toolbar Item Type
26 *
27 * @var string
28 */
29 protected $type = 'date';
30
31 /**
32 * Toolbar Popup Title
33 *
34 * @var string
35 */
36 protected $popup_title = 'FPF_DATE_RANGE';
37
38 /**
39 * Toolbar Popup Title Plural
40 *
41 * @var string
42 */
43 protected $popup_title_plural = 'FPF_DATES';
44
45 /**
46 * Total days we are showing
47 *
48 * @var int
49 */
50 protected $total_days;
51
52 /**
53 * Start date for the date range
54 *
55 * @var string
56 */
57 protected $start_date;
58
59 /**
60 * Whether we are fetching data for a single day.
61 *
62 * @var boolean
63 */
64 protected $single_day;
65
66 /**
67 * Holds the query data needed to return box log data for this type
68 *
69 * @param array $current_query_data
70 * @param array $payload
71 *
72 * @return array
73 */
74 public function getQueryData($metric, $current_query_data, $payload)
75 {
76 parent::getQueryData($metric, $current_query_data, $payload);
77
78 $this->single_day = false;
79
80 $data = [
81 'select' => ['count(bl.id) as total', 'DATE_FORMAT(bl.date, "%d/%m/%Y") as label'],
82 'from_table_name_as' => ' as bl',
83 'where' => $this->getWhere($payload),
84 'groupby' => 'date(bl.date)',
85 'orderby' => 'bl.date ASC'
86 ];
87
88 $data = $this->filterTodayData($payload, $data);
89
90 // if we received a metric, then run its own query data filtering
91 if ($metric)
92 {
93 $data = apply_filters('firebox/analytics/metric/' . $metric->getType() . '/filter_date_query_data', $data);
94 }
95
96 return $data;
97 }
98
99 /**
100 * Filter the query for `Today` data if we are searching for data today.
101 *
102 * @param array $payload
103 * @param array $data
104 *
105 * @return array
106 */
107 private function filterTodayData($payload, $data)
108 {
109 if (!isset($payload['options_key']) && !isset($payload['method']) && !is_array($data))
110 {
111 return [];
112 }
113
114 if ($payload['options_key'] != 'today')
115 {
116 return $data;
117 }
118
119 $date_selection = 'CONCAT(DATE_FORMAT(bl.date, \'%H\'), \':00\')';
120
121 $data['select'] = [
122 $date_selection . ' as label',
123 'count(bl.id) as total'
124 ];
125 $data['groupby'] = $date_selection;
126
127 return $data;
128 }
129
130
131
132 /**
133 * Returns the WHERE for "filter"
134 *
135 * @param array $payload
136 *
137 * @return array
138 */
139 protected function getFilterWhere($payload)
140 {
141 if (!$payload || !is_array($payload))
142 {
143 return [];
144 }
145
146 if (!isset($payload['options_key']) || !isset($payload['value']) || !is_string($payload['options_key']))
147 {
148 return [];
149 }
150
151 $where = [];
152
153 $currDate = $this->calculateSQLCurrentDate();
154
155 $current_day = date('d');
156 $year = date('Y');
157
158 switch ($payload['options_key'])
159 {
160
161
162 case 'this_month':
163 default:
164 $where = [
165 'MONTH(bl.date)' => ' = MONTH(CURRENT_DATE())',
166 'YEAR(bl.date)' => ' = YEAR(CURRENT_DATE())'
167 ];
168
169 $month = date('m');
170 $this->total_days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
171 $this->start_date = '01/' . $month . '/' . $year;
172 break;
173
174
175 }
176
177 return $where;
178 }
179
180 /**
181 * Returns the WHERE for "compare"
182 *
183 * @param array $payload
184 *
185 * @return array
186 */
187 protected function getCompareWhere($payload)
188 {
189 $where = [];
190
191 $current_day = date('d');
192 $year = date('Y');
193
194 switch ($payload['options_key'])
195 {
196
197
198 // Compare This Month
199 case 'compare_this_month':
200 case 'compare_this_month_yoy':
201 default:
202 $where = [
203 'MONTH(bl.date)' => ' = MONTH(CURRENT_DATE())',
204 'YEAR(bl.date)' => ' = YEAR(CURRENT_DATE())'
205 ];
206
207 $month = date('m');
208 $this->total_days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
209 $this->start_date = '01/' . $month . '/' . $year;
210 break;
211
212 case 'compare_this_month_prev_period':
213 $currDate = $this->getSQLCurrentDateOrWithMinusInterval1Month();
214 $where = [
215 'MONTH(bl.date)' => ' = MONTH(' . $currDate . ')',
216 'YEAR(bl.date)' => ' = YEAR(' . $currDate . ')'
217 ];
218
219 $month = date('m', strtotime('-1 month'));
220 $this->total_days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
221 $this->start_date = '01/' . $month . '/' . $year;
222 break;
223
224
225 }
226
227 return $where;
228 }
229
230 /**
231 * Sets the Custom WHERE for filter/compare
232 *
233 * @param string $start_date
234 * @param string $end_date
235 * @param string $where
236 *
237 * @return void
238 */
239 private function setCustomWhere($start_date, $end_date, &$where)
240 {
241 $where['DATE(bl.date)'] = " BETWEEN '{$start_date}' AND '{$end_date}'";
242
243 // find diference between the 2 dates
244 $start = new \DateTime($start_date);
245 $end = new \DateTime($end_date);
246 $this->total_days = $end->diff($start)->days;
247 $this->start_date = $start->format('d/m/Y');
248 }
249
250 /**
251 * Sets ORDER BY for this type
252 *
253 * @param array $data
254 * @param array $payload
255 *
256 * @return void
257 */
258 private function setupOrderBy(&$data, $payload)
259 {
260 if ($payload['options_key'] == 'last_7_days')
261 {
262 $data['orderby'] = 'bl.date ASC';
263 }
264 }
265
266
267
268 /**
269 * Returns the date toolbar object that retrieve previous period data
270 *
271 * @param array $date_toolbar_item
272 *
273 * @return array
274 */
275 public function getPreviousPeriodDateObject($date_toolbar_item)
276 {
277 if (!$date_toolbar_item)
278 {
279 return;
280 }
281
282 $current_period = $date_toolbar_item['options_key'];
283
284 $previous_period = $current_period;
285 $value = '';
286 $method = 'compare';
287
288 switch ($current_period)
289 {
290 case 'today':
291 case 'yesterday':
292 $previous_period = 'yesterday';
293 $method = 'filter';
294 break;
295
296 case 'last_7_days':
297 case 'compare_last_7_days':
298 $previous_period = 'compare_last_7_days_prev_period';
299 break;
300
301 case 'compare_last_7_days_yoy':
302 $previous_period = 'compare_last_7_days_yoy_prev_period';
303 break;
304
305 case 'this_month':
306 case 'compare_this_month':
307 $previous_period = 'compare_this_month_prev_period';
308 break;
309
310 case 'compare_this_month_yoy':
311 $previous_period = 'compare_this_month_yoy_prev_period';
312 break;
313
314 case 'last_3_months':
315 $previous_period = 'compare_last_3_months';
316 break;
317 case 'compare_last_3_months':
318 $previous_period = 'compare_last_3_months_prev_period';
319 break;
320
321 case 'compare_last_3_months_yoy':
322 $previous_period = 'compare_last_3_months_yoy_prev_period';
323 break;
324
325 case 'last_6_months':
326 $previous_period = 'compare_last_6_months';
327 break;
328 case 'compare_last_6_months':
329 $previous_period = 'compare_last_6_months_prev_period';
330 break;
331
332 case 'last_12_months':
333 $previous_period = 'compare_last_12_months';
334 break;
335 case 'compare_last_12_months':
336 $previous_period = 'compare_last_12_months_prev_period';
337 break;
338
339 case 'last_16_months':
340 $previous_period = 'compare_last_16_months';
341 break;
342 case 'compare_last_16_months':
343 $previous_period = 'compare_last_16_months_prev_period';
344 break;
345
346 case 'custom':
347 $method = isset($date_toolbar_item['method']) ? $date_toolbar_item['method'] : 'filter';
348 $previous_period = 'custom_prev_period';
349 break;
350 }
351
352 $date_toolbar_item['options_key'] = $previous_period;
353 $date_toolbar_item['method'] = $method;
354
355 return $date_toolbar_item;
356 }
357
358 /**
359 * Retrieves the toolbar item value in filter mode
360 *
361 * @param int $value
362 *
363 * @return array
364 */
365 public function getFilterToolbarItemWithValue($value)
366 {
367 return [
368 'method' => 'filter',
369 'options_key' => $value,
370 ];
371 }
372
373
374
375 public function getOptionsKey()
376 {
377 return $this->selectedToolbarItems['date']['options_key'];
378 }
379
380 public function getTotalDays()
381 {
382 return $this->total_days;
383 }
384
385 public function getStartDate()
386 {
387 return $this->start_date;
388 }
389
390
391 }