PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.3
Independent Analytics – WordPress Analytics Plugin v1.3
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 / inc / queries / views.php
independent-analytics / inc / queries Last commit date
range-query.php 4 years ago referrers.php 4 years ago resources.php 4 years ago views.php 4 years ago
views.php
132 lines
1 <?php
2
3 if (!class_exists('IAWP_Views')) {
4 class IAWP_Views extends IAWP_Range_Query
5 {
6 const REFERRERS = 'REFERRERS';
7 const RESOURCES = 'RESOURCES';
8 private $views;
9 private $prev_period_views;
10 private $daily_views;
11
12 public function __construct($type, $ids = null, $start = null, $end = null)
13 {
14 parent::__construct($start, $end);
15 if ($type == self::RESOURCES || $type == self::REFERRERS) {
16 $this->query($type, $ids);
17 } else {
18 throw new Exception('IAWP_Views: Unsupported type');
19 }
20 }
21
22 public function views()
23 {
24 return $this->views;
25 }
26
27 public function prev_period_views()
28 {
29 return $this->prev_period_views;
30 }
31
32 public function daily_views()
33 {
34 return $this->daily_views;
35 }
36
37 public function views_percentage_growth()
38 {
39 if ($this->views() == 0 || $this->prev_period_views() == 0) {
40 return 0;
41 } else {
42 return round((($this->views() / $this->prev_period_views()) - 1) * 100);
43 }
44 }
45
46 private function query($type, $ids)
47 {
48 global $wpdb;
49 $views_table = IAWP_DB::views_table();
50
51 if (is_null($ids)) {
52 $skip_in = 1;
53 $ids = [0];
54 $in = '%s';
55 } elseif (count($ids) == 0) {
56 $skip_in = 0;
57 $ids = [0];
58 $in = '%s';
59 } else {
60 $skip_in = 0;
61 $in = implode(',', array_fill(0, count($ids), '%s'));
62 }
63
64 $column = $type == self::RESOURCES ? 'resource_id' : 'referrer_id';
65 $has_null_id = false;
66 foreach ($ids as $id) {
67 if (is_null($id)) {
68 $has_null_id = true;
69 break;
70 }
71 }
72 $null_check = '';
73
74 if ($type == self::REFERRERS && $has_null_id) {
75 $null_check = "OR $column IS NULL";
76 }
77
78 $query = $wpdb->prepare(
79 "SELECT DATE(viewed_at) as date, count(*) as views FROM $views_table WHERE viewed_at BETWEEN %s AND %s AND (%d = 1 OR $column IN ($in) $null_check) GROUP BY DATE(viewed_at)",
80 $this->formatted_start(),
81 $this->formatted_end(),
82 $skip_in,
83 ...$ids
84 );
85 $rows = $wpdb->get_results($query);
86
87 $prev_period_query = $wpdb->prepare(
88 "SELECT count(*) as views FROM $views_table WHERE viewed_at BETWEEN %s AND %s AND (%d = 1 OR $column IN ($in))",
89 $this->prev_period_formatted_start(),
90 $this->prev_period_formatted_end(),
91 $skip_in,
92 ...$ids
93 );
94 $prev_period_views = intval($wpdb->get_var($prev_period_query));
95
96 $views = 0;
97 $daily_views = [];
98
99 foreach ($rows as $row) {
100 $views += $row->views;
101 $daily_views[] = [$row->date, intval($row->views)];
102 }
103
104 $this->views = $views;
105 $this->prev_period_views = $prev_period_views;
106 $this->daily_views = $this->fill_in_data_range($daily_views);
107 }
108
109 private function fill_in_data_range($partial_data)
110 {
111 $interval = new DateInterval('P1D');
112 $date_range = new DatePeriod($this->start(), $interval, $this->end());
113 $new_data = [];
114
115 foreach ($date_range as $date) {
116 $views = 0;
117
118 foreach ($partial_data as $data_point) {
119 if ($date == new DateTime($data_point[0])) {
120 $views = intval($data_point[1]);
121 break;
122 }
123 }
124
125 $new_data[] = [$date, $views];
126 }
127
128 return $new_data;
129 }
130 }
131 }
132