function date_table($_dt, $_title, $_n_loops, $_end_increment, $_dt_decrement, $_filters) { $config =& SlimStatConfig::get_instance(); $thead = array("first" => array(isset($config->i18n->fields[$_title]) ? $config->i18n->fields[$_title] : $_title), "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; } for ($i = 0; $i < $_n_loops; $i++) { $dt_start = SlimStat::to_server_time(strtotime(date("Y-m-d 00:00:00", $_dt))); $dt_end = SlimStat::to_server_time(strtotime(date("Y-m-d 23:59:59", $_dt + eval("return (" . $_end_increment . ");")))); $assoc = SlimStat::get_hits_visits_uniques($dt_start, $dt_end, $_filters); if ($assoc["hits"] > 0) { $row = array("first" => array(), "last" => array()); if (isset($_filters["filter_dt_start"]) && isset($_filters["filter_dt_end"]) && $dt_start == $_filters["filter_dt_start"] && $dt_end == $_filters["filter_dt_end"]) { $row["first"][] = "<em>" . SlimStat::date_period_label($dt_start, $dt_end) . "</em>"; } else { $str = "<a href=\"?"; $filters_copy = $_filters; $printed_show = false; if (sizeof($filters_copy) == 0 || sizeof($filters_copy) == 2 && isset($filters_copy["filter_dt_start"]) && isset($filters_copy["filter_dt_end"])) { if ($dt_start == $GLOBALS["today_dt_start"] && $dt_end == $GLOBALS["today_dt_end"]) { $str .= "show=today"; $printed_show = true; } elseif ($dt_start == $GLOBALS["thisweek_dt_start"] && $dt_end == $GLOBALS["thisweek_dt_end"]) { $str .= "show=thisweek"; $printed_show = true; } elseif ($dt_start == $GLOBALS["thismonth_dt_start"] && $dt_end == $GLOBALS["thismonth_dt_end"]) { $str .= "show=thismonth"; $printed_show = true; } } unset($filters_copy["filter_dt_start"]); unset($filters_copy["filter_dt_end"]); $str .= SlimStat::implode_assoc("=", "&", $filters_copy); if (!$printed_show) { $str .= (empty($filters_copy) ? "" : "&") . "filter_dt_start=" . $dt_start . "&filter_dt_end=" . $dt_end; } $str .= "\">" . SlimStat::date_period_label($dt_start, $dt_end) . "</a>"; $row["first"][] = $str; } $row["last"][] = $assoc["hits"]; if ($config->show_visits && !isset($_filters["filter_visit"])) { $row["last"][] = $assoc["visits"]; } if ($config->show_uniques) { $row["last"][] = $assoc["uniques"]; } $tbody[] = $row; } $_dt -= eval("return (" . $_dt_decrement . ");"); } return SlimStat::render_table($thead, $tbody, true); }
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; } }
function time_label($_dt, $_compared_to_dt = 0) { $usr_dt = SlimStat::to_user_time($_dt); if ($_compared_to_dt == 0) { if (strftime("%p", $usr_dt) == "") { return strftime("%H:%M", $usr_dt); } else { return preg_replace("/^0/", "", strtolower(strftime("%I:%M%p", $usr_dt))); } //return strftime( "%r", $usr_dt ); } elseif ($_dt >= SlimStat::to_server_time(strtotime(date("j M Y 00:00:00", SlimStat::to_user_time($_compared_to_dt))))) { return SlimStat::time_label($_dt); } else { return strftime("%e %b", $usr_dt); } }
</td><?php } ?> <?php if ($config->show_uniques) { ?> <td class="last"><?php print $hvu["uniques"]; ?> </td><?php } ?> </tr> <?php // last month $svr_dt_start = SlimStat::to_server_time(mktime(0, 0, 0, date("n", $usr_dt) - 1, 1, date("Y", $usr_dt))); $hvu = SlimStat::get_hits_visits_uniques($svr_dt_start, $svr_dt - 1); ?> <tr> <td><a href="?filter_dt_start=<?php print $dt_start; ?> &filter_dt_end=<?php print $dt - 1; ?> " title="<?php print $config->i18n->link_title('details_dt', 'DT', $config->i18n->date_periods['last_month']); ?> "><?php print ucfirst($config->i18n->date_periods["last_month"]); ?>
$filters["filter_" . $_GET["new_filter_field"]] = urlencode($_GET["new_filter_value"]); } ksort($filters); $today_dt_start = SlimStat::to_user_time(time()); $today_dt_start = SlimStat::to_server_time(mktime(0, 0, 0, date("n", $today_dt_start), date("d", $today_dt_start), date("Y", $today_dt_start))); $today_dt_end = SlimStat::to_user_time(time()); $today_dt_end = SlimStat::to_server_time(mktime(23, 59, 59, date("n", $today_dt_end), date("d", $today_dt_end), date("Y", $today_dt_end))); $thisweek_dt_start = SlimStat::to_user_time($today_dt_start); while (date("w", $thisweek_dt_start) != $config->week_start_day) { // move back to start of week $thisweek_dt_start = mktime(0, 0, 0, date("n", $thisweek_dt_start), date("d", $thisweek_dt_start) - 1, date("Y", $thisweek_dt_start)); } $thisweek_dt_end = SlimStat::to_server_time(mktime(23, 59, 59, date("n", $thisweek_dt_start), date("d", $thisweek_dt_start) + 6, date("Y", $thisweek_dt_start))); $thisweek_dt_start = SlimStat::to_server_time($thisweek_dt_start); $thismonth_dt_start = SlimStat::to_server_time(mktime(0, 0, 0, date("n", SlimStat::to_user_time(time())), 1, date("Y", SlimStat::to_user_time(time())))); $thismonth_dt_end = SlimStat::to_server_time(mktime(23, 59, 59, date("n", SlimStat::to_user_time(time())) + 1, 0, date("Y", SlimStat::to_user_time(time())))); if (isset($filters["filter_dt_start"]) && isset($filters["filter_dt_end"])) { $dt_start = min(intval($filters["filter_dt_start"]), intval($filters["filter_dt_end"])); $dt_end = max(intval($filters["filter_dt_start"]), intval($filters["filter_dt_end"])); if ($dt_start > 0 && $dt_end > 0) { $filters["filter_dt_start"] = $dt_start; $filters["filter_dt_end"] = $dt_end; if (!isset($_GET["show"]) && sizeof($filters) == 2) { if ($dt_start == $today_dt_start && $dt_end == $today_dt_end) { $_GET["show"] = "today"; } elseif ($dt_start == $thisweek_dt_start && $dt_end == $thisweek_dt_end) { $_GET["show"] = "thisweek"; } elseif ($dt_start == $thismonth_dt_start && $dt_end == $thismonth_dt_end) { $_GET["show"] = "thismonth"; } }