Andres Nieto Porras, Frank Bueltge Version: 2.1 */ /* ------------------------------------------------------ ACKNOWLEDGEMENTS ------------------------------------------------------ Thx to Thomas R. Koll - http://blog.tomk32.de for many improvements for a better code and performance Thx to Frank Bueltge - http://bueltge.de Statistic, multilingualism and improvements ------------------------------------------------------ */ if(function_exists('load_plugin_textdomain')) load_plugin_textdomain('feedstats','wp-content/plugins'); define('FEEDSTATS_VERSION', '2.0'); define('fs_DAY',60*60*24); $location = get_option('siteurl') . '/wp-admin/options-general.php?page=wp-feedstats.php'; // Form Action URI if (('insert' == $HTTP_POST_VARS['action']) && $_POST['fs_ifs_save']) { update_option("fs_days",$HTTP_POST_VARS['fs_days']); update_option("fs_user_level",$HTTP_POST_VARS['fs_user_level']); update_option("fs_session_timeout",$HTTP_POST_VARS['fs_session_timeout']); update_option("fs_visits_online",$HTTP_POST_VARS['fs_visits_online']); update_option("fs_ifs_not_tracked",$HTTP_POST_VARS['fs_ifs_not_tracked']); update_option("fs_ifs_dashboardinfo",$HTTP_POST_VARS['fs_ifs_dashboardinfo']); } // Installation functions function fs_generateDB() { global $wpdb; $fs_data_query = "CREATE TABLE " . $wpdb->prefix . "fs_data ( time_install int(11) NOT NULL default '0', max_visits mediumint(8) unsigned NOT NULL default '0', max_visits_time int(11) NOT NULL default '0', max_online mediumint(8) unsigned NOT NULL default '0', max_online_time int(11) NOT NULL default '0' ) TYPE=MyISAM;"; $fs_visits_query = "CREATE TABLE " . $wpdb->prefix . "fs_visits ( visit_id mediumint(8) unsigned NOT NULL auto_increment, ip varchar(20) NOT NULL default '', url varchar(255) NOT NULL default '', time_begin int(11) NOT NULL default '0', time_last int(11) NOT NULL default '0', PRIMARY KEY (visit_id) ) TYPE=MyISAM;"; include_once (ABSPATH.'/wp-admin/upgrade-functions.php'); maybe_create_table($wpdb->prefix . 'fs_data',$fs_data_query); maybe_create_table($wpdb->prefix . 'fs_visits',$fs_visits_query); $time = time(); $count_data = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . 'fs_data'); if ($count_data==0) { $wpdb->query("INSERT INTO " . $wpdb->prefix . "fs_data (time_install,max_visits,max_visits_time) VALUES (".$time.",0,".$time.")"); } } // Upgrade functions function fs_versionControl() { global $wpdb; // Version 1.6.0 to 1.7.0 // Added 4 more fields to visits table: referer, platform, browser and version $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD referer varchar(255) NOT NULL default '' AFTER ip"; maybe_add_column($wpdb->prefix . 'fs_visits','referer',$create_dll); $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD platform varchar(50) NOT NULL default '' AFTER referer"; maybe_add_column($wpdb->prefix . 'fs_visits','platform',$create_dll); $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD browser varchar(50) NOT NULL default '' AFTER platform"; maybe_add_column($wpdb->prefix . 'fs_visits','browser',$create_dll); $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD version varchar(15) NOT NULL default '' AFTER browser"; maybe_add_column($wpdb->prefix . 'fs_visits','version',$create_dll); // Added 2 more fields to data table: max_online and max_online_time $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_data ADD max_online mediumint(8) unsigned NOT NULL default '0' AFTER max_hits_time"; maybe_add_column($wpdb->prefix . 'fs_data','max_online',$create_dll); $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_data ADD max_online_time int(11) NOT NULL default '0' AFTER max_online"; maybe_add_column($wpdb->prefix . 'fs_data','max_online_time',$create_dll); // Version 1.7.0 to 1.7.1 // Fixed search engine user agent which should return no version $wpdb->query("UPDATE " . $wpdb->prefix . "fs_visits SET version='' WHERE browser='Crawler/Search Engine'"); // Added 1 more field to visits table: search_terms $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD search_terms varchar(255) NOT NULL default '' AFTER version"; maybe_add_column($wpdb->prefix . 'fs_visits','search_terms',$create_dll); // Version 1.7.4 to 1.8.0 // Added 1 more field to visits table: url $create_dll = "ALTER TABLE " . $wpdb->prefix . "fs_visits ADD url varchar(255) NOT NULL default '' AFTER ip"; maybe_add_column($wpdb->prefix . 'fs_visits','url',$create_dll); } // Global set of functions function fs_tr($s) { global $fs_tr; $return = ($fs_tr[$s]!='') ? $fs_tr[$s] : $s; if (get_bloginfo('charset') == 'UTF-8') { $return = utf8_encode($return); } return $return; } function fs_resetDB() { global $wpdb; $wpdb->get_var("DROP TABLE " . $wpdb->prefix . "fs_visits," . $wpdb->prefix . 'fs_data'); fs_generateDB(); } function fs_getIP() { global $_SERVER; if (isset($_SERVER['HTTP_CLIENT_IP'])) { return($_SERVER['HTTP_CLIENT_IP']); } else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { return($_SERVER['HTTP_X_FORWARDED_FOR']); } else if (isset($_SERVER['REMOTE_ADDR'])) { return($_SERVER['REMOTE_ADDR']); } else { return($_SERVER['REMOTE_HOST']); } } function fs_getMidnight($time) { return date('U',mktime(0,0,0,1,date('z',$time)+1,date('y',$time))); } // Main/System functions function fs_track($title = '') { if (!is_feed()) return; global $wpdb,$_SERVER; $time = time(); $url = $_SERVER['REQUEST_URI']; if ($url == get_bloginfo('rdf_url')) { $url = "RDF"; } else if ($url == get_bloginfo('rss_url')) { $url = "RSS"; } else if ($url == get_bloginfo('rss2_url')) { $url = "RSS2"; } else if ($url == get_bloginfo('atom_url')) { $url = "ATOM"; } else if ($url == get_bloginfo('comments_rss2_url')) { $url = "COMMENT RSS"; } $time_delete = fs_getMidnight($time-(fs_DAY*get_option('fs_days'))); $wpdb->query("DELETE FROM " . $wpdb->prefix . "fs_visits WHERE time_begin < ".$time_delete); if(in_array(fs_getIP(),array(get_option('fs_ifs_not_tracked')))) return; $time_insert_visit = $time - get_option('fs_session_timeout'); if($wpdb->is_admin || strstr($_SERVER['PHP_SELF'],'wp-admin/')) { $sessions = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . "fs_visits WHERE ip='".fs_getIP()."' AND time_last > ".$time_insert_visit); if ($sessions>0) { $wpdb->query("UPDATE " . $wpdb->prefix . "fs_visits SET time_last=".$time.",url='".$url."' WHERE ip='".fs_getIP()."' AND time_last > ".$time_insert_visit); } return; } $ip_time_query = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . "fs_visits WHERE ip='".fs_getIP()."' AND time_last > ".$time_insert_visit); if ($ip_time_query==0) { $wpdb->query("INSERT INTO " . $wpdb->prefix . "fs_visits (ip,url,time_begin,time_last) VALUES ('".fs_getIP()."','".$url."',".$time.",".$time.")"); } else { $wpdb->query("UPDATE " . $wpdb->prefix . "fs_visits SET time_last=".$time.",url='".$url."' WHERE ip='".fs_getIP()."' AND time_last > ".$time_insert_visit); } $time_start = fs_getMidnight($time); $time_end = $time_start + fs_DAY; $count_visits_day = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . "fs_visits WHERE time_begin >= ".$time_start." AND time_begin < ".$time_end); $max_visits = $wpdb->get_var("SELECT max_visits FROM " . $wpdb->prefix . 'fs_data'); if ($count_visits_day>=$max_visits) { $wpdb->query("UPDATE " . $wpdb->prefix . "fs_data SET max_visits = ".$count_visits_day.",max_visits_time = ".$time); } $time_visits_online = $time - get_option('fs_visits_online'); $count_online = $wpdb->get_var("SELECT COUNT(*) FROM " . $wpdb->prefix . "fs_visits WHERE time_last > ".$time_visits_online); $max_online = $wpdb->get_var("SELECT max_online FROM " . $wpdb->prefix . 'fs_data'); if ($count_online>=$max_online) { $wpdb->query("UPDATE " . $wpdb->prefix . "fs_data SET max_online = ".$count_online.",max_online_time = ".$time); } return $title; } function fs_displayStats() { global $wpdb; if ($_GET['fs_action']=='reset') fs_resetDB(); $time = time(); $time_begin = fs_getMidnight($wpdb->get_var("SELECT time_install FROM " . $wpdb->prefix . 'fs_data')); $num_days = ceil(($time-$time_begin)/fs_DAY); if ($num_days>get_option('fs_days')) { $num_days = get_option('fs_days') + 1; } $visits = array(); $count_visits_total = 0; for ($i=0; $i<$num_days; $i++) { $day_time = $time - ($i * fs_DAY); $time_start = fs_getMidnight($day_time); $time_end = $time_start + fs_DAY; $count_visits_day = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . "fs_visits WHERE time_begin >= ".$time_start." AND time_begin < ".$time_end); $visits[$day_time] = $count_visits_day; if ($i!=0 && $time_start!=$time_begin) { $count_visits_total += $count_visits_day; } } $total_visits = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . 'fs_visits'); $average_visits = ($num_days) ? round($total_visits/($num_days)) : '0'; $max_visits = $wpdb->get_var("SELECT max_visits FROM " . $wpdb->prefix . 'fs_data'); $max_visits_time = date(get_option('date_format'),$wpdb->get_var("SELECT max_visits_time FROM " . $wpdb->prefix . 'fs_data')); $total_visits = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . 'fs_visits'); $max_online = $wpdb->get_var("SELECT max_online FROM " . $wpdb->prefix . 'fs_data'); $max_online_time = date(get_option('date_format') . " " . get_option('time_format'),$wpdb->get_var("SELECT max_online_time FROM " . $wpdb->prefix . 'fs_data')); $referers_query = $wpdb->get_results("SELECT DISTINCT url FROM " . $wpdb->prefix . "fs_visits WHERE LEFT(url, '".strlen(get_settings('home'))."') != '".get_settings('home')."' AND url <> '' ORDER BY url DESC"); $referers = array(); if ($referers_query) { foreach ($referers_query as $r) { $refer['cont'] = $wpdb->get_var("SELECT count(*) FROM " . $wpdb->prefix . "fs_visits WHERE url = '".$r->url."';"); $refer['title'] = $r->url; array_push($referers,$refer); } } $time_visits_online = $time - get_option('fs_visits_online'); $online_query = $wpdb->get_results("SELECT ip,url FROM " . $wpdb->prefix . "fs_visits WHERE time_last > ".$time_visits_online); $online = array(); if ($online_query) { foreach ($online_query as $visit) { $o['ip'] = $visit->ip; $o['url'] = $visit->url; array_push($online,$o); } } $people_online = count($online); ?>

FeedStats

$num) { $class = ($class=='alternate') ? '' : 'alternate'; if (date('j M Y',$day)==date('j M Y',time())) { $day_s = __('Today', 'feedstats'); } else if (date(get_option('date_format'),$day)==date(get_option('date_format'),$time_begin)) { $day_s = __('First Day', 'feedstats'); } else { $day_s = date('j. M',$day); } ?>
$num) { ?> $num) { ?> $num) { ?>
" style="width: 16px; height: px; background-color: #A3A3A3; border-bottom: 1px solid #A3A3A3;"> 
" style="width: 16px; height: px; background-color: #CCC; border-bottom: 1px solid #CCC;"> 
" style="width: 16px; height: px; background-color:#FFCC66; border-bottom: 1px solid #CCC;"> 
Ø Max
80) ? substr_replace($r['title'],"...",80) : $r['title']; ?>

()

()

()

>> <<

get_var("SELECT count(*) FROM " . $wpdb->prefix . 'fs_visits'); $time = time(); $time_begin = fs_getMidnight($wpdb->get_var("SELECT time_install FROM " . $wpdb->prefix . 'fs_data')); $num_days = ceil(($time-$time_begin)/fs_DAY); if ($num_days>get_option('fs_days')) $num_days = get_option('fs_days') + 1; $average_visits = ($num_days) ? round($total_visits/($num_days)) : '0'; $max_visits = $wpdb->get_var("SELECT max_visits FROM " . $wpdb->prefix . 'fs_data'); $max_visits_time = date(get_option('date_format'),$wpdb->get_var("SELECT max_visits_time FROM " . $wpdb->prefix . 'fs_data')); ?>

get_var("SELECT count(*) FROM " . $wpdb->prefix . 'fs_visits'); $time = time(); $time_begin = fs_getMidnight($wpdb->get_var("SELECT time_install FROM " . $wpdb->prefix . 'fs_data')); $num_days = ceil(($time-$time_begin)/fs_DAY); if ($num_days>get_option('fs_days')) $num_days = get_option('fs_days') + 1; $average_visits = ($num_days) ? round($total_visits/($num_days)) : '0'; $max_visits = $wpdb->get_var("SELECT max_visits FROM " . $wpdb->prefix . 'fs_data'); //$max_visits_time = date('j. F Y',$wpdb->get_var("SELECT max_visits_time FROM " . $wpdb->prefix . 'fs_data')); $max_visits_time = strftime('%d. %B %Y',$wpdb->get_var("SELECT max_visits_time FROM " . $wpdb->prefix . 'fs_data')); $admin = dirname($_SERVER['SCRIPT_FILENAME']); $admin = substr($admin, strrpos($admin, '/')+1); if ($admin == 'wp-admin' && basename($_SERVER['SCRIPT_FILENAME']) == 'index.php' and get_option('fs_ifs_dashboardinfo') == isset($_POST["get_option('fs_ifs_dashboardinfo')"]) ? $_POST["get_option('fs_ifs_dashboardinfo')"] : 1) { $content = "

" . _('FeedStats') . " »

"; $content.= ""; print ''; } } function fs_activate() { add_option("fs_days","30"); add_option("fs_user_level","1"); add_option("fs_session_timeout","300"); add_option("fs_visits_online","300"); } // Program flow if(function_exists('add_action')) { if (isset($_GET['activate']) && $_GET['activate'] == 'true') { add_action('init', 'fs_generateDB'); add_action('init', 'fs_activate'); add_action('init', 'fs_versionControl'); } add_action('the_title_rss','fs_track'); add_action('admin_menu','fs_addAdminMenu'); add_action('admin_footer', 'FeedStats_Admin_Footer'); } // Option Page function fb_admin_feedstats_option_page() { ?>

(: )
" type="text" />
" type="text" />
" type="text" />
" type="text" />
" type="text" />
type="checkbox" />
 

Andrés Nieto, in cooperation/base with plugin PopStats. German and english adjustments, little extensions and new coding by Frank Bueltge. Thx to Thomas R. Koll for many improvements for a better code and performance. Possible updates available at : aNieto2k or bueltge.de.', 'feedstats');?>