Shaun Inman's ShortStat. Version: 1.3.6 Author: Jeff Minard Author URI: http://jrm.cc/ Changes by mk@happyarts.de (Markus Kaemmerer, http://blog.happyarts.de) - new host for detecting country code (thx to wordpress.de) - fixed time offset calculation in wp_shortstat_display_stats, TodayHits and UniqueHits, now uses time zone configured in WordPress - search terms are now saved case insensitive - fixes from http://www.4null4.de/63/wp-shortstat-korrekturen included - fixed week day hit count list - don't count access of logged in users (=myself) - do not check for "is_admin_page" function anymore, because some plugins like Google Sitemap Plugin from Arne Brachhold include this function an wp-shortstat thinks that we are admin, even on standard pages - multiple fixes for detecting pages that should not been counted - page calls from users that are logged in and are admins don't counted anymore changes by WebKeyDesign - changed CSS to match WP2 theme (http://www.webkeydesign.com/107/wordpress-20-shortstat-plugin/) */ class wp_shortstat { var $languages; var $table_stats; var $table_search; var $tz_offset; function wp_shortstat() { // Constructor -- Set things up. global $table_prefix; // tables $this->table_stats = $table_prefix . "ss_stats"; $this->table_search = $table_prefix . "ss_search"; $this->tz_offset = get_settings('gmt_offset'); // Longest Array Line Ever... $this->languages = array( "af" => "Afrikaans", "sq" => "Albanian", "eu" => "Basque", "bg" => "Bulgarian", "be" => "Byelorussian", "ca" => "Catalan", "zh" => "Chinese", "zh-cn" => "Chinese/China", "zh-tw" => "Chinese/Taiwan", "zh-hk" => "Chinese/Hong Kong", "zh-sg" => "Chinese/singapore", "hr" => "Croatian", "cs" => "Czech", "da" => "Danish", "nl" => "Dutch", "nl-nl" => "Dutch/Netherlands", "nl-be" => "Dutch/Belgium", "en" => "English", "en-gb" => "English/United Kingdom", "en-us" => "English/United States", "en-au" => "English/Australian", "en-ca" => "English/Canada", "en-nz" => "English/New Zealand", "en-ie" => "English/Ireland", "en-za" => "English/South Africa", "en-jm" => "English/Jamaica", "en-bz" => "English/Belize", "en-tt" => "English/Trinidad", "et" => "Estonian", "fo" => "Faeroese", "fa" => "Farsi", "fi" => "Finnish", "fr" => "French", "fr-be" => "French/Belgium", "fr-fr" => "French/France", "fr-ch" => "French/Switzerland", "fr-ca" => "French/Canada", "fr-lu" => "French/Luxembourg", "gd" => "Gaelic", "gl" => "Galician", "de" => "German", "de-at" => "German/Austria", "de-de" => "German/Germany", "de-ch" => "German/Switzerland", "de-lu" => "German/Luxembourg", "de-li" => "German/Liechtenstein", "el" => "Greek", "he" => "Hebrew", "he-il" => "Hebrew/Israel", "hi" => "Hindi", "hu" => "Hungarian", "ie-ee" => "Internet Explorer/Easter Egg", "is" => "Icelandic", "id" => "Indonesian", "in" => "Indonesian", "ga" => "Irish", "it" => "Italian", "it-ch" => "Italian/ Switzerland", "ja" => "Japanese", "ko" => "Korean", "lv" => "Latvian", "lt" => "Lithuanian", "mk" => "Macedonian", "ms" => "Malaysian", "mt" => "Maltese", "no" => "Norwegian", "pl" => "Polish", "pt" => "Portuguese", "pt-br" => "Portuguese/Brazil", "rm" => "Rhaeto-Romanic", "ro" => "Romanian", "ro-mo" => "Romanian/Moldavia", "ru" => "Russian", "ru-mo" => "Russian /Moldavia", "gd" => "Scots Gaelic", "sr" => "Serbian", "sk" => "Slovack", "sl" => "Slovenian", "sb" => "Sorbian", "es" => "Spanish", "es-do" => "Spanish", "es-ar" => "Spanish/Argentina", "es-co" => "Spanish/Colombia", "es-mx" => "Spanish/Mexico", "es-es" => "Spanish/Spain", "es-gt" => "Spanish/Guatemala", "es-cr" => "Spanish/Costa Rica", "es-pa" => "Spanish/Panama", "es-ve" => "Spanish/Venezuela", "es-pe" => "Spanish/Peru", "es-ec" => "Spanish/Ecuador", "es-cl" => "Spanish/Chile", "es-uy" => "Spanish/Uruguay", "es-py" => "Spanish/Paraguay", "es-bo" => "Spanish/Bolivia", "es-sv" => "Spanish/El salvador", "es-hn" => "Spanish/Honduras", "es-ni" => "Spanish/Nicaragua", "es-pr" => "Spanish/Puerto Rico", "sx" => "Sutu", "sv" => "Swedish", "sv-se" => "Swedish/Sweden", "sv-fi" => "Swedish/Finland", "ts" => "Thai", "tn" => "Tswana", "tr" => "Turkish", "uk" => "Ukrainian", "ur" => "Urdu", "vi" => "Vietnamese", "xh" => "Xshosa", "ji" => "Yiddish", "zu" => "Zulu"); } function setup() { // get the DB ready if it isn't already. if( !function_exists('maybe_create_table') ) { function maybe_create_table($table_name, $create_ddl) { global $wpdb; foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { if ($table == $table_name) return true; } $q = $wpdb->query($create_ddl); // we cannot directly tell that whether this succeeded! foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { if ($table == $table_name) return true; } return false; } } $table_stats_query = "CREATE TABLE $this->table_stats ( id int(11) unsigned NOT NULL auto_increment, remote_ip varchar(15) NOT NULL default '', country varchar(50) NOT NULL default '', language VARCHAR(5) NOT NULL default '', domain varchar(255) NOT NULL default '', referer varchar(255) NOT NULL default '', resource varchar(255) NOT NULL default '', user_agent varchar(255) NOT NULL default '', platform varchar(50) NOT NULL default '', browser varchar(50) NOT NULL default '', version varchar(15) NOT NULL default '', dt int(10) unsigned NOT NULL default '0', UNIQUE KEY id (id) ) TYPE=MyISAM"; $table_search_query = "CREATE TABLE $this->table_search ( id int(11) unsigned NOT NULL auto_increment, searchterms varchar(255) NOT NULL default '', count int(10) unsigned NOT NULL default '0', PRIMARY KEY (id) ) TYPE=MyISAM;"; maybe_create_table($this->table_stats, $table_stats_query); maybe_create_table($this->table_search, $table_search_query); // end wp_shortstat(); } function track() { // Only public function global $wpdb; if(is_admin() || is_404() || is_preview() || isset($_COOKIE['wordpressuser_'.$cookiehash]) || strstr($_SERVER['PHP_SELF'], 'wp-login.php') )return; // let's not track the admin pages -- no one cares. // test if user is admin, only get userinfo, when user is logged in if (is_user_logged_in()) { global $user_level; get_currentuserinfo(); if ($user_level > 8) return; } $ip = $_SERVER['REMOTE_ADDR']; $cntry = $this->determineCountry($ip); $lang = $this->determineLanguage(); $ref = $_SERVER['HTTP_REFERER']; $url = parse_url($ref); $domain = eregi_replace("^www.","",$url['host']); $res = $_SERVER['REQUEST_URI']; $ua = $_SERVER['HTTP_USER_AGENT']; $br = $this->parseUserAgent($ua); $dt = time(); $this->sniffKeywords($url); $query = "INSERT INTO $this->table_stats (remote_ip,country,language,domain,referer,resource,user_agent,platform,browser,version,dt) VALUES ('$ip','$cntry','$lang','$domain','$ref','$res','$ua','$br[platform]','$br[browser]','$br[version]',$dt)"; $wpdb->query($query); } function determineCountry($ip) { $coinfo = @file('http://whois.wordpress.de/ip2country.php?ip=' . $ip); $country_string = explode(':',$coinfo[0]); $country = trim($country_string[1]); if($country == '(Private Address) (XX)' || $country == '(Unknown Country?) (XX)' || $country == '' || !$country )return 'Indeterminable'; return $country; } function sniffKeywords($url) { // $url should be an array created by parse_url($ref) global $wpdb; // Check for google first if (preg_match("/google\./i", $url['host'])) { parse_str($url['query'],$q); // Googles search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/yahoo\./i", $url['host'])) { parse_str($url['query'],$q); // Yahoo search terms are in "p" $searchterms = $q['p']; } else if (preg_match("/search\.msn\./i", $url['host'])) { parse_str($url['query'],$q); // MSN search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/search\.aol\./i", $url['host'])) { parse_str($url['query'],$q); // AOL search terms are in "query" $searchterms = $q['query']; } else if (preg_match("/web\.ask\./i", $url['host'])) { parse_str($url['query'],$q); // Ask Jeeves search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/search\.looksmart\./i", $url['host'])) { parse_str($url['query'],$q); // LookSmart search terms are in "p" $searchterms = $q['p']; } else if (preg_match("/alltheweb\./i", $url['host'])) { parse_str($url['query'],$q); // All the Web search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/a9\./i", $url['host'])) { parse_str($url['query'],$q); // A9 search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/gigablast\./i", $url['host'])) { parse_str($url['query'],$q); // Gigablast search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/s\.teoma\./i", $url['host'])) { parse_str($url['query'],$q); // Teoma search terms are in "q" $searchterms = $q['q']; } else if (preg_match("/clusty\./i", $url['host'])) { parse_str($url['query'],$q); // Clusty search terms are in "query" $searchterms = $q['query']; } if (isset($searchterms) && !empty($searchterms)) { // delete "+", """ and multiple spaces $searchterms = trim(preg_replace('/\+|\"/', ' ', strtolower($searchterms))); $searchterms = preg_replace('/\s\s+/', ' ', $searchterms); $exists_query = "SELECT id FROM $this->table_search WHERE searchterms = '$searchterms'"; $search_term_id = $wpdb->get_var($exists_query); if( $search_term_id ) { $query = "UPDATE $this->table_search SET count = (count+1) WHERE id = $search_term_id"; } else { $query = "INSERT INTO $this->table_search (searchterms,count) VALUES ('$searchterms',1)"; } $wpdb->query($query); } } function parseUserAgent($ua) { $browser['platform'] = "Indeterminable"; $browser['browser'] = "Indeterminable"; $browser['version'] = "Indeterminable"; $browser['majorver'] = "Indeterminable"; $browser['minorver'] = "Indeterminable"; // Test for platform if (eregi('Win95',$ua)) { $browser['platform'] = "Windows 95"; } else if (eregi('Win98',$ua)) { $browser['platform'] = "Windows 98"; } else if (eregi('Win 9x 4.90',$ua)) { $browser['platform'] = "Windows ME"; } else if (eregi('Windows NT 5.0',$ua)) { $browser['platform'] = "Windows 2000"; } else if (eregi('Windows NT 5.1',$ua)) { $browser['platform'] = "Windows XP"; } else if (eregi('Windows NT 5.2',$ua)) { $browser['platform'] = "Windows 2003"; } else if (eregi('Windows NT 6.0',$ua)) { $browser['platform'] = "Windows Longhorn beta"; } else if (eregi('Windows',$ua)) { $browser['platform'] = "Windows"; } else if (eregi('Mac OS X',$ua)) { $browser['platform'] = "Mac OS X"; } else if (eregi('Macintosh',$ua)) { $browser['platform'] = "Mac OS Classic"; } else if (eregi('Linux',$ua)) { $browser['platform'] = "Linux"; } else if (eregi('BSD',$ua) || eregi('FreeBSD',$ua) || eregi('NetBSD',$ua)) { $browser['platform'] = "BSD"; } else if (eregi('SunOS',$ua)) { $browser['platform'] = "Solaris"; } // Test for browser type if (eregi('Mozilla/4',$ua) && !eregi('compatible',$ua)) { $browser['browser'] = "Netscape"; eregi('Mozilla/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Mozilla/5',$ua) || eregi('Gecko',$ua)) { $browser['browser'] = "Mozilla"; eregi('rv(:| )([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[2]; } if (eregi('Safari',$ua)) { $browser['browser'] = "Safari"; $browser['platform'] = "Mac OS X"; eregi('Safari/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; if (eregi('412',$browser['version'])) { $browser['version'] = 2.0; $browser['majorver'] = 2; $browser['minorver'] = 0; } else if (eregi('312',$browser['version'])) { $browser['version'] = 1.3; $browser['majorver'] = 1; $browser['minorver'] = 3; } else if (eregi('125',$browser['version'])) { $browser['version'] = 1.2; $browser['majorver'] = 1; $browser['minorver'] = 2; } else if (eregi('100',$browser['version'])) { $browser['version'] = 1.1; $browser['majorver'] = 1; $browser['minorver'] = 1; } else if (eregi('85',$browser['version'])) { $browser['version'] = 1.0; $browser['majorver'] = 1; $browser['minorver'] = 0; } else if ($browser['version']<85) { $browser['version'] = "1.0 beta"; } } if (eregi('iCab',$ua)) { $browser['browser'] = "iCab"; eregi('iCab ([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Firefox',$ua)) { $browser['browser'] = "Firefox"; eregi('Firefox/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Firebird',$ua)) { $browser['browser'] = "Firebird"; eregi('Firebird/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Phoenix',$ua)) { $browser['browser'] = "Phoenix"; eregi('Phoenix/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Camino',$ua)) { $browser['browser'] = "Camino"; eregi('Camino/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Chimera',$ua)) { $browser['browser'] = "Chimera"; eregi('Chimera/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Netscape',$ua)) { $browser['browser'] = "Netscape"; eregi('Netscape[0-9]?/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('MSIE',$ua)) { $browser['browser'] = "Internet Explorer"; eregi('MSIE ([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('MSN Explorer',$ua)) { $browser['browser'] = "MSN Explorer"; eregi('MSN Explorer ([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('AOL',$ua)) { $browser['browser'] = "AOL"; eregi('AOL ([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('America Online Browser',$ua)) { $browser['browser'] = "AOL Browser"; eregi('America Online Browser ([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('K-Meleon',$ua)) { $browser['browser'] = "K-Meleon"; eregi('K-Meleon/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Beonex',$ua)) { $browser['browser'] = "Beonex"; eregi('Beonex/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Opera',$ua)) { $browser['browser'] = "Opera"; eregi('Opera( |/)([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[2]; } if (eregi('OmniWeb',$ua)) { $browser['browser'] = "OmniWeb"; eregi('OmniWeb/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; if (eregi('563',$browser['version'])) { $browser['version'] = 5.1; $browser['majorver'] = 5; $browser['minorver'] = 1; } else if (eregi('558',$browser['version'])) { $browser['version'] = 5.0; $browser['majorver'] = 5; $browser['minorver'] = 0; } else if (eregi('496',$browser['version'])) { $browser['version'] = 4.5; $browser['majorver'] = 4; $browser['minorver'] = 5; } } if (eregi('Konqueror',$ua)) { $browser['platform'] = "Linux"; $browser['browser'] = "Konqueror"; eregi('Konqueror/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Galeon',$ua)) { $browser['browser'] = "Galeon"; eregi('Galeon/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Epiphany',$ua)) { $browser['browser'] = "Epiphany"; eregi('Epiphany/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Kazehakase',$ua)) { $browser['browser'] = "Kazehakase"; eregi('Kazehakase/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('amaya',$ua)) { $browser['browser'] = "Amaya"; eregi('amaya/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Crawl',$ua) || eregi('bot',$ua) || eregi('slurp',$ua) || eregi('spider',$ua)) { $browser['browser'] = "Crawler/Search Engine"; } if (eregi('Lynx',$ua)) { $browser['browser'] = "Lynx"; eregi('Lynx/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('Links',$ua)) { $browser['browser'] = "Links"; eregi('\(([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } if (eregi('ELinks',$ua)) { $browser['browser'] = "ELinks"; eregi('ELinks/([[:digit:]\.]+)',$ua,$b); $browser['version'] = $b[1]; } // Determine browser versions if (($browser['browser']!='AppleWebKit' || $browser['browser']!='OmniWeb') && $browser['browser'] != "Indeterminable" && $browser['browser'] != "Crawler/Search Engine" && $browser['version'] != "Indeterminable") { // Make sure we have at least .0 for a minor version for Safari and OmniWeb $browser['version'] = (!eregi('\.',$browser['version']))?$browser['version'].".0":$browser['version']; eregi('^([0-9]*).(.*)$',$browser['version'],$v); $browser['majorver'] = $v[1]; $browser['minorver'] = $v[2]; } if (empty($browser['version']) || $browser['version']=='.0') { $browser['version'] = "Indeterminable"; $browser['majorver'] = "Indeterminable"; $browser['minorver'] = "Indeterminable"; } return $browser; } function determineLanguage() { $lang_choice = "empty"; if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { // Capture up to the first delimiter (, found in Safari) preg_match("/([^,;]*)/",$_SERVER["HTTP_ACCEPT_LANGUAGE"],$langs); $lang_choice = $langs[0]; } return $lang_choice; } // DISPLAY function getKeywords() { global $wpdb; $query = "SELECT searchterms, count FROM $this->table_search ORDER BY count DESC LIMIT 0,36"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; foreach( $results as $r ) { $ul .= "\t\n"; } $ul .= "
Search StringsHits
$r->searchterms$r->count
"; } return $ul; } function getReferers() { global $wpdb; $query = "SELECT referer, resource, dt FROM $this->table_stats WHERE referer NOT LIKE '%".$this->trimReferer($_SERVER['SERVER_NAME'])."%' AND referer!='' ORDER BY dt DESC LIMIT 0,36"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; foreach( $results as $r ) { $url = parse_url($r->referer); $when = ($r->dt >= strtotime(date("j F Y",time())))?gmdate("g:i a",$r->dt+(((gmdate('I'))?($this->tz_offset+1):$this->tz_offset)*3600)):gmdate("M j",$r->dt+(((gmdate('I'))?($this->tz_offset+1):$this->tz_offset)*3600)); $ul .= "\t\n"; } $ul .= "
Recent ReferrersWhen
referer\" title=\"$resource\" rel=\"nofollow\">".$this->trimReferer($url['host'])."$when
"; } return $ul; } function getDomains() { global $wpdb; $query = "SELECT domain, referer, resource, COUNT(domain) AS 'total' FROM $this->table_stats WHERE domain !='".$this->trimReferer($_SERVER['SERVER_NAME'])."' AND domain!='' GROUP BY domain ORDER BY total DESC, dt DESC"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; $i=0; foreach( $results as $r ) { if ($i++ < 36) { $ul .= "\t\n"; } else { break; } } $ul .= "
Repeat ReferrersHits
referer\" title=\"$resource\" rel=\"nofollow\">$r->domain$r->total
"; } return $ul; } function getCountries() { global $wpdb; $query = "SELECT country, COUNT(country) AS 'total' FROM $this->table_stats WHERE country!='' GROUP BY country ORDER BY total DESC"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; $i=0; foreach( $results as $r ) { if ($i++ < 36) { $url = parse_url($r->referer); $ul .= "\t\n"; } else { break; } } $ul .= "
CountryVisits
$r->country$r->total
"; } return $ul; } function getResources() { global $wpdb; $query = "SELECT resource, referer, COUNT(resource) AS 'requests' FROM $this->table_stats WHERE resource NOT LIKE '%/inc/%' GROUP BY resource ORDER BY requests DESC LIMIT 0,36"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; foreach( $results as $r ) { $resource = $this->truncate($r->resource,24); $referer = (!empty($r->referer))?$r->referer:'No referrer'; $ul .= "\t\n"; } $ul .= "
ResourceRequests
trimReferer($_SERVER['SERVER_NAME'])."$r->resource\" title=\"$referer\">".$resource."$r->requests
"; } return $ul; } function getPlatforms() { global $wpdb; $th = $this->getTotalHits(); $query = "SELECT platform, COUNT(platform) AS 'total' FROM $this->table_stats GROUP BY platform ORDER BY total DESC"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; foreach( $results as $r ) { $ul .= "\t\n"; } $ul .= "
Platform%
$r->platform".number_format(($r->total/$th)*100)."%
"; } return $ul; } function getBrowsers() { global $wpdb; $th = $this->getTotalHits(); $query = "SELECT browser, version, COUNT(*) AS 'total' FROM $this->table_stats WHERE browser != 'Indeterminable' GROUP BY browser, version ORDER BY total DESC"; if ($results = $wpdb->get_results($query)) { $ul = "\n"; $ul .= "\t\n"; foreach( $results as $r ) { $p = number_format(($r->total/$th)*100); if ($p>=1) { $ul .= "\t\n"; } } $ul .= "
BrowserVersion%
$r->browser$r->version$p%
"; } return $ul; } function getTotalHits() { global $wpdb; $query = "SELECT COUNT(*) AS 'total' FROM $this->table_stats"; return $wpdb->get_var($query); } function getFirstHit() { global $wpdb; $query = "SELECT dt FROM $this->table_stats ORDER BY dt ASC LIMIT 0,1"; return $wpdb->get_var($query); } function getUniqueHits() { global $wpdb; $query = "SELECT COUNT(DISTINCT remote_ip) AS 'total' FROM $this->table_stats"; return $wpdb->get_var($query); } function getTodaysHits() { global $wpdb; $dt = strtotime(gmdate("j F Y",time()+(((gmdate('I'))?($this->tz_offset+1):$this->tz_offset)*3600))); $query = "SELECT COUNT(*) AS 'total' FROM $this->table_stats WHERE dt >= $dt"; return $wpdb->get_var($query); } function getTodaysUniqueHits() { global $wpdb; $dt = strtotime(gmdate("j F Y",time()+(((gmdate('I'))?($this->tz_offset+1):$this->tz_offset)*3600))); $query = "SELECT COUNT(DISTINCT remote_ip) AS 'total' FROM $this->table_stats WHERE dt >= $dt"; return $wpdb->get_var($query); } function getWeeksHits() { global $wpdb; $dt = mktime(23,59,59,date('m',current_time('timestamp')),date('d',current_time('timestamp')),date('Y',current_time('timestamp'))); $tmp = ""; $dt_start = $dt; $tmp = "\n"; $tmp .= "\t\n"; $tmp .= "\t\n"; for ($i=0; $i<7; $i++) { $dt_stop = $dt_start; $dt_start = $dt_start - 86400; $day = ($i > 0) ? gmdate("l, j M Y",$dt_stop) : "Today, ".gmdate("j M Y",$dt_stop); $query = "SELECT COUNT(*) AS 'total' FROM $this->table_stats WHERE dt >= $dt_start AND dt <$dt_stop"; if ($total = $wpdb->get_var($query)) { $tmp .= "\t\n"; } } $tmp .= "
Hits in the last week
DayHits
$day$total
"; return $tmp; } function getLanguage() { global $wpdb; $query = "SELECT COUNT(*) AS 'total' FROM $this->table_stats WHERE language != '' AND language != 'empty'"; $th = $wpdb->get_var($query); $query = "SELECT language, COUNT(language) AS 'total' FROM $this->table_stats WHERE language != '' AND language != 'empty' GROUP BY language ORDER BY total DESC"; if ($results = $wpdb->get_results($query)) { $html = "\n"; $html .= "\t\n"; foreach( $results as $r ) { $l = $r->language; $lang = (isset($this->languages[$l]))?$this->languages[$l]:$l; $per = number_format(($r->total/$th)*100); $per = ($per)?$per:'<1'; $html .= "\t\n"; } $html .= "
Language%
$lang$per%
"; } return $html; } function truncate($var, $len = 120) { if (empty ($var)) return ""; if (strlen ($var) < $len) return $var; if (preg_match ("/(.{1,$len})\s./ms", $var, $match)) { return $match [1] . "..."; } else { return substr ($var, 0, $len) . "..."; } } function trimReferer($r) { $r = eregi_replace("http://","",$r); $r = eregi_replace("^www.","",$r); $r = $this->truncate($r,36); return $r; } } // Always want that instance $wpss = new wp_shortstat(); // Tracking hook add_action('shutdown', array(&$wpss, 'track')); // Installation/Initialization Routine if (isset($_GET['activate']) && $_GET['activate'] == 'true') add_action('init', array(&$wpss, 'setup')); function wp_shortstat_display_stats() { // For ze admin page global $wpss; ?>

ShortStat

Version 1.3.6 modified by Happy Arts

Hits Uniques

HitsUniques
Since getFirstHit()+(((gmdate('I'))?($wpss->tz_offset+1):$wpss->tz_offset)*3600));?>
getTotalHits(); ?>getUniqueHits(); ?>
Just Today as of tz_offset+1):$wpss->tz_offset)*3600));?>
getTodaysHits(); ?>getTodaysUniqueHits(); ?>

Hits in the last week

getWeeksHits(); ?>

Platform %

getPlatforms(); ?>

Browser %

getBrowsers(); ?>

Recent Referrers When

getReferers(); ?>

Repeat Referrers Hits

getDomains(); ?>

Resources Hits

getResources(); ?>

Search Strings Hits

getKeywords(); ?>

Countries Visits

getCountries(); ?>

Languages %

getLanguage(); ?>
© 2004 Shaun Inman