function luc_visitors() { global $wpdb, $StatPressV_Option; $table_name = STATPRESS_V_TABLE_NAME; $visitors_color = "#114477"; $action = "visitors"; $graphdays = $StatPressV_Option['StatPressV_Graph_Days']; if ($graphdays == 0) { $graphdays = 7; } // $pa = pa and $pp = pp in the slug $pa = luc_page_posts(); $pp = luc_page_periode(); $today = gmdate('Ymd', current_time('timestamp')); $limitdate = gmdate('Ymd', current_time('timestamp') - 86400 * $graphdays * $pp + 86400); $currentdate = gmdate('Ymd', current_time('timestamp') - 86400 * $graphdays * ($pp - 1)); $permalink = luc_permalink(); $NP = luc_count_periode("date", "FROM {$table_name} as t", "JOIN {$wpdb->posts} as p ON t.urlrequested LIKE CONCAT('%', p.post_name, '_' ) OR t.urlrequested =''", "(ip IS NOT NULL) AND p.post_status = 'publish' AND (post_type = 'page' OR post_type = 'post')", "date", $graphdays); $start_of_week = get_option('start_of_week'); $strqry = "SELECT count(distinct post_name)\n\t\t\t\t\tFROM {$wpdb->posts} as p\n\t\t\t\t\tJOIN {$table_name} as t\n\t\t\t\t\tON t.urlrequested LIKE CONCAT('" . $permalink . "', p.post_name, '_' )\n\t\t\t\t\tWHERE p.post_status = 'publish'\n\t\t\t\t\t\tAND t.feed=''\n\t\t\t\t\t\tAND (p.post_type = 'page' OR p.post_type = 'post')\n\t\t\t\t\t\tAND t.date BETWEEN {$limitdate} AND {$currentdate} ;\n\t\t\t\t"; $NumberPosts = $wpdb->get_var($strqry); $NumberDisplayPost = $StatPressV_Option['StatPressV_Graph_Per_Page']; if ($NumberDisplayPost == 0) { $NumberDisplayPost = 20; } $NA = ceil($NumberPosts / $NumberDisplayPost); $LimitValueArticles = $pa * $NumberDisplayPost - $NumberDisplayPost; // sort post or page by most unique visitors $strqry = "SELECT post_name, total, urlrequested\n\t\t\t\t\tFROM (\n\t\t\t\t\t(SELECT 'page_accueil' as post_name, count(DISTINCT ip) as total, urlrequested\n\t\t\t\t\t\tFROM {$wpdb->posts} as p\n\t\t\t\t\t\tJOIN {$table_name} as t ON urlrequested =''\n\t\t\t\t\t\tWHERE p.post_status = 'publish'\n\t\t\t\t\t\t\tAND (p.post_type = 'page' OR p.post_type = 'post')\n\t\t\t\t\t\t\tAND t.spider=''\n\t\t\t\t\t\t\tAND t.feed=''\n\t\t\t\t\t\t\tAND (t.date BETWEEN {$limitdate} AND {$currentdate})\n\t\t\t\t\t\tGROUP BY post_name)\n\t\t\t\t\tUNION ALL\n\t\t\t\t\t(SELECT post_name, count(DISTINCT ip) as total, urlrequested\n\t\t\t\t\t\tFROM {$wpdb->posts} as p\n\t\t\t\t\t\tJOIN {$table_name} as t\n\t\t\t\t\t\tON t.urlrequested LIKE CONCAT('%', p.post_name, '_' )\n\t\t\t\t\t\tWHERE p.post_status = 'publish'\n\t\t\t\t\t\t\tAND (p.post_type = 'page' OR p.post_type = 'post')\n\t\t\t\t\t\t\tAND t.spider=''\n\t\t\t\t\t\t\tAND t.feed=''\n\t\t\t\t\t\t\tAND t.date BETWEEN {$limitdate} AND {$currentdate}\n\t\t\t\t\t\tGROUP BY post_name)\n\t\t\t\t\t) visitors\n\t\t\t\t\tGROUP BY post_name\n\t\t\t\t\tORDER BY total DESC LIMIT {$LimitValueArticles}, {$NumberDisplayPost} ;\n\t\t\t\t"; $query = $wpdb->get_results($strqry); $spider = $StatPressV_Option['StatPressV_Dont_Collect_Spider']; echo "<div class='wrap'><h2>Most visitors these " . $graphdays . " days </h2>"; luc_print_pp_pa_link($NP, $pp, $action, $NA, $pa); foreach ($query as $url) { $where1 = " (urlrequested LIKE '" . $permalink . "feed%' OR urlrequested LIKE '" . $permalink . "comment%') "; $where2 = " urlrequested LIKE '%" . $url->post_name . "%' AND spider='' "; if ($url->post_name == 'page_accueil') { //url == home $total = luc_count_graph(luc_init_count_graph($graphdays, $pp), $graphdays, $pp, " urlrequested ='' ", $where1, "feed=''", "feed<>''", $limitdate, $currentdate); } else { //url<> home $total = luc_count_graph(luc_init_count_graph($graphdays, $pp), $graphdays, $pp, $where2, $where2, "feed=''", "feed<>''", $limitdate, $currentdate); } $maxxday = luc_maxxday($total, $graphdays, $pp); $px = luc_pixel($total, $graphdays, $maxxday, $pp, $action); if ($url->urlrequested == '') { $out_url = "[Page]: Home"; } else { $out_url = luc_post_title_Decode($permalink . $url->post_name); } // Overhead of the graph, display the name of the post/page and the average by day of the visitors echo "<div class='wrap' >\n\t\t\t\t<table class='widefat' >\n\t\t\t\t\t<thead>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<th scope='col' width='15%'>\n\t\t\t\t\t\t\t\t<div style='background:{$visitors_color};width:10px;height:10px;float:left;margin-top:2px;margin-right:5px;'></div>" . $total->totalvisitors . " visitors\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t<th scope='col' width='15%'>\n\t\t\t\t\t\t\t\t<div style='background:{$visitors_color};width:10px;height:10px;float:left;margin-top:2px;margin-right:5px;'></div>Average " . round($total->totalvisitors / $graphdays, 1) . " by day\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t<th scope='col' width='70%'>\n\t\t\t\t\t\t\t\t<font font-size='1'>" . $out_url . "</font>\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t</table>\n\t\t\t\t<table class='graph'>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>"; luc_graph($px, $total, $graphdays, $pp, $action); echo "\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>"; } luc_print_pp_pa_link($NP, $pp, $action, $NA, $pa); echo "</div>"; luc_StatPressV_load_time(); }
function luc_ValueTable($fld, $fldtitle, $limit = 0, $param = "", $queryfld = "", $exclude = "") { global $wpdb; $table_name = STATPRESS_V_TABLE_NAME; if ($queryfld == '') { $queryfld = $fld; } echo "<div class='wrap'>\r\n\t\t\t\t<table class='widefat'>\r\n\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<th scope='col' style='width:400px;'><h2>{$fldtitle}</h2></th>\r\n\t\t\t\t\t\t<th scope='col' style='width:100px;'>" . __('Visits', 'statpress') . "</th>\r\n\t\t\t\t\t\t<th></th></tr>\r\n\t\t\t\t\t</thead>"; $rks = $wpdb->get_var("SELECT count({$param} {$queryfld}) as rks\r\n\t\t\t\t\t\t\t\tFROM {$table_name}\r\n\t\t\t\t\t\t\t\t{$exclude};"); if ($rks > 0) { $sql = "SELECT count({$param} {$queryfld}) as pageview, {$fld}\r\n\t\t\t\t\t\tFROM {$table_name}\r\n\t\t\t\t\t\t{$exclude}\r\n\t\t\t\t\t\tGROUP BY {$fld} ORDER BY pageview DESC"; if ($limit > 0) { $sql = $sql . " LIMIT {$limit}"; } $qry = $wpdb->get_results($sql . ";"); $tdwidth = 450; // Collects data $data = array(); foreach ($qry as $rk) { $pc = round($rk->pageview * 100 / $rks, 1); if ($fld == 'country') { $rk->{$fld} = strtoupper($rk->{$fld}); } if ($fld == 'date') { $rk->{$fld} = luc_hdate($rk->{$fld}); } if ($fld == 'urlrequested') { $rk->{$fld} = luc_post_title_Decode($rk->{$fld}); } $data[substr($rk->{$fld}, 0, 50)] = $rk->pageview; } } // Draw table body echo "<tbody id='the-list'>"; if ($rks > 0) { // Chart! if ($fld == 'country') { $chart = luc_GoogleGeo("", "", $data); } else { $chart = luc_GoogleChart("", "500x200", $data); } echo "<tr><td></td><td></td><td rowspan='" . ($limit + 2) . "'>{$chart}</td></tr>"; foreach ($data as $key => $value) { echo "<tr>"; if ($fld == 'ip') { echo "\t<td style='width:500px;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;'>" . luc_create_href($key, 'ip') . "</td>"; } else { echo "\t<td style='width:500px;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;'>" . $key . "</td>"; } echo "\t<td style='width:100px;text-align:center;'>" . $value . "</td>"; echo "</tr>"; } } echo "</tbody></table></div><br>"; }
function luc_StatPressV_TopPosts($limit = 5, $numdays = 0, $showcounts = 'checked', $showpages = 'checked') { global $wpdb; $table_name = STATPRESS_V_TABLE_NAME; $res = "\n<ul>\n"; if ($numdays == 0) { // All dates chosen, default to epoch $stopdate = date('Ymd', strtotime('1970-01-01')); } else { if ($numdays < 0) { // Negative number of days, no change $stopdate = date('Ymd', strtotime($numdays . 'days')); } else { // Invert sign $numdays = $numdays * -1; $stopdate = date('Ymd', strtotime($numdays . 'days')); } } if (strtolower($showpages) == 'checked') { $type = "(post_type = 'page' OR post_type = 'post')"; } else { $type = "post_type = 'post'"; } $qry_s = "SELECT post_name, COUNT(*) as total, urlrequested\r\n\t\t\t\t\t\tFROM {$wpdb->posts} as p\r\n\t\t\t\t\t\tJOIN {$table_name} as t\r\n\t\t\t\t\t\tON urlrequested LIKE CONCAT('%', p.post_name, '_' )\r\n\t\t\t\t\t\tWHERE post_status = 'publish'\r\n\t\t\t\t\t\t\tAND {$type}\r\n\t\t\t\t\t\t\tAND spider=''\r\n\t\t\t\t\t\t\tAND feed=''\r\n\t\t\t\t\t\t\tAND date >= {$stopdate}\r\n\t\t\t\t\t\tGROUP BY post_name\r\n\t\t\t\t\t\tORDER BY total DESC LIMIT {$limit};"; $qry = $wpdb->get_results($qry_s); foreach ($qry as $rk) { $res .= "<li><a href='" . luc_GetBlogURL() . (strpos($rk->urlrequested, 'index.php') === FALSE ? $rk->urlrequested : '') . "'>" . luc_post_title_Decode($rk->post_name) . "</a>"; if (strtolower($showcounts) == 'checked') { $res .= " (" . $rk->total . ")</li>"; } } return "{$res}</ul>\n"; }
function luc_yesterday() { global $wpdb, $StatPressV_Option; $table_name = STATPRESS_V_TABLE_NAME; $action = "yesterday"; $visitors_color = "#114477"; $rss_visitors_color = "#FFF168"; $pageviews_color = "#3377B6"; $rss_pageviews_color = "#f38f36"; $spider_color = "#83b4d8"; $yesterday = gmdate('Ymd', current_time('timestamp') - 86400); $pa = luc_page_posts(); $permalink = luc_permalink(); $strqry = "SELECT post_name\r\n\t\t\t\tFROM {$wpdb->posts}\r\n\t\t\t\tWHERE post_status = 'publish'\r\n\t\t\t\t\tAND (post_type = 'page' OR post_type = 'post')\r\n\t\t\t\t\tAND DATE_FORMAT(post_date_gmt, '%Y%m%d') <= {$yesterday};"; $qry_posts = $wpdb->get_results($strqry); $NumberPosts = $wpdb->num_rows; $NumberDisplayPost = 100; $NA = ceil($NumberPosts / $NumberDisplayPost); $LimitValueArticles = ($pa - 1) * $NumberDisplayPost; foreach ($qry_posts as $p) { $posts[$p->post_name]['post_name'] = $p->post_name; $posts[$p->post_name]['visitors'] = NULL; $posts[$p->post_name]['visitors_feeds'] = NULL; $posts[$p->post_name]['pageviews'] = NULL; $posts[$p->post_name]['pageviews_feeds'] = NULL; $posts[$p->post_name]['spiders'] = NULL; } $posts['page_accueil']['post_name'] = 'page_accueil'; $posts['page_accueil']['visitors'] = NULL; $posts['page_accueil']['visitors_feeds'] = NULL; $posts['page_accueil']['pageviews'] = NULL; $posts['page_accueil']['pageviews_feeds'] = NULL; $posts['page_accueil']['spiders'] = NULL; $qry_visitors = requete_yesterday("DISTINCT ip", "urlrequested = ''", "spider = '' AND feed = ''", $yesterday); foreach ($qry_visitors as $p) { $posts[$p->post_name]['visitors'] = $p->total; $total_visitors += $p->total; } $qry_visitors_feeds = requete_yesterday("DISTINCT ip", "(urlrequested LIKE '%" . $permalink . "feed%' OR urlrequested LIKE '%" . $permalink . "comment%') ", "spider='' AND feed<>''", $yesterday); foreach ($qry_visitors_feeds as $p) { $posts[$p->post_name]['visitors_feeds'] = $p->total; $total_visitors_feeds += $p->total; } $qry_pageviews = requete_yesterday("ip", "urlrequested = ''", "spider = '' AND feed = ''", $yesterday); foreach ($qry_pageviews as $p) { $posts[$p->post_name]['pageviews'] = $p->total; $total_pageviews += $p->total; } $qry_pageviews_feeds = requete_yesterday("ip", "(urlrequested LIKE '%" . $permalink . "feed%' OR urlrequested LIKE '%" . $permalink . "comment%')", " spider='' AND feed<>''", $yesterday); foreach ($qry_pageviews_feeds as $p) { $posts[$p->post_name]['pageviews_feeds'] = $p->total; $total_pageviews_feeds += $p->total; } $spider = $StatPressV_Option['StatPressV_Dont_Collect_Spider']; if ($spider == '') { $qry_spiders = requete_yesterday("ip", "urlrequested=''", "spider<>'' AND feed=''", $yesterday); foreach ($qry_spiders as $p) { $posts[$p->post_name]['spiders'] = $p->total; $total_spiders += $p->total; } } $total_visitors = $wpdb->get_var("SELECT count(DISTINCT ip) AS total\r\n\t\t\tFROM {$table_name}\r\n\t\t\tWHERE feed=''\r\n\t\t\t\tAND spider=''\r\n\t\t\t\tAND date = {$yesterday} ;"); $total_visitors_feeds = $wpdb->get_var("SELECT count(DISTINCT ip) as total\r\n\t\t\tFROM {$table_name}\r\n\t\t\tWHERE feed<>''\r\n\t\t\t\tAND spider=''\r\n\t\t\t\tAND date = {$yesterday} ;"); echo "<div class='wrap'><h2>" . __('Yesterday ', 'statpressV') . gmdate('d M, Y', current_time('timestamp') - 86400) . "</div></br>"; luc_print_pp_pa_link(0, 0, $action, $NA, $pa); // Sort the results by total usort($posts, "luc_posts_pages_custom_sort"); echo "<table class='widefat'>\r\n\t<thead><tr>\r\n\t<th scope='col'>" . __('URL', 'statpressV') . "</th>\r\n\t<th scope='col'><div style='background:{$visitors_color};width:10px;height:10px;float:left;margin-top:4px;margin-right:5px;'></div>" . __('Visitors', 'statpressV') . "<br /><font size=1></font></th>\r\n\t<th scope='col'><div style='background:{$rss_visitors_color};width:10px;height:10px;float:left;margin-top:4px;margin-right:5px;'></div>" . __('Visitors Feeds', 'statpressV') . "<br /><font size=1></font></th>\r\n\t<th scope='col'><div style='background:{$pageviews_color};width:10px;height:10px;float:left;margin-top:4px;margin-right:5px;'></div>" . __('Views', 'statpressV') . "<br /><font size=1></font></th>\r\n\t<th scope='col'><div style='background:{$rss_pageviews_color};width:10px;height:10px;float:left;margin-top:4px;margin-right:5px;'></div>" . __('Views Feeds', 'statpressV') . "<br /><font size=1></font></th>"; if ($spider == '') { echo "<th scope='col'><div style='background:{$spider_color};width:10px;height:10px;float:left;margin-top:4px;margin-right:5px;'></div>" . __('Spider', 'statpressV') . "<br /><font size=1></font></th>"; } echo "</tr></thead>"; echo "<tr>\r\n\t<th scope='col'>All URL</th>\r\n\t<th scope='col'>" . __($total_visitors, 'statpressV') . "</th>\r\n\t<th scope='col'>" . __($total_visitors_feeds, 'statpressV') . "</th>\r\n\t<th scope='col'>" . __($total_pageviews, 'statpressV') . "</th>\r\n\t<th scope='col'>" . __($total_pageviews_feeds, 'statpressV') . "</th>"; if ($spider == '') { echo "<th scope='col'>" . __($total_spiders, 'statpressV') . "</th>\r\n\t\t\t</tr>"; } $i = 0; foreach ($posts as $p) { if ($i >= $LimitValueArticles and $i < $LimitValueArticles + $NumberDisplayPost) { if ($p['post_name'] == 'page_accueil') { $out_url = "Page : Home"; } else { $out_url = $permalink . $p['post_name']; } echo "<tr>\r\n\t\t\t<td>" . luc_post_title_Decode(urldecode($out_url)) . "</td>"; echo "<td>" . $p['visitors'] . "</td>\r\n\t\t\t<td>" . $p['visitors_feeds'] . "</td>\r\n\t\t\t<td>" . $p['pageviews'] . "</td>\r\n\t\t\t<td>" . $p['pageviews_feeds'] . "</td>"; if ($spider == '') { echo "<td>" . $p['spiders'] . "</td>"; } echo "</tr>"; } $i++; } echo "</table>"; luc_print_pp_pa_link(0, 0, $action, $NA, $pa); luc_StatPressV_load_time(); }
function luc_spyvisitors() { global $wpdb; global $StatPressV_Option; $action = "spyvisitors"; $table_name = STATPRESS_V_TABLE_NAME; // number of IP or bot by page $LIMIT = $StatPressV_Option['StatPressV_SpyVisitor_IP_Per_Page'] ? $StatPressV_Option['StatPressV_SpyVisitor_IP_Per_Page'] : 20; $LIMIT_PROOF = $StatPressV_Option['StatPressV_SpyVisitor_Visits_Per_IP'] ? $StatPressV_Option['StatPressV_SpyVisitor_Visits_Per_IP'] : 20; $pp = luc_page_periode(); // Number of distinct ip (unique visitors) $NumIP = $wpdb->get_var("SELECT count(distinct ip)\n\t\t\t\t\t\t\t\t\tFROM {$table_name}\n\t\t\t\t\t\t\t\t\tWHERE spider='' ;"); $NP = ceil($NumIP / $LIMIT); $LimitValue = $pp * $LIMIT - $LIMIT; $sql = "SELECT *\n\t\t\t\t\tFROM {$table_name} as T1\n\t\t\t\t\tJOIN\n\t\t\t\t\t\t(SELECT max(id) as MaxId,ip\n\t\t\t\t\t\t\tFROM {$table_name}\n\t\t\t\t\t\t\tWHERE spider=''\n\t\t\t\t\t\t\tGROUP BY ip\n\t\t\t\t\t\t\tORDER BY MaxId DESC LIMIT {$LimitValue}, {$LIMIT}\n\t\t\t\t\t\t) as T2\n\t\t\t\t\tON T1.ip = T2.ip\n\t\t\t\t\tORDER BY MaxId DESC, id DESC;\n\t\t\t\t"; $qry = $wpdb->get_results($sql); if ($StatPressV_Option['StatPressV_Use_GeoIP'] == 'checked' & function_exists('geoip_open')) { // Open the database to read and save info if (file_exists(luc_GeoIP_dbname('city'))) { $gic = geoip_open(luc_GeoIP_dbname('city'), GEOIP_STANDARD); $geoip_isok = true; } } echo "<div class='wrap'><h2>" . __('Visitor Spy', 'statpress') . "</h2>"; ?> <script> function ttogle(thediv){ if (document.getElementById(thediv).style.display=="inline") { document.getElementById(thediv).style.display="none" } else {document.getElementById(thediv).style.display="inline"} } </script> <?php $MaxId = 0; $num_row = 0; // Add pagination luc_insert_pagination_options("spyvisitors", $NumIP, $LIMIT); luc_print_pp_link($NP, $pp, $action); echo '<table class="widefat" id="mainspytab" name="mainspytab" width="99%" border="0" cellspacing="0" cellpadding="4">'; foreach ($qry as $rk) { // Visitor Spy if ($MaxId != $rk->MaxId) { if ($geoip_isok === true) { $gir = GeoIP_record_by_addr($gic, $rk->ip); } echo "<thead><tr><th scope='colgroup' colspan='2'>"; if ($rk->country != '') { echo "HTTP country " . luc_HTML_IMG($rk->country, 'country', false); } else { echo "Hostip country <IMG SRC='http://api.hostip.info/flag.php?ip=" . $rk->ip . "' border=0 width=18 height=12> "; } if ($geoip_isok === true) { $lookupsvc = "GeoIP details"; } else { $lookupsvc = "Hostip details"; } echo "\t<strong><span><font size='2' color='#7b7b7b'> " . $rk->ip . " </font></span></strong>\n\t\t\t\t\t<span style='color:#006dca;cursor:pointer;border-bottom:1px dotted #AFD5F9;font-size:8pt;'\n\t\t\t\t\t\tonClick=ttogle('" . $rk->ip . "');>" . $lookupsvc . "</span></div>\n\t\t\t\t\t<div id='" . $rk->ip . "' name='" . $rk->ip . "'>"; if ($geoip_isok === true) { echo "\t<small><br>\n\t\t\t\t\t\t\tCountry: " . utf8_encode($gir->country_name) . " (" . $gir->country_code . ")<br>\n\t\t\t\t\t\t\tCity: " . utf8_encode($gir->city) . "<br>\n\t\t\t\t\t\t\tLatitude/Longitude: <a href='http://maps.google.com/maps?q=" . $gir->latitude . "+" . $gir->longitude . "' target='_blank' title='Lookup latitude/longitude location on Google Maps...'>" . $gir->latitude . " " . $gir->longitude . "</a>\n\t\t\t\t\t\t</small>"; } else { echo "\t<iframe style='overflow:hide;border:0px;width:100%;height:35px;font-family:helvetica;paddng:0;'\n\t\t\t\t\t\t\tscrolling='no' marginwidth=0 marginheight=0 src=http://api.hostip.info/get_html.php?ip=" . $rk->ip . ">\n\t\t\t\t\t\t</iframe>"; } echo "\t<small>\n\t\t\t\t\t\t<br>" . $rk->os . "\n\t\t\t\t\t\t<br>" . $rk->browser . "\n\t\t\t\t\t\t<br>" . gethostbyaddr($rk->ip) . "\n\t\t\t\t\t\t<br>" . $rk->agent . "\n\t\t\t\t\t</small></div></th></tr></thead><tbody>\n\t\t\t\t\t<script> document.getElementById('" . $rk->ip . "').style.display='none';</script>\n\t\t\t\t\t<tr>\n\t\t\t\t\t<td>" . luc_hdate($rk->date) . " " . $rk->time . "</td>\n\t\t\t\t\t<td>" . (isset($rk->post_title) ? $rk->post_title : luc_post_title_Decode(urldecode($rk->urlrequested))) . ""; if ($rk->searchengine != '') { echo "<br><small>arrived from <b>" . $rk->searchengine . "</b> searching <a target='_blank' href='" . $rk->referrer . "' >" . urldecode($rk->search) . "</a></small>"; } elseif ($rk->referrer != '' && strpos($rk->referrer, $home) === false) { echo "<br><small>arrived from <a target='_blank' href='" . $rk->referrer . "' >" . $rk->referrer . "</a></small>"; } echo "</div></td></tr>\n"; $MaxId = $rk->MaxId; $num_row = 1; } elseif ($num_row < $LIMIT_PROOF) { echo "<tr><td>" . luc_hdate($rk->date) . " " . $rk->time . "</td>\n\t\t\t\t\t\t<td>" . (isset($rk->post_title) ? $rk->post_title : luc_post_title_Decode(urldecode($rk->urlrequested))) . ""; if ($rk->searchengine != '') { echo "<br><small>arrived from <b>" . $rk->searchengine . "</b> searching <a target='_blank' href='" . $rk->referrer . "' >" . urldecode($rk->search) . "</a></small>"; } elseif ($rk->referrer != '' && strpos($rk->referrer, $home) === false) { echo "<br><small>arrived from <a target='_blank' href='" . $rk->referrer . "' >" . $rk->referrer . "</a></small>"; } $num_row += 1; echo "</td></tr></tbody>"; } } echo "</div></td></tr>\n</table>"; luc_print_pp_link($NP, $pp, $action); echo "</div>"; luc_StatPressV_load_time(); }
function luc_main_table_latest_spambots() { global $wpdb, $StatPressV_Option; $table_name = STATPRESS_V_TABLE_NAME; $querylimit = isset($_POST['spambotsrows']) ? $_POST['spambotsrows'] : $StatPressV_Option['StatPressV_Rows_Per_Latest']; ?> <table class='widefat' > <thead> <tr> <th scope='col'>Date</th> <th scope='col'>Time</th> <th scope='col'>IP</th> <th scope='col'></th> <th scope='col' width="30%">Page</th> <th scope='col' width="30%">Agent</th> </tr> </thead> <tbody> <?php $qry = $wpdb->get_results("SELECT date, time, ip, urlrequested, spider, agent\r\n\t\t\tFROM {$table_name}\r\n\t\t\tWHERE spider LIKE '%spam bot'\r\n\t\t\tORDER BY id DESC\r\n\t\t\tLIMIT {$querylimit};"); foreach ($qry as $rk) { echo "<tr>\r\n\t\t\t\t\t<td>" . luc_hdate($rk->date) . "</td>\r\n\t\t\t\t\t<td>" . $rk->time . "</td>\r\n\t\t\t\t\t<td>" . luc_create_href($rk->ip, 'ip') . "</td>\r\n\t\t\t\t\t<td>" . luc_HTML_IMG($rk->spider, 'spider', false) . "</td>\r\n\t\t\t\t\t<td>" . (isset($rk->post_title) ? $rk->post_title : luc_post_title_Decode(urldecode($rk->urlrequested))) . "</td>\r\n\t\t\t\t<td> " . $rk->agent . "</td>\r\n\t\t\t\t</tr>"; } ?> </tbody> </table> <?php if (isset($_POST['spambotsrows'])) { die; } }
function luc_spybot() { global $wpdb, $StatPressV_Option; $action = "spybot"; $table_name = STATPRESS_V_TABLE_NAME; $LIMIT = $StatPressV_Option['StatPressV_SpyBot_Bots_Per_Page']; $LIMIT_PROOF = $StatPressV_Option['StatPressV_SpyBot_Visits_Per_Bot']; if ($LIMIT == 0) { $LIMIT = 10; } if ($LIMIT_PROOF == 0) { $LIMIT_PROOF = 30; } $pa = luc_page_posts(); $LimitValue = $pa * $LIMIT - $LIMIT; // limit the search 7 days ago $day_ago = gmdate('Ymd', current_time('timestamp') - 7 * 86400); $MinId = $wpdb->get_var("SELECT min(id) as MinId\n\t\t\t\tFROM {$table_name}\n\t\t\t\tWHERE date > {$day_ago};"); // Number of distinct spiders after $day_ago $Num = $wpdb->get_var("SELECT count(distinct spider)\n\t\t\t\tFROM {$table_name}\n\t\t\t\tWHERE spider<>''\n\t\t\t\t\tAND id >{$MinId};"); $NA = ceil($Num / $LIMIT); echo "<div class='wrap'><h2>" . __('Bot Spy', 'statpress') . "</h2>"; // selection of spider, group by spider, order by most recently visit (last id in the table) $sql = "SELECT *\n\t\t\t\t\tFROM {$table_name} as T1\n\t\t\t\t\tJOIN\n\t\t\t\t\t\t(SELECT spider,max(id) as MaxId\n\t\t\t\t\t\t\tFROM {$table_name}\n\t\t\t\t\t\t\tWHERE spider<>''\n\t\t\t\t\t\t\tGROUP BY spider\n\t\t\t\t\t\t\tORDER BY MaxId\n\t\t\t\t\t\t\tDESC LIMIT {$LimitValue}, {$LIMIT}\n\t\t\t\t\t\t) as T2\n\t\t\t\t\tON T1.spider = T2.spider\n\t\t\t\t\tWHERE T1.id > {$MinId}\n\t\t\t\t\tORDER BY MaxId DESC, id DESC;\n\t\t\t\t"; $qry = $wpdb->get_results($sql); echo '<div align="center">'; luc_print_pp_pa_link(0, 0, $action, $NA, $pa); echo '</div><div align="left">'; ?> <script> function ttogle(thediv){ if (document.getElementById(thediv).style.display=="inline") { document.getElementById(thediv).style.display="none" } else {document.getElementById(thediv).style.display="inline"} } </script> <table class="widefat" id="mainspytab" name="mainspytab"> <div align='left'> <?php $spider = "robot"; $num_row = 0; foreach ($qry as $rk) { // Bot Spy if ($robot != $rk->spider) { echo "<div align='left'>\n\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr><th scope='colgroup' colspan='2'>"; $img = str_replace(" ", "_", strtolower($rk->spider)); $img = str_replace('.', '', $img) . ".png"; $lines = file(STATPRESS_V_PLUGIN_PATH . '/def/spider.dat'); foreach ($lines as $line_num => $spider) { list($title, $id) = explode("|", $spider); if ($title == $rk->spider) { break; } // break, the tooltip ($title) is found } echo "<IMG style='border:0px;height:16px;align:left;' alt='" . $title . "' title='" . $title . "' SRC='" . STATPRESS_V_PLUGIN_URL . '/images/spider/' . $img . "'>\n\t\t\t\t\t\t\t\t\t<span style='color:#006dca;cursor:pointer;border-bottom:1px dotted #AFD5F9;font-size:8pt;' onClick=ttogle('" . $img . "');>(more information)</span>\n\t\t\t\t\t\t\t\t\t<div id='" . $img . "' name='" . $img . "'><br /><small>" . $rk->ip . "</small><br><small>" . $rk->agent . "<br /></small></div>\n\t\t\t\t\t\t\t\t\t<script>document.getElementById('" . $img . "').style.display='none';</script>\n\t\t\t\t\t\t\t\t\t</th></tr></thead><tbody>\n\t\t\t\t\t\t\t\t\t<tr><td>" . luc_hdate($rk->date) . " " . $rk->time . "</td>\n\t\t\t\t\t\t\t\t\t<td>" . (isset($rk->post_title) ? $rk->post_title : luc_post_title_Decode(urldecode($rk->urlrequested))) . "</td></tr>"; $robot = $rk->spider; $num_row = 1; } else { if ($num_row < $LIMIT_PROOF) { echo "<tr>\n\t\t\t\t\t\t<td>" . luc_hdate($rk->date) . " " . $rk->time . "</td>\n\t\t\t\t\t\t<td>" . (isset($rk->post_title) ? $rk->post_title : luc_post_title_Decode(urldecode($rk->urlrequested))) . "</td></tr>"; $num_row += 1; } } echo "</div></td></tr>\n"; } echo "</tbody></table>"; luc_print_pp_pa_link(0, 0, $action, $NA, $pa); echo "</div>"; luc_StatPressV_load_time(); }
function luc_display_by_IP($ip) { global $wpdb; $table_name = STATPRESS_V_TABLE_NAME; $qry_s = "SELECT *\n\t\t\t\tFROM {$table_name}\n\t\t\t\tWHERE ip = '{$ip}'\n\t\t\t\tORDER BY id DESC\n\t\t\t\t"; $qry = $wpdb->get_results($qry_s); $num = $wpdb->num_rows; $qry_sa = "SELECT DISTINCT agent\n\t\t\t\tFROM {$table_name}\n\t\t\t\tWHERE ip = '{$ip}'\n\t\t\t\tORDER BY agent ASC ;\n\t\t\t\t"; $qrya = $wpdb->get_results($qry_sa); if ($_POST['markbot'] == 'Mark as spambot') { luc_BanBot('ip', $ip); } if ($_POST['banip'] == 'Ban IP address') { luc_BanIP($ip); } $text_OS = $StatPressV_Option['StatPressV_Dont_Show_OS_name'] != 'checked' ? true : false; $text_browser = $StatPressV_Option['StatPressV_Dont_Show_Browser_name'] != 'checked' ? true : false; $text = "Report for " . $ip . " "; ?> <form method=post> <div class='wrap'><table style="width:100%"><tr><td><h2> <?php _e($text); ?> </h2></td> <td width=50px align='right'> <input type=submit name=banip value='Ban IP address' > </td> </tr> </table> <table class='widefat'> <thead> <tr> <th scope='col' colspan='2'></th> </thead> <tbody> <tr> <td>Records in database:</td> <td> <?php _e($num); ?> </td> </tr> <tr> <td>Latest hit:</td> <td> <?php _e(luc_hdate($qry[0]->date) . " " . $qry[0]->time); ?> </td> </tr> <tr> <td>First hit:</td> <td> <?php _e(luc_hdate($qry[$num - 1]->date) . " " . $qry[$num - 1]->time); ?> </td> </tr> <tr> <td>User agent(s):</td> <td> <?php _e(luc_print_uas($qrya)); ?> </td> </tr> </tbody> </table> <?php $geoip = luc_GeoIP_get_data($ip); if ($geoip !== false) { ?> <table class='widefat'> <thead><tr><th scope='col' colspan='4'>GeoIP Information</th></tr></thead> <tbody> <tr> <td><strong>Country:</strong></td> <td> <?php _e($geoip['cn'] . " (" . $geoip['cc'] . ")"); ?> <IMG style='border:0px;height:16px;' alt='$cn' title='$cn' SRC=' <?php _e(STATPRESS_V_PLUGIN_URL . "/images/domain/" . strtolower($geoip['cc']) . '.png'); ?> '></td> <td><strong>Continent Code:</strong></td> <td> <?php _e($geoip['continent_code']); ?> </td> </tr> <tr> <td><strong>Region:</strong></td> <td> <?php _e($geoip['region']); ?> </td> <td><strong>Area Code: (USA Only)</strong></td> <td> <?php _e($geoip['area_code']); ?> </td> </tr> <tr> <td><strong>City:</strong></td> <td> <?php _e($geoip['city']); ?> </td> <td><strong>Postal Code: (USA Only)</strong></td> <td> <?php _e($geoip['postal_code']); ?> </td> </tr> <tr> <td><strong>Latitude/Longitude</strong></td> <td> <a href='http://maps.google.com/maps?q=<?php _e($geoip['latitude'] . "+" . $geoip['longitude']); ?> ' target='_blank' title='Lookup latitude/longitude location on Google Maps...'><?php _e($geoip['latitude'] . " " . $geoip['longitude']); ?> </a></td> <td><strong>Metro Code: (USA Only)</strong></td> <td> <?php _e($geoip['metro_code']); ?> </td> </tr> </tbody> </table> <?php } ?> <table class='widefat'> <thead> <tr> <th scope='col' colspan='6'>URLs Requested</th> </tr> </thead> <thead> <tr> <th scope='col'>Date</th> <th scope='col'>Time</th> <th scope='col'>OS</th> <th scope='col'>Browser</th> <th scope='col'>Agent</th> <th scope='col'>Referrer</th> <th scope='col'>URL Requested</th> </tr> </thead> <tbody> <?php foreach ($qry as $rk) { ?> <tr> <td> <?php _e(luc_hdate($rk->date)); ?> </td> <td> <?php _e($rk->time); ?> </td> <td> <?php _e(luc_HTML_IMG($rk->os, 'os', $text_OS)); ?> </td> <td> <?php _e(luc_HTML_IMG($rk->browser, 'browser', $text_browser)); ?> </td> <td> <?php _e($rk->agent); ?> </td> <td> <?php _e($rk->referrer); ?> </td> <td> <?php _e(luc_post_title_Decode($rk->urlrequested)); ?> </td> </tr> </tbody> <?php } ?> </table> </div> </form> <?php luc_StatPressV_load_time(); }