Campaigns.php
3 years ago
City_Statistics.php
3 years ago
Country_Statistics.php
3 years ago
Current_Traffic_Finder.php
3 years ago
Interval.php
3 years ago
Minute_Interval.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
Ten_Second_Interval.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
69 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Queries; |
| 4 | |
| 5 | use IAWP\Query; |
| 6 | |
| 7 | class Visitors_Over_Time_Finder extends Range_Query |
| 8 | { |
| 9 | private $interval; |
| 10 | |
| 11 | public function __construct($options) |
| 12 | { |
| 13 | parent::__construct($options); |
| 14 | $options = iawp_default_args($options, [ |
| 15 | 'interval' => null, |
| 16 | ]); |
| 17 | $this->interval = $options['interval']; |
| 18 | } |
| 19 | |
| 20 | public function fetch() |
| 21 | { |
| 22 | $rows = Query::query($this->interval->get_query_name(), [ |
| 23 | 'start' => $this->formatted_start(), |
| 24 | 'end' => $this->formatted_end(), |
| 25 | ])->rows(); |
| 26 | |
| 27 | return $this->rows_to_class($rows); |
| 28 | } |
| 29 | |
| 30 | private function rows_to_class(array $rows): object |
| 31 | { |
| 32 | $date_interval = $this->interval->get_date_interval(); |
| 33 | $date_period = new \DatePeriod($this->start(), $date_interval, $this->end()); |
| 34 | $interval_data = []; |
| 35 | $visitors_data = []; |
| 36 | $views_data = []; |
| 37 | |
| 38 | foreach ($date_period as $index => $date) { |
| 39 | $current_interval = $index; |
| 40 | $current_visitors = 0; |
| 41 | $current_views = 0; |
| 42 | |
| 43 | foreach ($rows as $row) { |
| 44 | $row_interval = intval($row->interval_ago); |
| 45 | $row_visitors = intval($row->visitors); |
| 46 | $row_views = intval($row->views); |
| 47 | |
| 48 | if ($row_interval === $index) { |
| 49 | $current_interval = $row_interval; |
| 50 | $current_visitors = $row_visitors; |
| 51 | $current_views = $row_views; |
| 52 | break; |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | $interval_data[] = $current_interval; |
| 57 | $visitors_data[] = $current_visitors; |
| 58 | $views_data[] = $current_views; |
| 59 | } |
| 60 | |
| 61 | return (object) [ |
| 62 | 'visitors' => $visitors_data, |
| 63 | 'views' => $views_data, |
| 64 | 'interval_labels_short' => $this->interval->get_short_labels($interval_data), |
| 65 | 'interval_labels_full' => $this->interval->get_full_labels($interval_data), |
| 66 | ]; |
| 67 | } |
| 68 | } |
| 69 |