hide_errors(); //PAULCOOK: Don't track stats for users which have been set to be ignored, on the options page global $user_login, $table_stattraq_options; get_currentuserinfo(); //load the user login in $user_login if (strlen($user_login) > 0) { //get the list of ignored users $sqlQuery = "SELECT option_value FROM $table_stattraq_options WHERE option_name = 'options_ignore_users'"; $output = $wpdb->get_row($sqlQuery); if (strlen($output->option_value) > 0) { $users = preg_split('/(\W+)/', $output->option_value, -1, PREG_SPLIT_NO_EMPTY); //do case-insensitive comparison foreach (array_keys($users) as $key) { $users[$key] = strtolower($users[$key]); } if (in_array(strtolower($output->option_value), $users)) { $wpdb->show_errors(); return $passed_param; } } } $s_id = session_id(); // need to get the real article_id or type of server request (RSS, RDF, ATOM, Ping, etc) if(!isset($article_id)) { if (($p != '')){ $p = intval($p); $article_id = $p; } else if(isset($doing_rss) && $doing_rss == 1) { $article_id = "Feed"; /* } elseif (isset($wp_query) == true) { $article_id = $wp_query->get_queried_object_id(); } else { */ } elseif (isset($wp_query) == true) { if($wp_query->is_page == true || $wp_query->is_single == true ) $article_id = $wp_query->get_queried_object_id(); else $article_id = 0; } else { $article_id = 0; // default/mixed page - not just for one article } } if(!isset($s_id)){ $s_id = session_id(); } $ipAddress = statTraqGetIPAddress(); $urlRequested = $_SERVER['PHP_SELF'] . (isset($_SERVER['QUERY_STRING']) ? "?".$_SERVER['QUERY_STRING'] : '' ); $browser = statTraqGetBrowser(); $referrer = (isset($_SERVER['HTTP_REFERER']) ? "'" . $_SERVER['HTTP_REFERER'] . "'" :"NULL"); $userAgent = (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "NULL"); $search_phrase = statTraqGetSearchPhrase($referrer); if (!strstr($urlRequested, 'wp-admin') && !strstr($urlRequested, 'wp-stattraq') && !strstr($urlRequested, 'favicon.ico')) { $wpdb->query("INSERT INTO $tablestattraq (session_id, access_time, ip_address, url, article_id, referrer, user_agent, browser, user_agent_type, search_phrase) values ('".$s_id."', NOW(), '$ipAddress','$urlRequested', '$article_id', $referrer,'$userAgent','$browser', $browser_type, " . ($search_phrase==null?"NULL" : "'$search_phrase'") . ")"); } $wpdb->show_errors(); return $passed_param; } function statTraqGetBrowser() { global $s_id, $browser_type; $ua = $_SERVER['HTTP_USER_AGENT']; if(strpos($ua, 'Opera') !== false){ if(strpos($ua, 'Opera 3') !== false) $ver = 3; else if(strpos($ua, 'Opera 4') !== false) $ver = 4; else if(strpos($ua, 'Opera 5') !== false) $ver = 5; else if(strpos($ua, 'Opera 6') !== false) $ver = 6; else if(strpos($ua, 'Opera 7') !== false) $ver = 7; else if(strpos($ua, 'Opera 8') !== false) $ver = 8; else $ver = ''; return 'Opera ' . $ver; // FeedSeeker spoofs MSIE 5 }else if(strpos($ua, 'YahooFeedSeeker') !== false){ $browser_type = ST_FEED; $s_id = "YahooFeedSeeker"; return 'Yahoo Feed Seeker'; }else if(strpos($ua, 'MSIE') !== false){ if(strpos($ua, 'MSIE 6')!==false || strpos($ua, 'MSIE6')!==false) $ver = 6; else if(strpos($ua, 'MSIE 5.5') !== false) $ver = 5.5; else if(strpos($ua, 'MSIE 5') !== false) $ver = 5; else if(strpos($ua, "MSIE 4") !== false) $ver = 4; else if(strpos($ua, 'MSIE 3') !== false) $ver = 3; else if($strpos($ua, 'MSIE 2') !== false) $ver = 2; else $ver = ''; return 'Internet Explorer ' . $ver; }else if(strpos($ua, 'Phoenix')!== false){ return 'Mozilla Phoenix'; }else if(strpos($ua, 'Firebird') !== false){ if(strpos($ua, 'Firebird/0.6')!== false) $ver = 0.6; else if(strpos($ua, 'Firebird/0.7')!== false) $ver = 0.7; else $ver = ''; return 'Mozilla Firebird ' . $ver; }else if(strpos($ua, 'Firefox') !== false){ if(strpos($ua, '0.9') !== false) $ver = 0.9; else if(strpos($ua, '0.8') !== false) $ver = 0.8; else if(strpos($ua, '0.10') !== false) $ver = 1; else $ver = ''; return 'Mozilla Firefox ' . $ver; }else if(strpos($ua, 'Safari') !== false){ // TODO: get versioning, appears to be a little complicated. return 'Apple Safari'; }else if(strpos($ua, 'Konqueror') !== false){ return 'Konqueror'; }else if(strpos($ua, 'Gecko') !== false){ return 'Mozilla'; }else if(strpos($ua, 'Lynx')!== false){ return 'Lynx'; }else if((strpos($ua, 'Mozilla/4.') !== false && strpos($ua, 'compatible') !== true )|| strpos($ua, 'Mozilla 4.0 (Linux)')!==false){ return 'Netscape 4'; }else if(strpos($ua, 'Mozilla/3') !== false){ return 'Netscape 3'; }else if(strpos($ua, 'LinkWalker')!== false){ $browser_type = ST_BOT; $s_id = 'LinkWalker'; return 'LinkWalker'; // FEED PARSERS }else if(strpos($ua, 'UniversalFeedParser') !== false) { $browser_type = ST_FEED; $s_id = 'UniversalFeedParser'; return 'Universal Feed Parser'; }else if(strpos($ua, 'NewsGator') !== false){ $browser_type = ST_FEED; $s_id = 'NewsGator'; return 'NewsGator'; }else if(strpos($ua, 'TrillianPRO') !== false){ $browser_type = ST_FEED; $s_id = 'trillianpro'; return 'Trillian Pro'; }else if(strpos($ua, 'Feedster') !== false){ $browser_type = ST_FEED; $s_id = 'feedster'; return 'Feedster'; }else if(strpos($ua, 'FeedRover')){ $browser_type = ST_FEED; $s_id = "FeedRover"; return "FeedRover"; }else if(strpos($ua, "lmspider") !== false){ $browser_type = ST_FEED; $s_id = "lmspider"; return "lmspider"; }else if(strpos($ua, "Googlebot") !== false){ $browser_type = ST_BOT; $s_id = "google"; return "Googlebot"; }else if(strpos($ua, "msnbot") !== false){ $browser_type = ST_BOT; $s_id = "msnbot"; return "msnbot"; }else if(strpos($ua, "Technoratibot") !== false){ $browser_type = ST_BOT; $s_id = "Technoratibot"; return "Technoratibot"; }else if(strpos($ua, "The World as a Blog")!==false){ $browser_type = ST_BOT; $s_id = "The World as a Blog"; return "The World as a Blog"; }else if(strpos($ua, "blo.gs") !== false){ $browser_type = ST_BOT; $s_id = "blo.gs"; return "blo.gs"; }else if(strpos($ua, "obidos-bot") !== false){ $browser_type = ST_BOT; $s_id = "obidos-bot"; return "obidos-bot"; }else if(strpos($ua, "blogsnowbot") !== false){ $browser_type = ST_BOT; $s_id = "blogsnowbot"; return "blogsnowbot"; }else if(strpos($ua, "Fresh Search") !== false){ $browser_type = ST_BOT; $s_id = "Fresh Search"; return "Fresh Search"; }else if(strpos($ua, "larbin") !== false){ $browser_type = ST_BOT; $s_id = "larbin"; return "Larbin"; }else if(strpos($ua, "Bloglines") !== false){ $browser_type = ST_BOT; $s_id = "Bloglines"; return "Bloglines"; }else if(strpos($ua, "feedsucker") !== false){ $browser_type = ST_FEED; $s_id = "feedsucker"; return $s_id; }else if(strpos($ua, "NPBot") !== false){ $browser_type = ST_BOT; $s_id = "npbot"; return "NPBot"; }else if(strpos($ua, "NetNewsWire")!== false){ $browser_type = ST_FEED; $s_id = "NetNewsWire"; return $s_id; }else if(strpos($ua, "almaden") !== false){ $browser_type = ST_BOT; $s_id = "almaden_ibm_crawler"; return "IBM Research Crawler"; }else if(strpos($ua, "bot") !== false){ $browser_type = ST_BOT; $s_id = "bot"; return "Bot[$ua]"; }else if(strpos($ua, "FeedDemon") !== false){ $browser_type = ST_FEED; return "FeedDemon"; }else if(strpos($ua, "Syndic8") !== false){ $browser_type = ST_FEED; $s_id = "syndic8"; return "Syndic8"; }else if(strpos($ua, "W3C_Validator") !== false){ $browser_type = ST_BOT; $s_id = "w3c_validator"; return "W3C Validator"; }else if(strpos($ua, "FeedFixer") !== false){ $browser_type = ST_FEED; $s_id = "feedfixer"; return "FeedFixer"; }else if(strpos($ua, "FeedValidator") !== false){ $browser_type = ST_FEED; $s_id = "feedvalidator"; return "FeedValidator"; }else if((strpos($ua, "Slurp/cat") !== false) || (strpos($ua, "Yahoo! Slurp") !== false)){ $browser_type = ST_BOT; $s_id = "inktomi_yahoo"; return "Inktomi/Yahoo"; }else if(strpos($ua, "FAST-WebCrawler") !== false){ $browser_type = ST_BOT; $s_id = "fast_webcrawler"; return "fast_webcrawler"; }else if(strpos($ua, "Ask Jeeves") !== false){ $browser_type = ST_BOT; $s_id = "askjeeves"; return "Ask Jeeves"; }else if(strpos($ua, "PubSub")!==false){ $browser_type = ST_BOT; $s_id = "PubSub"; return "PubSub"; }else if(strpos($ua, "Sauce Reader")!==false){ $browser_type = ST_FEED; $s_id = "Sauce Reader"; return "Sauce Reader"; }else if(strpos($ua, "BlogShares")!==false){ $browser_type = ST_FEED; $s_id = "BlogShares"; return "BlogShares"; }else if(strpos($ua, "BlogPulse")!==false){ $browser_type = ST_FEED; $s_id = "BlogPulse"; return $s_id; }else if(strpos($ua, "feed") !== false){ $browser_type = ST_BOT; $s_id = "nasty_spider"; return "Some Feed Monger[$ua]"; }else{ $browser_type = ST_BOT; return "Other[$ua]"; } } function statTraqGetIPAddress() { if (isset($_SERVER)) { if(isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ return $_SERVER["HTTP_X_FORWARDED_FOR"]; }elseif (isset($_SERVER["HTTP_CLIENT_IP"])){ return $_SERVER["HTTP_CLIENT_IP"]; }else{ return $_SERVER["REMOTE_ADDR"]; } }else{ if( getenv('HTTP_X_FORWARDED_FOR' )){ return getenv( 'HTTP_X_FORWARDED_FOR' ); }elseif( getenv( 'HTTP_CLIENT_IP' ) ) { return getenv( 'HTTP_CLIENT_IP' ); }else{ return getenv( 'REMOTE_ADDR' ); } } } function statTraqGetQueryPairs($url){ $parsed_url = parse_url($url); $tab=parse_url($url); $host = $tab['host']; if(key_exists("query",$tab)){ $query=$tab["query"]; return explode("&",$query); } else{return null;} } function statTraqGetSearchPhrase($referrer = null){ global $s; $key = null; if($referrer == null){ return null; }else if(strpos($referrer, "google.")!== false || strpos($referrer, "msn.com") !== false){ $key = "q"; }else if(strpos($referrer, "yahoo.")!== false){ $key = "p"; }else if(strpos($referrer, "aol.") !== false || strpos($referrer, "netscape.") !== false){ $key = "query"; } if($s != null && $s != ''){return $s;} if($key!=null){ $variables = statTraqGetQueryPairs($referrer); $i = count($variables); while($i--){ $tab=explode("=",$variables[$i]); if($tab[0] == $key){return urldecode($tab[1]);} } }else return null; } function getVisitorCount($time_frame = 'year'){ global $wpdb, $tablestattraq; switch($time_frame){ case 'year': $startDate = date("Y0101 000000"); $endDate = date("Y1231 235959"); break; case 'month': $startDate = date("Ym01 000000"); $endDate = date("Ymt 000000"); break; case 'day': $startDate = date("Ymd 000000"); $endDate = date("Ymd 235959"); break; case 'hour': $startDate = date("Ymd H0000"); $endDate = date("Ymd H5959"); break; default: break; } $sqlQuery = "SELECT COUNT(DISTINCT session_id) AS cnt FROM $tablestattraq WHERE " . ('all' != $time_frame ? "access_time BETWEEN '$startDate' AND '$endDate' AND" : '' ) ." user_agent_type=0"; $output = $wpdb->get_row($sqlQuery); return $output->cnt; } // add the call to the API request add_action('shutdown', 'stat_traq_event'); ?>