PluginProbe
Statify / 1.4.1
Statify v1.4.1
2.0.2 2.0.1 trunk 0.7 0.8 0.9 1.0 1.2.8 1.3.0 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 All 32 releases
statify / inc / statify_frontend.class.php

statify_frontend.class.php in Statify 1.4.1, at inc/statify_frontend.class.php

190 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3
4 /* Quit */
5 defined('ABSPATH') OR exit;
6
7
8 /**
9 * Statify_Frontend
10 *
11 * @since 1.4.0
12 */
13
14 class Statify_Frontend extends Statify
15 {
16
17
18 /**
19 * Track the page view
20 *
21 * @since 0.1.0
22 * @change 1.4.1
23 */
24
25 public static function track_visit()
26 {
27 /* Init vars */
28 $use_snippet = self::$_options['snippet'];
29 $is_snippet = $use_snippet && get_query_var('statify_target');
30
31 /* Skip tracking */
32 if ( self::_skip_tracking() ) {
33 return self::_jump_out($is_snippet);
34 }
35
36 /* Set target & referrer */
37 if ( $is_snippet ) {
38 $target = urldecode( get_query_var('statify_target') );
39 $referrer = urldecode( get_query_var('statify_referrer') );
40 } else if ( ! $use_snippet) {
41 $target = ( filter_has_var(INPUT_SERVER, 'REQUEST_URI') ? wp_unslash($_SERVER['REQUEST_URI']) : '/' );
42 $referrer = ( filter_has_var(INPUT_SERVER, 'HTTP_REFERER') ? wp_unslash($_SERVER['HTTP_REFERER']) : '' );
43 } else {
44 return;
45 }
46
47 /* Invalid target? */
48 if ( empty($target) OR ! wp_validate_redirect($target, false) ) {
49 return self::_jump_out($is_snippet);
50 }
51
52 /* Global vars */
53 global $wpdb, $wp_rewrite;
54
55 /* Init rows */
56 $data = array(
57 'created' => '',
58 'referrer' => '',
59 'target' => ''
60 );
61
62 /* Set request timestamp */
63 $data['created'] = strftime(
64 '%Y-%m-%d',
65 current_time('timestamp')
66 );
67
68 /* Sanitize referrer url */
69 if ( ! empty($referrer) && strpos( $referrer, home_url() ) === false ) {
70 $data['referrer'] = esc_url_raw( $referrer, array('http', 'https') );
71 }
72
73 /* Relative target url */
74 $data['target'] = home_url($target, 'relative');
75
76 /* Trim target url */
77 if ( $wp_rewrite->permalink_structure ) {
78 $data['target'] = parse_url($data['target'], PHP_URL_PATH);
79 }
80
81 /* Sanitize target url */
82 $data['target'] = esc_url_raw($data['target']);
83
84 /* Insert */
85 $wpdb->insert(
86 $wpdb->statify,
87 $data
88 );
89
90 /* Jump! */
91 return self::_jump_out($is_snippet);
92 }
93
94
95 /**
96 * Rules to skip the tracking
97 *
98 * @since 1.2.6
99 * @change 1.4.1
100 *
101 * @hook boolean statify_skip_tracking (https://gist.github.com/sergejmueller/7612368)
102 *
103 * @return boolean $skip_hook TRUE if NO tracking is desired
104 */
105
106 private static function _skip_tracking() {
107 /* Skip tracking via Hook */
108 if ( ( $skip_hook = apply_filters('statify_skip_tracking', NULL) ) !== NULL ) {
109 return $skip_hook;
110 }
111
112 /* Skip tracking via User Agent */
113 if ( ! filter_has_var(INPUT_SERVER, 'HTTP_USER_AGENT') OR ! preg_match('/(?:Windows|Macintosh|Linux|iPhone|iPad)/', $_SERVER['HTTP_USER_AGENT']) ) {
114 return true;
115 }
116
117 /* Skip tracking via Conditional_Tags */
118 return ( is_feed() OR is_trackback() OR is_robots() OR is_preview() OR is_user_logged_in() OR is_404() OR is_search() );
119 }
120
121
122 /**
123 * Send JavaScript headers or return false
124 *
125 * @since 1.1.0
126 * @change 1.3.1
127 *
128 * @param boolean $is_snippet Snippet type
129 * @return mixed Exit or return depending on snippet type
130 */
131
132 private static function _jump_out($is_snippet) {
133 if ( $is_snippet ) {
134 nocache_headers();
135 header('Content-type: text/javascript', true, 204);
136 exit;
137 }
138
139 return false;
140 }
141
142
143 /**
144 * Declare GET variables for further use
145 *
146 * @since 1.1.0
147 * @change 1.3.1
148 *
149 * @param array $vars Input with existing variables
150 * @return array $vars Output with plugin variables
151 */
152
153 public static function query_vars($vars) {
154 $vars[] = 'statify_referrer';
155 $vars[] = 'statify_target';
156
157 return $vars;
158 }
159
160
161 /**
162 * Print JavaScript snippet
163 *
164 * @since 1.1.0
165 * @change 1.4.1
166 */
167
168 public static function wp_footer()
169 {
170 /* Skip by option */
171 if ( ! self::$_options['snippet'] ) {
172 return;
173 }
174
175 /* Skip by rules */
176 if ( self::_skip_tracking() ) {
177 return;
178 }
179
180 /* Load template */
181 load_template(
182 wp_normalize_path(
183 sprintf(
184 '%s/views/js_snippet.view.php',
185 STATIFY_DIR
186 )
187 )
188 );
189 }
190 }