1 |
matthys |
18 |
<?php |
2 |
|
|
/* This file is part of BBClone (A PHP based Web Counter on Steroids) |
3 |
|
|
* |
4 |
matthys |
19 |
* SVN FILE $Id$ |
5 |
matthys |
18 |
* |
6 |
|
|
* Copyright (C) 2001-2013, the BBClone Team (see doc/authors.txt for details) |
7 |
|
|
* |
8 |
|
|
* This program is free software: you can redistribute it and/or modify |
9 |
|
|
* it under the terms of the GNU General Public License as published by |
10 |
|
|
* the Free Software Foundation, either version 3 of the License, or |
11 |
|
|
* (at your option) any later version. |
12 |
|
|
* |
13 |
|
|
* This program is distributed in the hope that it will be useful, |
14 |
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 |
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 |
|
|
* GNU General Public License for more details. |
17 |
|
|
* |
18 |
|
|
* See doc/copying.txt for details |
19 |
|
|
*/ |
20 |
|
|
|
21 |
|
|
/////////////////////// |
22 |
|
|
// Show Global Stats // |
23 |
|
|
/////////////////////// |
24 |
|
|
|
25 |
|
|
if(!defined("_BBC_PAGE_NAME")){define("_BBC_PAGE_NAME", "Show Global");} |
26 |
|
|
|
27 |
|
|
// START Time Measuring, load-time of the page (see config) |
28 |
|
|
$time = microtime(); |
29 |
|
|
$time = explode(' ', $time); |
30 |
|
|
$time = $time[1] + $time[0]; |
31 |
|
|
$start = $time; |
32 |
|
|
|
33 |
|
|
// Read constants |
34 |
|
|
if (is_readable("constants.php")) require_once("constants.php"); |
35 |
|
|
else exit("ERROR: Unable to open constants.php"); |
36 |
|
|
|
37 |
|
|
foreach (array($BBC_CONFIG_FILE, $BBC_LIB_PATH."selectlang.php", $BBC_ACCESS_FILE) as $i) { |
38 |
|
|
if (is_readable($i)) require_once($i); |
39 |
|
|
else exit(bbc_msg($i)); |
40 |
|
|
} |
41 |
|
|
|
42 |
|
|
// Functions to calculate Stats |
43 |
|
|
function bbc_histcalc($array) { |
44 |
|
|
$result = 0; |
45 |
|
|
|
46 |
|
|
if (is_array($array)) { |
47 |
|
|
foreach ($array as $val) $result += $val; |
48 |
|
|
} |
49 |
|
|
return $result; |
50 |
|
|
} |
51 |
|
|
|
52 |
|
|
function bbc_rank_head($cat, $i18n, $flag = 0) { |
53 |
|
|
global $translation; |
54 |
|
|
|
55 |
|
|
return "<table class=\"centerdata\">\n" |
56 |
|
|
."<tr>\n" |
57 |
|
|
."<td colspan=\"".(!empty($flag) ? 3 : 4)."\" class=\"label\">".sprintf($translation[$i18n], $cat)."</td>\n" |
58 |
|
|
."</tr>\n"; |
59 |
|
|
} |
60 |
|
|
|
61 |
|
|
function bbc_list_item($icon, $item, $item_score, $total_score) { |
62 |
|
|
global $BBC_IMAGES_PATH; |
63 |
|
|
|
64 |
|
|
return "<tr>\n" |
65 |
|
|
.(!empty($icon) ? "<td align=\"left\"><img src=\"".$BBC_IMAGES_PATH.$icon |
66 |
|
|
."\" class=\"icon\" alt=\"$item\" title=\"$item\" /> </td>\n" : "") |
67 |
|
|
."<td align=\"left\">$item </td>\n" |
68 |
|
|
."<td align=\"right\"> $item_score</td>\n" |
69 |
|
|
."<td align=\"right\"> ".sprintf("%.2f%%", (round(10000 * $item_score / $total_score) / 100))."</td>\n" |
70 |
|
|
."</tr>\n"; |
71 |
|
|
} |
72 |
|
|
|
73 |
|
|
function bbc_rank_sum($cat, $flag = 0) { |
74 |
|
|
global $translation; |
75 |
|
|
|
76 |
|
|
return "<tr>\n" |
77 |
|
|
.(!empty($flag) ? "" : "<td> </td>\n") |
78 |
|
|
."<td align=\"left\"><b>".$translation['gstat_total']."</b> </td>\n" |
79 |
|
|
."<td align=\"right\"> <b>$cat</b></td>\n" |
80 |
|
|
."</tr></table>\n"; |
81 |
|
|
} |
82 |
|
|
|
83 |
|
|
function bbc_refgen($ref) { |
84 |
|
|
global $translation; |
85 |
|
|
|
86 |
|
|
if ($ref == "not_specified") return "<i>".$translation['misc_ignored']."</i>"; |
87 |
|
|
$ref_name = (($slash = strpos($ref, "/")) !== false) ? substr($ref, 0, $slash) : $ref; |
88 |
|
|
|
89 |
|
|
return "<script type=\"text/javascript\">\n" |
90 |
|
|
."<!--\n" |
91 |
|
|
."document.write('<a href=\"http://$ref\" rel=\"nofollow\" title=\"$ref_name\">$ref_name<\/a>');\n" |
92 |
|
|
."-->\n" |
93 |
|
|
."</script>\n" |
94 |
|
|
."<noscript><span title=\"$ref_name\">$ref_name</span></noscript>\n"; |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
function bbc_sort_page_count($page_a, $page_b) { |
98 |
|
|
if ($page_a['count'] === $page_b['count']) return 0; |
99 |
|
|
return (($page_a['count'] > $page_b['count']) ? -1 : 1); |
100 |
|
|
} |
101 |
|
|
|
102 |
|
|
// Main functions to generate Stats |
103 |
|
|
function bbc_show_browser() { |
104 |
|
|
global $BBC_IMAGES_PATH, $BBC_LIB_PATH, $BBC_MAXBROWSER, $translation, $access; |
105 |
|
|
|
106 |
|
|
if (is_readable($BBC_LIB_PATH."browser.php")) require($BBC_LIB_PATH."browser.php"); |
107 |
|
|
else return bbc_msg($BBC_LIB_PATH."browser.php"); |
108 |
|
|
|
109 |
|
|
$browser_tab = isset($access['stat']['browser']) ? $access['stat']['browser'] : array(); |
110 |
|
|
|
111 |
|
|
for ($browser_total = 0; list(, $browser_score) = each($browser_tab); $browser_total += $browser_score); |
112 |
|
|
|
113 |
|
|
arsort($browser_tab); |
114 |
|
|
reset($browser_tab); |
115 |
|
|
|
116 |
|
|
$str = bbc_rank_head($BBC_MAXBROWSER, "gstat_browsers"); |
117 |
|
|
|
118 |
|
|
for ($k = 0; (list($browser_type, $browser_score) = each($browser_tab)) && ($k < $BBC_MAXBROWSER); $k++) { |
119 |
|
|
if (!isset($browser[$browser_type])) { |
120 |
|
|
$str.= bbc_list_item("browser/question.png", $browser_type, $browser_score, $browser_total, 'browser'); |
121 |
|
|
continue; |
122 |
|
|
} |
123 |
|
|
|
124 |
|
|
$browser[$browser_type]['title'] = str_replace("other", $translation['misc_other'], $browser[$browser_type]['title']); |
125 |
|
|
|
126 |
|
|
$str.= bbc_list_item("browser/".$browser[$browser_type]['icon'].".png", $browser[$browser_type]['title'], |
127 |
|
|
$browser_score, $browser_total, 'browser'); |
128 |
|
|
} |
129 |
|
|
|
130 |
|
|
$str .= bbc_rank_sum($browser_total); |
131 |
|
|
return $str; |
132 |
|
|
} |
133 |
|
|
|
134 |
|
|
function bbc_show_os() { |
135 |
|
|
global $BBC_IMAGES_PATH, $BBC_LIB_PATH, $BBC_MAXOS, $translation, $access; |
136 |
|
|
|
137 |
|
|
if (is_readable($BBC_LIB_PATH."os.php")) require($BBC_LIB_PATH."os.php"); |
138 |
|
|
else return bbc_msg($BBC_LIB_PATH."os.php"); |
139 |
|
|
|
140 |
|
|
$os_tab = isset($access['stat']['os']) ? $access['stat']['os'] : array(); |
141 |
|
|
|
142 |
|
|
for ($os_total = 0; list(, $os_score) = each($os_tab); $os_total += $os_score); |
143 |
|
|
|
144 |
|
|
arsort($os_tab); |
145 |
|
|
reset($os_tab); |
146 |
|
|
|
147 |
|
|
$str = bbc_rank_head($BBC_MAXOS, "gstat_operating_systems"); |
148 |
|
|
|
149 |
|
|
for ($k = 0; (list($os_type, $os_score) = each($os_tab)) && ($k < $BBC_MAXOS); $k++) { |
150 |
|
|
if (!isset($os[$os_type])) { |
151 |
|
|
$str.= bbc_list_item("os/question.png", $os_type, $os_score, $os_total, 'os'); |
152 |
|
|
continue; |
153 |
|
|
} |
154 |
|
|
|
155 |
|
|
$os[$os_type]['title'] = str_replace("other", $translation['misc_other'], $os[$os_type]['title']); |
156 |
|
|
|
157 |
|
|
$str .= bbc_list_item("os/".$os[$os_type]['icon'].".png", $os[$os_type]['title'], $os_score, $os_total, 'os'); |
158 |
|
|
} |
159 |
|
|
|
160 |
|
|
$str .= bbc_rank_sum($os_total); |
161 |
|
|
return $str; |
162 |
|
|
} |
163 |
|
|
|
164 |
|
|
function bbc_show_extension() { |
165 |
|
|
global $access, $BBC_IMAGES_PATH, $BBC_MAXEXTENSION, $extensions, $translation; |
166 |
|
|
|
167 |
|
|
$ext_tab = isset($access['stat']['ext']) ? $access['stat']['ext'] : array(); |
168 |
|
|
|
169 |
|
|
for ($ext_total = 0; list(, $ext_score) = each($ext_tab); $ext_total += $ext_score); |
170 |
|
|
|
171 |
|
|
arsort($ext_tab); |
172 |
|
|
reset($ext_tab); |
173 |
|
|
|
174 |
|
|
$str = bbc_rank_head($BBC_MAXEXTENSION, "gstat_extensions"); |
175 |
|
|
|
176 |
|
|
for ($k = 0; (list($ext, $ext_score) = each($ext_tab)) && ($k < $BBC_MAXEXTENSION); $k++) { |
177 |
|
|
if (isset($extensions[$ext])) $label = $extensions[$ext]; |
178 |
|
|
else $label = $ext; |
179 |
|
|
$str .= bbc_list_item("ext/".$ext.".png", $label, $ext_score, $ext_total, 'ext'); |
180 |
|
|
} |
181 |
|
|
|
182 |
|
|
$str .= bbc_rank_sum($ext_total); |
183 |
|
|
return $str; |
184 |
|
|
} |
185 |
|
|
|
186 |
|
|
function bbc_show_robot() { |
187 |
|
|
global $access, $BBC_IMAGES_PATH, $BBC_LIB_PATH, $BBC_MAXROBOT, $translation; |
188 |
|
|
|
189 |
|
|
if (is_readable($BBC_LIB_PATH."robot.php")) require($BBC_LIB_PATH."robot.php"); |
190 |
|
|
else return bbc_msg($BBC_LIB_PATH."robot.php"); |
191 |
|
|
|
192 |
|
|
$robot_tab = isset($access['stat']['robot']) ? $access['stat']['robot'] : array(); |
193 |
|
|
|
194 |
|
|
for ($robot_total = 0; list(,$robot_score) = each($robot_tab); $robot_total += $robot_score); |
195 |
|
|
|
196 |
|
|
arsort($robot_tab); |
197 |
|
|
reset($robot_tab); |
198 |
|
|
|
199 |
|
|
$str = bbc_rank_head($BBC_MAXROBOT, "gstat_robots"); |
200 |
|
|
|
201 |
|
|
for ($k = 0; (list($robot_type, $robot_score) = each($robot_tab)) && ($k < $BBC_MAXROBOT); $k++) { |
202 |
|
|
if (!isset($robot[$robot_type])) { |
203 |
|
|
$str.= bbc_list_item("robot/robot.png", $robot_type, $robot_score, $robot_total, 'robot'); |
204 |
|
|
continue; |
205 |
|
|
} |
206 |
|
|
|
207 |
|
|
$str .= bbc_list_item("robot/".$robot[$robot_type]['icon'].".png", $robot[$robot_type]['title'], $robot_score, $robot_total, 'robot'); |
208 |
|
|
} |
209 |
|
|
|
210 |
|
|
$str .= bbc_rank_sum($robot_total); |
211 |
|
|
return $str; |
212 |
|
|
} |
213 |
|
|
|
214 |
|
|
function bbc_show_top_hosts() { |
215 |
|
|
global $access, $BBC_MAXHOST; |
216 |
|
|
|
217 |
|
|
$host_tab = isset($access['host']) ? $access['host'] : array(); |
218 |
|
|
|
219 |
|
|
for ($host_total = 0; list(, $host_score) = each($host_tab); $host_total += $host_score); |
220 |
|
|
|
221 |
|
|
arsort($host_tab); |
222 |
|
|
reset($host_tab); |
223 |
|
|
|
224 |
|
|
$str = bbc_rank_head($BBC_MAXHOST, "gstat_hosts", 1); |
225 |
|
|
|
226 |
|
|
for ($k = 0; ($k < $BBC_MAXHOST) && (list($host_name, $host_score) = each($host_tab)); $k++) { |
227 |
|
|
$str .= bbc_list_item("", $host_name, $host_score, $host_total, 'hosts'); |
228 |
|
|
} |
229 |
|
|
|
230 |
|
|
$str .= bbc_rank_sum($host_total, 1); |
231 |
|
|
return $str; |
232 |
|
|
} |
233 |
|
|
|
234 |
|
|
function bbc_show_top_pages() { |
235 |
|
|
global $BBC_MAXPAGE, $translation, $access; |
236 |
|
|
|
237 |
|
|
$page_tab = isset($access['page']) ? $access['page'] : array(); |
238 |
|
|
|
239 |
|
|
for ($page_total = 0; list(, $page_elem) = each($page_tab); $page_total += $page_elem['count']); |
240 |
|
|
|
241 |
|
|
uasort($page_tab, "bbc_sort_page_count"); |
242 |
|
|
reset($page_tab); |
243 |
|
|
|
244 |
|
|
$str = bbc_rank_head($BBC_MAXPAGE, "gstat_pages", 1); |
245 |
|
|
|
246 |
|
|
for ($k = 0; (list($page_name, $page_elem) = each($page_tab)) && ($k < $BBC_MAXPAGE); $k++) { |
247 |
|
|
$page_name = ($page_name == "index") ? $translation['navbar_main_site'] : $page_name; |
248 |
|
|
|
249 |
|
|
$str .= bbc_list_item("", "<a href=\"".$page_elem['uri']."\">$page_name</a>", $page_elem['count'], $page_total, 'pages'); |
250 |
|
|
} |
251 |
|
|
|
252 |
|
|
$str .= bbc_rank_sum($page_total, 1); |
253 |
|
|
return $str; |
254 |
|
|
} |
255 |
|
|
|
256 |
|
|
function bbc_show_top_origins() { |
257 |
|
|
global $BBC_MAXORIGIN, $translation, $access; |
258 |
|
|
|
259 |
|
|
$referer_tab = isset($access['referer']) ? $access['referer'] : array(); |
260 |
|
|
|
261 |
|
|
for ($referer_total = 0; list(, $referer_score) = each($referer_tab); $referer_total += $referer_score); |
262 |
|
|
|
263 |
|
|
arsort($referer_tab); |
264 |
|
|
reset($referer_tab); |
265 |
|
|
|
266 |
|
|
$str = bbc_rank_head($BBC_MAXORIGIN, "gstat_origins", 1); |
267 |
|
|
|
268 |
|
|
for ($k = 0; ($k < $BBC_MAXORIGIN) && (list($referer_name, $referer_score) = each($referer_tab)); $k++) { |
269 |
|
|
$str .= bbc_list_item("", bbc_refgen($referer_name), $referer_score, $referer_total, 'origins'); |
270 |
|
|
} |
271 |
|
|
|
272 |
|
|
$str .= bbc_rank_sum($referer_total, 1); |
273 |
|
|
return $str; |
274 |
|
|
} |
275 |
|
|
|
276 |
|
|
function bbc_show_top_keys() { |
277 |
|
|
global $BBC_MAXKEY, $translation, $access; |
278 |
|
|
|
279 |
|
|
$key_tab = isset($access['key']) ? $access['key'] : array(); |
280 |
|
|
|
281 |
|
|
for ($key_total = 0; list(, $key_score) = each($key_tab); $key_total += $key_score); |
282 |
|
|
|
283 |
|
|
arsort($key_tab); |
284 |
|
|
reset($key_tab); |
285 |
|
|
|
286 |
|
|
$str = bbc_rank_head($BBC_MAXKEY, "gstat_keys", 1); |
287 |
|
|
|
288 |
|
|
for ($k = 0; ($k < $BBC_MAXKEY) && (list($key_name, $key_score) = each($key_tab)); $k++) { |
289 |
|
|
$str .= bbc_list_item("", $key_name, $key_score, $key_total, 'keys'); |
290 |
|
|
} |
291 |
|
|
|
292 |
|
|
$str .= bbc_rank_sum($key_total, 1); |
293 |
|
|
return $str; |
294 |
|
|
} |
295 |
|
|
|
296 |
|
|
function bbc_show_access() { |
297 |
|
|
global $translation, $access; |
298 |
|
|
|
299 |
|
|
return "<table class=\"center\">\n" |
300 |
|
|
."<tr>\n" |
301 |
|
|
."<td colspan=\"11\" class=\"label\">".$translation['gstat_accesses']."</td></tr>\n" |
302 |
|
|
."<tr>\n" |
303 |
|
|
."<td align=\"left\">".$translation['tstat_last_year']." </td>\n" |
304 |
|
|
."<td align=\"right\">".(!empty($access['time']['month']) ? bbc_histcalc($access['time']['month']) : "0") |
305 |
|
|
."</td>\n" |
306 |
|
|
."<td>".str_repeat(" ", 6)."</td>\n" |
307 |
|
|
."<td align=\"left\">".$translation['tstat_last_month']." </td>\n" |
308 |
|
|
."<td align=\"right\">".((!empty($access['time']['month'])) ? bbc_histcalc($access['time']['day']) : "0") |
309 |
|
|
."</td>\n" |
310 |
|
|
."<td>".str_repeat(" ", 6)."</td>\n" |
311 |
|
|
."<td align=\"left\">".$translation['tstat_last_week']." </td>\n" |
312 |
|
|
."<td align=\"right\">".(!empty($access['time']['wday']) ? bbc_histcalc($access['time']['wday']) : "0") |
313 |
|
|
."</td>\n" |
314 |
|
|
."<td>".str_repeat(" ", 6)."</td>\n" |
315 |
|
|
."<td align=\"left\">".$translation['tstat_last_day']." </td>\n" |
316 |
|
|
."<td align=\"right\">".(!empty($access['time']['wday']) ? bbc_histcalc($access['time']['hour']) : "0") |
317 |
|
|
."</td></tr>\n" |
318 |
|
|
."<tr>\n" |
319 |
|
|
."<td colspan=\"3\"> </td>\n" |
320 |
|
|
."<td align=\"left\"><b>".$translation['gstat_total_visits']."</b> "."</td>\n" |
321 |
|
|
."<td align=\"right\">" |
322 |
|
|
."<b>".(!empty($access['stat']['totalvisits']) ? $access['stat']['totalvisits'] : "0")."</b>" |
323 |
|
|
."</td>\n" |
324 |
|
|
."<td>".str_repeat(" ", 6)."</td>\n" |
325 |
|
|
."<td align=\"left\"><b>".$translation['gstat_total_unique']."</b> </td>\n" |
326 |
|
|
."<td align=\"right\">" |
327 |
|
|
."<b>".(!empty($access['stat']['totalcount']) ? $access['stat']['totalcount'] : "0")."</b>" |
328 |
|
|
."</td>\n" |
329 |
|
|
."<td colspan=\"3\"> </td>\n" |
330 |
|
|
."</tr></table>\n"; |
331 |
|
|
} |
332 |
|
|
|
333 |
|
|
// Generate page (with use of the functions above) |
334 |
|
|
echo $BBC_HTML->html_begin() |
335 |
|
|
.$BBC_HTML->topbar() |
336 |
|
|
// .$BBC_HTML->last_reset() |
337 |
|
|
."<table class=\"center\">\n" |
338 |
|
|
."<tr><td class=\"padding\">\n" |
339 |
|
|
."<table class=\"centerbox\">\n" |
340 |
|
|
."<tr>\n" |
341 |
|
|
."<td class=\"padding top\">\n" |
342 |
|
|
.bbc_show_browser() |
343 |
|
|
."</td>\n" |
344 |
|
|
."<td class=\"padding top\">\n" |
345 |
|
|
.bbc_show_os() |
346 |
|
|
."</td>\n" |
347 |
|
|
."<td class=\"padding top\">\n" |
348 |
|
|
.bbc_show_extension() |
349 |
|
|
."</td>\n"; |
350 |
|
|
|
351 |
|
|
if (!empty($BBC_IGNORE_BOTS) && ($BBC_IGNORE_BOTS == 2)) { |
352 |
|
|
echo "</tr></table>\n" |
353 |
|
|
."</td>\n"; |
354 |
|
|
} |
355 |
|
|
else { |
356 |
|
|
echo "<td class=\"padding top\">\n" |
357 |
|
|
.bbc_show_robot() |
358 |
|
|
."</td></tr></table>\n" |
359 |
|
|
."</td>\n"; |
360 |
|
|
} |
361 |
|
|
|
362 |
|
|
echo "</tr>\n" |
363 |
|
|
."<tr>\n" |
364 |
|
|
."<td class=\"padding\">\n" |
365 |
|
|
."<table class=\"centerbox\">\n" |
366 |
|
|
."<tr>\n" |
367 |
|
|
."<td class=\"padding top\">\n" |
368 |
|
|
.bbc_show_top_hosts() |
369 |
|
|
."</td>\n" |
370 |
|
|
."<td class=\"padding top\">\n" |
371 |
|
|
.bbc_show_top_pages() |
372 |
|
|
."</td>\n" |
373 |
|
|
."<td class=\"padding top\">\n" |
374 |
|
|
.bbc_show_top_origins() |
375 |
|
|
."</td>\n" |
376 |
|
|
."<td class=\"padding top\">\n" |
377 |
|
|
.bbc_show_top_keys() |
378 |
|
|
."</td></tr></table>\n" |
379 |
|
|
."</td></tr>\n" |
380 |
|
|
."<tr>\n" |
381 |
|
|
."<td class=\"padding\">\n" |
382 |
|
|
."<table class=\"centerbox\">\n" |
383 |
|
|
."<tr>\n" |
384 |
|
|
."<td class=\"padding\">\n" |
385 |
|
|
.bbc_show_access() |
386 |
|
|
."</td></tr></table>\n" |
387 |
|
|
."</td></tr></table>\n" |
388 |
|
|
.$BBC_HTML->copyright() |
389 |
|
|
.$BBC_HTML->topbar(0, 1); |
390 |
|
|
|
391 |
|
|
// END + DISPLAY Time Measuring, load-time of the page (see config) |
392 |
|
|
global $BBC_LOADTIME; |
393 |
|
|
|
394 |
|
|
if (!empty($BBC_LOADTIME)) { |
395 |
|
|
$time = microtime(); |
396 |
|
|
$time = explode(' ', $time); |
397 |
|
|
$time = $time[1] + $time[0]; |
398 |
|
|
$finish = $time; |
399 |
|
|
$total_time = round(($finish - $start), 4); |
400 |
|
|
echo "<div class=\"loadtime\">".$translation['generated'].$total_time.$translation['seconds']."</div>\n"; |
401 |
|
|
} |
402 |
|
|
|
403 |
|
|
// End of HTML |
404 |
|
|
echo $BBC_HTML->html_end() |
405 |
|
|
?> |