PluginProbe
Independent Analytics – WordPress Analytics Plugin / 2.11.6
Independent Analytics – WordPress Analytics Plugin v2.11.6
2.15.5 2.15.4 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 All 120 releases
independent-analytics / IAWP / Views_Over_Time_Finder.php
Views_Over_Time_Finder.php
56 lines 1.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IAWP;
4
5 use IAWP\Date_Range\Date_Range;
6 use IAWP\Interval\Interval;
7 /** @internal */
8 class Views_Over_Time_Finder
9 {
10 /**
11 * @var Date_Range
12 */
13 private $date_range;
14 private $interval;
15 /**
16 * @param Date_Range $date_range Range to fetch referrers for
17 */
18 public function __construct(Date_Range $date_range, Interval $interval)
19 {
20 $this->date_range = $date_range;
21 $this->interval = $interval;
22 }
23 public function fetch()
24 {
25 $rows = $this->interval->fetch($this->date_range);
26 return $this->rows_to_class($rows);
27 }
28 private function rows_to_class(array $rows) : object
29 {
30 $date_interval = $this->interval->get_date_interval();
31 $date_period = new \DatePeriod($this->date_range->start(), $date_interval, $this->date_range->end());
32 $interval_data = [];
33 $views_data = [];
34 foreach ($date_period as $index => $date) {
35 $current_interval = $index;
36 $current_views = 0;
37 foreach ($rows as $row) {
38 $row_interval = \intval($row->interval_ago);
39 $row_views = \intval($row->views);
40 if ($row_interval === $index) {
41 $current_interval = $row_interval;
42 $current_views = $row_views;
43 break;
44 }
45 }
46 $interval_data[] = $current_interval;
47 $views_data[] = $current_views;
48 }
49 // Reverse the data so the most recent data comes last. The end result is that the real-time
50 // chart has the most recent data on the right with older data on the left.
51 $interval_data = \array_reverse($interval_data);
52 $views_data = \array_reverse($views_data);
53 return (object) ['views' => $views_data, 'interval_labels_short' => $this->interval->get_short_labels($interval_data), 'interval_labels_full' => $this->interval->get_full_labels($interval_data)];
54 }
55 }
56