function dt_table($_function, $_filters = array()) { $config =& SlimStatConfig::get_instance(); $col = SlimStat::my_esc($_function) . "(FROM_UNIXTIME(`dt`" . ($config->dt_offset_secs != 0 ? "+" . $config->dt_offset_secs : "") . "))"; $thead = array("first" => array(isset($config->i18n->fields[$col]) ? $config->i18n->fields[$col] : $col), "last" => array($config->i18n->hits)); $tbody = array(); if ($config->show_visits && !isset($_filters["filter_visit"])) { $thead["last"][] = $config->i18n->visits; } if ($config->show_uniques) { $thead["last"][] = $config->i18n->uniques; } $results = SlimStat::_get_table_data($col . " AS `col`", "", "`col`", "col", $_filters); foreach ($results as $result) { $row = array("first" => array(), "last" => array()); $row["first"][] = isset($config->i18n->name_lookups[$col]) && isset($config->i18n->name_lookups[$col][$result["col"]]) ? $config->i18n->name_lookups[$col][$result["col"]] : $result["col"]; $row["last"][] = $result["hits"]; if ($config->show_visits && !isset($_filters["filter_visit"])) { $row["last"][] = $result["visits"]; } if ($config->show_uniques) { $row["last"][] = $result["uniques"]; } $tbody[] = $row; } return SlimStat::render_table($thead, $tbody, true); }
function get_host($_ip, $_do_lookup) { $config =& SlimStatConfig::get_instance(); $query = "SELECT `remote_addr` FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "` WHERE `remote_ip`='" . SlimStat::my_esc($_ip) . "' AND `remote_addr`<>'' LIMIT 1"; $host = ""; if ($result = mysql_query($query)) { list($host) = mysql_fetch_row($result); } if ($host == "" && $config->show_hostnames == true && $_do_lookup == true) { if ((bool) ini_get("safe_mode") == false && !stristr(ini_get("disable_functions"), "shell_exec")) { if (class_exists("COM")) { // win32 $host = split("Name:", shell_exec("nslookup " . $_ip)); $host = isset($host[1]) ? trim(str_replace("\n" . "Address: " . $_ip, "", $host[1])) : $_ip; } else { // unix $host = shell_exec("host -W 1 " . $_ip); if (strstr($host, "not found") || strstr($host, "timed out") || strlen($host) == 0) { $host = ""; } else { $array = explode(" ", substr(trim($host), 0, -1)); $host = end($array); } } } else { $host = gethostbyaddr($_ip); } } if ($host != "") { $query = "UPDATE `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "` SET `remote_addr`='" . SlimStat::my_esc($host) . "' WHERE `remote_ip`='" . SlimStat::my_esc($_ip) . "'"; $result = mysql_query($query); return $host; } else { return $_ip; } }
function show_paths() { $config =& SlimStatConfig::get_instance(); // get max visit $query = "SELECT MAX(`visit`) FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "`"; if ($result = mysql_query($query)) { list($max_visit) = mysql_fetch_row($result); } $str = ""; // get requests $query = "SELECT * FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "` WHERE "; if (!$config->show_crawlers) { $query .= "`browser` != '" . SlimStat::my_esc($config->i18n->crawler) . "' AND "; } $query .= "`visit` >= " . ($max_visit - $config->rows); $query .= " ORDER BY `visit` DESC, `dt`"; if ($result = mysql_query($query)) { $prev_visit = 0; $visits = array(); $visit = array(); $pages = array(); while ($assoc = mysql_fetch_assoc($result)) { if ($assoc["visit"] != $prev_visit && !empty($visit)) { $visits[] = $visit; $visit = array(); } $visit[] = $assoc; $prev_visit = $assoc['visit']; } if (!empty($visit)) { $visits[] = $visit; } $str .= "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"; $str .= "<tr><th>" . $config->i18n->fields["remote_ip"] . "</th>"; $str .= "<th>" . $config->i18n->when . "</th>"; $str .= "<th>" . $config->i18n->fields["browser"] . "</th>"; $str .= "<th>" . $config->i18n->fields["platform"] . "</th>"; $str .= "<th>" . $config->i18n->fields["country"] . "</th></tr>\n"; $usr_today = SlimStat::to_user_time(time()); $svr_today = SlimStat::to_server_time(mktime(0, 0, 0, date("n", $usr_today), date("d", $usr_today), date("Y", $usr_today))); foreach ($visits as $visit) { $is_today = $visit[0]["dt"] >= $svr_today; $mindt = SlimStat::time_label($visit[0]["dt"]); $maxdt = SlimStat::time_label($visit[sizeof($visit) - 1]["dt"]); $str .= "<tr><td class=\"accent\">" . htmlentities(SlimStat::get_domain($visit[0]["remote_ip"])) . "</td>"; $str .= "<td class=\"accent\">"; if ($is_today) { $str .= $mindt == $maxdt ? $mindt : $mindt . "-" . $maxdt; } else { $str .= SlimStat::time_label($visit[0]["dt"], time()); } $str .= "</td>"; $str .= "<td class=\"accent\">" . htmlentities($visit[0]["browser"]); if ($visit[0]["version"] != $config->i18n->indeterminable) { $str .= " " . htmlentities($visit[0]["version"]); } $str .= "</td><td class=\"accent\">" . htmlentities($visit[0]["platform"]) . "</td>"; $str .= "<td class=\"accent\">" . htmlentities($visit[0]["country"]) . "</td></tr>\n"; $prev_dt = ""; foreach ($visit as $hit) { $str .= "<tr><td>"; $str .= "<a href=\"" . $hit["resource"] . "\" class=\"external\""; $str .= "\" title=\"" . $config->i18n->link_title("external", "FIELD", strtolower($config->i18n->fields["resource"])) . "\">"; $str .= "<img src=\"external.gif\" width=\"9\" height=\"9\" alt=\"\" /></a> "; $str .= "<a href=\"?filter_resource=" . urlencode($hit["resource"]); $str .= "\" title=\"" . $config->i18n->link_title("details_filtered", "FIELD", strtolower($config->i18n->fields["resource"])) . "\">"; if (isset($config->i18n->name_lookups["resource"][$hit["resource"]])) { $str .= SlimStat::truncate($config->i18n->name_lookups["resource"][$hit["resource"]], 53); } else { $str .= SlimStat::truncate($hit["resource"], 53); } $str .= "</a></td>"; $dt_label = SlimStat::time_label($hit["dt"]); if (!$is_today && $prev_dt == "" || $mindt != $maxdt && $dt_label != $prev_dt) { $str .= "<td>" . $dt_label . "</td>"; } else { $str .= "<td> </td>"; } $prev_dt = $dt_label; if ($hit["referer"] != "" && $hit["domain"] != SlimStat::trim_referer($_SERVER["SERVER_NAME"])) { $str .= "<td colspan=\"3\" class=\"last\">"; $str .= "<a href=\"?filter_domain=" . urlencode($hit["domain"]); $str .= "\" title=\"" . $config->i18n->link_title("details_filtered", "FIELD", strtolower($config->i18n->fields["domain"])) . "\""; $str .= ">" . htmlentities(SlimStat::truncate($hit["domain"], 30)) . "</a> "; $str .= "<a href=\"" . $hit["referer"] . "\" class=\"external\" rel=\"nofollow\""; $str .= "\" title=\"" . $config->i18n->link_title("external", "FIELD", strtolower($config->i18n->fields["referer"])) . "\">"; $str .= "<img src=\"external.gif\" width=\"9\" height=\"9\" alt=\"\" /></a>"; } else { $str .= "<td colspan=\"3\"> </td>"; } $str .= "</tr>\n"; } } $str .= "</table>\n"; return $str; } }
</tr> </table></div> </div> <?php } if ($config->show_modules["recent_resource"]) { print SlimStat::render_module($config->i18n->module_titles["recent_resource"], recent_table(array("href" => "resource", "title" => $config->show_hostnames ? "remote_addr" : "remote_ip", "display" => "resource"), $config->truncate_medium, "dt > " . $config->recent_threshold), "mediummodule"); } if ($config->show_modules["recent_referer"]) { print SlimStat::render_module($config->i18n->module_titles["recent_referer"], recent_table(array("href" => "referer", "title" => "resource", "display" => "domain"), $config->truncate, "dt > " . $config->recent_threshold . " AND referer NOT LIKE '%" . SlimStat::my_esc(SlimStat::trim_referer($_SERVER["SERVER_NAME"])) . "/%' AND referer NOT LIKE '%" . SlimStat::my_esc(SlimStat::trim_referer($_SERVER["SERVER_NAME"])) . "' AND referer != '' AND domain != ''")); } if ($config->show_modules["recent_searchterms"]) { print SlimStat::render_module($config->i18n->module_titles["recent_searchterms"], recent_table(array("href" => "referer", "title" => "resource", "display" => "searchterms"), $config->truncate, "dt > " . $config->recent_threshold . " AND searchterms != ''")); } if ($config->show_modules["unique_domain"]) { print SlimStat::render_module($config->i18n->module_titles["unique_domain"] . " <span><a href=\"rss.php?domain\">" . $config->i18n->feed . "</a></span>", unique_table(array("href" => "referer", "title" => "resource", "display" => "domain"), $config->truncate, "dt > " . $config->recent_threshold . " AND domain != '" . SlimStat::my_esc(SlimStat::trim_referer($_SERVER["SERVER_NAME"])) . "' AND domain != ''")); } if ($config->show_modules["unique_resource"]) { print SlimStat::render_module($config->i18n->module_titles["unique_resource"] . " <span><a href=\"rss.php?resource\">" . $config->i18n->feed . "</a></span>", unique_table(array("href" => "resource", "title" => $config->show_hostnames ? "remote_addr" : "remote_ip", "display" => "resource"), $config->truncate_medium, "dt > " . $config->recent_threshold), "mediummodule"); } } function recent_table($_cols, $_truncate, $_where_clause = "", $_filters = array()) { $config =& SlimStatConfig::get_instance(); $thead = array("first" => array(isset($config->i18n->fields[$_cols["display"]]) ? $config->i18n->fields[$_cols["display"]] : $_cols["display"]), "last" => array(" ", $config->i18n->when)); $tbody = array(); $col_query = is_array($_cols) ? array_merge($_cols, array("dt")) : array($_cols, "dt"); $results = SlimStat::_get_table_data($col_query, $_where_clause, implode(", ", $col_query), "dt", $_filters); foreach ($results as $result) { $display_value = $result[$_cols["display"]]; if (isset($config->i18n->name_lookups[$_cols["display"]])) {
<statstoday lastupdate="<?php echo date('g:ia'); ?> "> <totalhits><?php print isset($hvu["hits"]) ? $hvu["hits"] : "-"; ?> </totalhits> <visits><?php print isset($hvu["visits"]) ? $hvu["visits"] : "-"; ?> </visits> <uniquehits><?php print isset($hvu["uniques"]) ? $hvu["uniques"] : "-"; ?> </uniquehits> <recentreferrers> <?php $query = "SELECT referer, resource, domain, dt \n\t\t FROM " . SlimStat::my_esc($config->database) . "." . SlimStat::my_esc($config->stats) . "\n\t\t WHERE referer NOT LIKE '%" . SlimStat::my_esc(SlimStat::trim_referer($_SERVER["SERVER_NAME"])) . "%' AND \n\t\t\t\treferer!='' \n\t\t ORDER BY dt DESC \n\t\t LIMIT 0,7"; if ($result = mysql_query($query)) { while ($r = mysql_fetch_array($result)) { $when = SlimStat::time_label($r["dt"] + $config->dt_offset_secs, time()); $resource = $r["resource"] == "/" ? $config->i18n->homepage : $r["resource"]; print "<referrer time=\"" . $when . "\" url=\"" . htmlentities($r["referer"]) . "\">" . $r["domain"] . "</referrer>"; } } ?> </recentreferrers> </statstoday> </shortstat>
$hvu = SlimStat::get_hits_visits_uniques($dt, $dt_end); print ". "; // week $dt_end = mktime(date("H", $dt) - 1, 59, 59, date("n", $dt), date("d", $dt) + 7, date("Y", $dt)); $hvu = SlimStat::get_hits_visits_uniques($dt, $dt_end); print ". "; // month $dt_end = mktime(date("H", $dt) - 1, 59, 59, date("n", $dt) + 1, date("d", $dt), date("Y", $dt)); $hvu = SlimStat::get_hits_visits_uniques($dt, $dt_end); print ". "; } $dt += 60 * 60; $dt = strtotime(date("Y-m-d H:00:00", $dt)) - $config->dt_offset_secs; } print "done!</p>\n"; $query = "DELETE FROM `" . SlimStat::my_esc($config->database) . "`.`" . SlimStat::my_esc($config->stats) . "`"; $query .= " WHERE dt<" . $max_age; print $query; mysql_query($query); print "<p>" . mysql_affected_rows() . " entries deleted.</p>\n"; } else { $max_age = mktime(0, 0, 0, date("n"), date("d") - $config->max_data_age_days) - $config->dt_offset_secs; ?> <form method="post"> <input type="hidden" name="show" value="truncate" /> <p>If you want to delete all SlimStat data more than <?php print $config->max_data_age_days; ?> days old (before <?php print date("j M Y", $max_age); ?>