PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.7
Independent Analytics – WordPress Analytics Plugin v1.7
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
models 4 years ago queries 4 years ago utils 4 years ago chart.php 4 years ago db.php 4 years ago delete_data_ajax.php 4 years ago filters.php 4 years ago filters_ajax.php 4 years ago rest_api.php 4 years ago settings.php 4 years ago settings_ajax.php 4 years ago super_secret_content_generator.php 4 years ago table.php 4 years ago table_referrers.php 4 years ago table_views.php 4 years ago track_resource_changes.php 4 years ago
rest_api.php
151 lines
1 <?php
2
3 namespace IAWP;
4
5 class REST_API
6 {
7 public function __construct()
8 {
9 // Todo - Def don't want this function running multiple times...
10 add_action('wp_footer', [$this, 'echo_tracking_script']);
11 add_action('rest_api_init', [$this, 'register_rest_api']);
12 }
13
14 private function get_date_archive_date()
15 {
16 $str = get_query_var('year');
17
18 if (is_month() || is_day()) {
19 $month = get_query_var('monthnum');
20 $str = $str . '-' . str_pad($month, 2, '0', STR_PAD_LEFT);
21 }
22
23 if (is_day()) {
24 $day = get_query_var('day');
25 $str = $str . '-' . str_pad($day, 2, '0', STR_PAD_LEFT);
26 }
27
28 return $str;
29 }
30
31 public function echo_tracking_script()
32 {
33 if (!get_option('iawp_track_authenticated_users') && is_user_logged_in()) {
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(json_encode($data['payload']) . 'mysupersecret');
83 if (empty(get_option('permalink_structure'))) {
84 $url = get_site_url() . '/?rest_route=/iawp/search';
85 } else {
86 $url = get_site_url() . '/wp-json/iawp/search';
87 } ?>
88 <script>
89 (function () {
90 document.addEventListener("DOMContentLoaded", function (e) {
91 if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
92 return;
93 }
94
95 if (navigator.webdriver || /bot|crawler|spider|crawling/i.test(navigator.userAgent)) {
96 return;
97 }
98
99 let referrer_url = null;
100
101 if (typeof document.referrer === 'string' && document.referrer.length > 0 && document.referrer.indexOf(window.location.origin) === -1) {
102 referrer_url = document.referrer;
103 }
104
105 const url = "<?= $url; ?>"
106 const body = {
107 referrer_url,
108 ...<?= json_encode($data); ?>
109 }
110 const xhr = new XMLHttpRequest()
111 xhr.open("POST", url, true)
112 xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8")
113 xhr.send(JSON.stringify(body))
114 })
115 })();
116 </script>
117 <?php
118 }
119 }
120
121 public function register_rest_api()
122 {
123 register_rest_route('iawp', '/search', [
124 'methods' => 'POST',
125 'callback' => [$this, 'track_view'],
126 'permission_callback' => function () {
127 return true;
128 },
129 ]);
130 }
131
132 public function track_view($request)
133 {
134 if (is_user_logged_in()) {
135 return;
136 }
137
138 $visitor_token = Request::token();
139
140 $signature = md5(json_encode($request['payload']) . 'mysupersecret');
141
142 if ($signature == $request['signature']) {
143 IAWP()->db->record_view($request['payload'], $request['referrer_url'], $visitor_token);
144
145 return ['success' => true];
146 } else {
147 return ['success' => false];
148 }
149 }
150 }
151