PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.10
Independent Analytics – WordPress Analytics Plugin v1.10
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 / rest_api.php
independent-analytics / inc Last commit date
ajax 3 years ago databases 3 years ago migrations 3 years ago models 3 years ago queries 3 years ago utils 3 years ago chart.php 3 years ago chart_geo.php 3 years ago dashboard_widget.php 3 years ago db.php 3 years ago filters.php 3 years ago freemius.php 3 years ago independent_analytics.php 3 years ago known_referrers.php 3 years ago quick_stats.php 3 years ago rest_api.php 3 years ago settings.php 3 years ago table.php 3 years ago table_geo.php 3 years ago table_referrers.php 3 years ago table_views.php 3 years ago track_resource_changes.php 3 years ago view_counter.php 3 years ago
rest_api.php
149 lines
1 <?php
2
3 namespace IAWP;
4
5 class REST_API
6 {
7 public function __construct()
8 {
9 add_action('wp_footer', [$this, 'echo_tracking_script']);
10 add_action('rest_api_init', [$this, 'register_rest_api']);
11 }
12
13 private function get_date_archive_date()
14 {
15 $str = get_query_var('year');
16
17 if (is_month() || is_day()) {
18 $month = get_query_var('monthnum');
19 $str = $str . '-' . str_pad($month, 2, '0', STR_PAD_LEFT);
20 }
21
22 if (is_day()) {
23 $day = get_query_var('day');
24 $str = $str . '-' . str_pad($day, 2, '0', STR_PAD_LEFT);
25 }
26
27 return $str;
28 }
29
30 public function echo_tracking_script()
31 {
32 if (!get_option('iawp_track_authenticated_users') && is_user_logged_in()) {
33 // Todo - Can we clear the cache plugins to make sure that the pages so tracking code as user logs in & out?
34 return;
35 }
36
37 // Don't track post or page previews
38 if (is_preview()) {
39 return;
40 }
41
42 $payload = [];
43
44 if (is_singular()) {
45 $payload['resource'] = 'singular';
46 $payload['singular_id'] = get_queried_object_id();
47 } elseif (is_author()) {
48 $payload['resource'] = 'author_archive';
49 $payload['author_id'] = get_queried_object_id();
50 } elseif (is_date()) {
51 $payload['resource'] = 'date_archive';
52 $payload['date_archive'] = $this->get_date_archive_date();
53 } elseif (is_post_type_archive()) {
54 $payload['resource'] = 'post_type_archive';
55 $payload['post_type'] = get_queried_object()->name;
56 } elseif (is_category() || is_tag() || is_tax()) {
57 $payload['resource'] = 'term_archive';
58 $payload['term_id'] = get_queried_object_id();
59 } elseif (is_search()) {
60 $payload['resource'] = 'search';
61 $payload['search_query'] = get_search_query();
62 } elseif (is_home()) {
63 $payload['resource'] = 'home';
64 } elseif (is_404()) {
65 $path = Request::path_relative_to_site_url();
66
67 if (is_null($path)) {
68 return;
69 }
70
71 $payload['resource'] = '404';
72 $payload['not_found_url'] = $path;
73 }
74
75 $payload['page'] = max(1, get_query_var('paged'));
76
77 $valid_data = !empty($payload);
78 if ($valid_data) {
79 $data = [
80 'payload' => $payload,
81 ];
82 $data['signature'] = md5(Salt::request_payload_salt() . json_encode($data['payload']));
83 $url = get_rest_url() . 'iawp/search'; ?>
84 <script>
85 (function () {
86 document.addEventListener("DOMContentLoaded", function (e) {
87 if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
88 return;
89 }
90
91 if (navigator.webdriver || /bot|crawler|spider|crawling/i.test(navigator.userAgent)) {
92 return;
93 }
94
95 let referrer_url = null;
96
97 if (typeof document.referrer === 'string' && document.referrer.length > 0 && document.referrer.indexOf(window.location.origin) === -1) {
98 referrer_url = document.referrer;
99 }
100
101 const url = "<?= $url; ?>"
102 const body = {
103 referrer_url,
104 ...<?= json_encode($data); ?>
105 }
106 const xhr = new XMLHttpRequest()
107 xhr.open("POST", url, true)
108 xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8")
109 xhr.send(JSON.stringify(body))
110 })
111 })();
112 </script>
113 <?php
114 }
115 }
116
117 public function register_rest_api()
118 {
119 register_rest_route('iawp', '/search', [
120 'methods' => 'POST',
121 'callback' => [$this, 'track_view'],
122 'permission_callback' => function () {
123 return true;
124 },
125 ]);
126 }
127
128 public function track_view($request)
129 {
130 Migration::create_or_migrate();
131
132 if (Migration::is_migrating()) {
133 return;
134 }
135
136 $visitor = new Visitor(Request::ip(), Request::user_agent());
137 $signature = md5(Salt::request_payload_salt() . json_encode($request['payload']));
138
139 if ($signature == $request['signature']) {
140 $db = new DB();
141 $db->record_view($request['payload'], $request['referrer_url'], $visitor);
142
143 return ['success' => true];
144 } else {
145 return ['success' => false];
146 }
147 }
148 }
149