'class="current"'); $stattype = $statstatus ? "'total', 'month', 'hour'" : ''; } else { $navstyle = array($type => 'class="current"'); $stattype = $type == 'agent' ? "'os', 'browser'" : ($type == 'views' ? "'week', 'hour'" : ''); } $stats_total = array(); if($stattype) { $query = $db->query("SELECT * FROM {$tablepre}stats WHERE type IN ($stattype) ORDER BY type"); while($stats = $db->fetch_array($query)) { switch($stats['type']) { case 'total': $stats_total[$stats['variable']] = $stats['count']; break; case 'os': $stats_os[$stats['variable']] = $stats['count']; if($stats['count'] > $maxos) { $maxos = $stats['count']; } break; case 'browser': $stats_browser[$stats['variable']] = $stats['count']; if($stats['count'] > $maxbrowser) { $maxbrowser = $stats['count']; } break; case 'month': $stats_month[$stats['variable']] = $stats['count']; if($stats['count'] > $maxmonth) { $maxmonth = $stats['count']; $maxmonth_year = intval($stats['variable'] / 100); $maxmonth_month = $stats['variable'] - $maxmonth_year * 100; } ksort($stats_month); break; case 'week': $stats_week[$stats['variable']] = $stats['count']; if($stats['count'] > $maxweek) { $maxweek = $stats['count']; $maxweek_day = $stats['variable']; } ksort($stats_week); break; case 'hour': $stats_hour[$stats['variable']] = $stats['count']; if($stats['count'] > $maxhour) { $maxhour = $stats['count']; $maxhourfrom = $stats['variable']; $maxhourto = $maxhourfrom + 1; } ksort($stats_hour); break; } } } $newstatvars = array(); if((empty($type) && empty($statstatus)) || (isset($type) && $type == 'posts')) { $maxmonthposts = $maxdayposts = 0; $stats_monthposts = $stats_dayposts = array(); $stats_dayposts['starttime'] = gmdate('Ymd', $timestamp - 86400 * 30); $db->query("DELETE FROM {$tablepre}statvars WHERE type='dayposts' AND variable<'$stats_dayposts[starttime]'"); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='monthposts' OR type='dayposts' ORDER BY variable"); while($variable = $db->fetch_array($query)) { $variable['type'] == 'monthposts' ? $stats_monthposts[$variable['variable']] = $variable['value'] : $stats_dayposts[$variable['variable']] = $variable['value']; } if(!isset($stats_monthposts['starttime'])) { $starttime = $db->result_first("SELECT MIN(dateline) FROM {$tablepre}posts"); $stats_monthposts['starttime'] = gmdate('Y-m-01', ($starttime ? $starttime : $timestamp)); $newstatvars[] = "'monthposts', 'starttime', '$stats_monthposts[starttime]'"; } for($dateline = strtotime($stats_monthposts['starttime']); $dateline < strtotime(gmdate('Y-m-01', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600)); $dateline += gmdate('t', $dateline + 86400 * 15) * 86400) { $month = gmdate('Ym', $dateline + $_DCACHE['settings']['timeoffset'] * 3600); if(!isset($stats_monthposts[$month])) { $stats_monthposts[$month] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE dateline BETWEEN $dateline AND $dateline+2592000 AND invisible='0'"); $newstatvars[] = "'monthposts', '$month', '$stats_monthposts[$month]'"; } if($stats_monthposts[$month] > $maxmonthposts) { $maxmonthposts = $stats_monthposts[$month]; } } for($dateline = strtotime($stats_dayposts['starttime']); $dateline < strtotime(gmdate('Y-m-d', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600)); $dateline += 86400) { $day = gmdate('Ymd', $dateline + $_DCACHE['settings']['timeoffset'] * 3600); if(!isset($stats_dayposts[$day])) { $stats_dayposts[$day] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE dateline BETWEEN $dateline AND $dateline+86400 AND invisible='0'"); $newstatvars[] = "'dayposts', '$day', '$stats_dayposts[$day]'"; } if($stats_dayposts[$day] > $maxdayposts) { $maxdayposts = $stats_dayposts[$day]; } } unset($stats_monthposts['starttime'], $stats_dayposts['starttime']); ksort($stats_dayposts); ksort($stats_monthposts); } if(empty($type)) { $newdatasql = ''; $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='main'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'main', 'lastupdate', '$timestamp'"; } if(isset($statvars['forums'])) { $forums = $statvars['forums']; } else { $forums = $db->result_first("SELECT COUNT(*) FROM {$tablepre}forums WHERE type IN ('forum', 'sub') AND status='1'"); $newstatvars[] = "'main', 'forums', '$forums'"; } if(isset($statvars['threads'])) { $threads = $statvars['threads']; } else { $threads = $db->result_first("SELECT COUNT(*) FROM {$tablepre}threads WHERE displayorder>='0'"); $newstatvars[] = "'main', 'threads', '$threads'"; } if(isset($statvars['posts']) && isset($statvars['runtime'])) { $posts = $statvars['posts']; $runtime = $statvars['runtime']; } else { $query = $db->query("SELECT COUNT(*), (MAX(dateline)-MIN(dateline))/86400 FROM {$tablepre}posts"); list($posts, $runtime) = $db->fetch_row($query); $newstatvars[] = "'main', 'posts', '$posts'"; $newstatvars[] = "'main', 'runtime', '$runtime'"; } if(isset($statvars['members'])) { $members = $statvars['members']; } else { $members = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members"); $newstatvars[] = "'main', 'members', '$members'"; } if(isset($statvars['postsaddtoday'])) { $postsaddtoday = $statvars['postsaddtoday']; } else { $postsaddtoday = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE dateline>='".($timestamp - 86400)."' AND invisible='0'"); $newstatvars[] = "'main', 'postsaddtoday', '$postsaddtoday'"; } if(isset($statvars['membersaddtoday'])) { $membersaddtoday = $statvars['membersaddtoday']; } else { $membersaddtoday = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members WHERE regdate>='".($timestamp - 86400)."'"); $newstatvars[] = "'main', 'membersaddtoday', '$membersaddtoday'"; } if(isset($statvars['admins'])) { $admins = $statvars['admins']; } else { $admins = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members WHERE adminid>'0'"); $newstatvars[] = "'main', 'admins', '$admins'"; } if(isset($statvars['memnonpost'])) { $memnonpost = $statvars['memnonpost']; } else { $memnonpost = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members WHERE posts='0'"); $newstatvars[] = "'main', 'memnonpost', '$memnonpost'"; } if(isset($statvars['hotforum'])) { $hotforum = unserialize($statvars['hotforum']); } else { $hotforum = $db->fetch_first("SELECT posts, threads, fid, name FROM {$tablepre}forums WHERE status='1' ORDER BY posts DESC LIMIT 1"); $newstatvars[] = "'main', 'hotforum', '".addslashes(serialize($hotforum))."'"; } if(isset($statvars['bestmem']) && isset($statvars['bestmemposts'])) { $bestmem = $statvars['bestmem']; $bestmemposts = $statvars['bestmemposts']; } else { $query = $db->query("SELECT author, COUNT(*) AS posts FROM {$tablepre}posts WHERE dateline>='$timestamp'-86400 AND invisible='0' AND authorid>'0' GROUP BY author ORDER BY posts DESC LIMIT 1"); list($bestmem, $bestmemposts) = $db->fetch_row($query); if($bestmem) { $bestmem = ''.addslashes($bestmem).''; } else { $bestmem = 'None'; $bestmemposts = 0; } $newstatvars[] = "'main', 'bestmem', '$bestmem'"; $newstatvars[] = "'main', 'bestmemposts', '$bestmemposts'"; } $mempost = $members - $memnonpost; @$mempostavg = sprintf ("%01.2f", $posts / $members); @$threadreplyavg = sprintf ("%01.2f", ($posts - $threads) / $threads); @$mempostpercent = sprintf ("%01.2f", 100 * $mempost / $members); @$postsaddavg = round($posts / $runtime); @$membersaddavg = round($members / $runtime); @$stats_total['visitors'] = $stats_total['members'] + $stats_total['guests']; @$pageviewavg = sprintf ("%01.2f", $stats_total['hits'] / $stats_total['visitors']); @$activeindex = round(($membersaddavg / $members + $postsaddavg / $posts) * 1500 + $threadreplyavg * 10 + $mempostavg * 1 + $mempostpercent / 10 + $pageviewavg); if($statstatus) { $statsbar_month = statsdata('month', $maxmonth, 'ksort'); } else { $statsbar_monthposts = statsdata('monthposts', $maxmonthposts); $statsbar_dayposts = statsdata('dayposts', $maxdayposts); } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_main'); } elseif($type == 'posts' || ($statstatus && in_array($type, array('views', 'agent')))) { switch($type) { case 'views': $statsbar_week = statsdata('week', $maxweek); $statsbar_hour = statsdata('hour', $maxhour); break; case 'agent': $statsbar_browser = statsdata('browser', $maxbrowser, 'arsort'); $statsbar_os = statsdata('os', $maxos, 'arsort'); break; case 'posts': $statsbar_monthposts = statsdata('monthposts', $maxmonthposts); $statsbar_dayposts = statsdata('dayposts', $maxdayposts); break; } updatenewstatvars(); include template('stats_misc'); } elseif($type == 'threadsrank') { $threadsrank = ''; $threadview = $threadreply = array(); $query = $db->query("SELECT views, tid, subject FROM {$tablepre}threads WHERE displayorder>='0' ORDER BY views DESC LIMIT 0, 20"); while($thread = $db->fetch_array($query)) { $thread['subject'] = cutstr($thread['subject'], 45); $threadview[] = $thread; } $query = $db->query("SELECT replies, tid, subject FROM {$tablepre}threads WHERE displayorder>='0' ORDER BY replies DESC LIMIT 0, 20"); while($thread = $db->fetch_array($query)) { $thread['subject'] = cutstr($thread['subject'], 50); $threadreply[] = $thread; } for($i = 0; $i < 20; $i++) { $bgclass = $i % 2 ? ' class="colplural"' : ''; $threadsrank .= "{$threadview[$i]['subject']} {$threadview[$i]['views']}\n". "{$threadreply[$i]['subject']}{$threadreply[$i]['replies']}\n"; } updatenewstatvars(); include template('stats_misc'); } elseif($type == 'forumsrank') { $forumsrank = array(); $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='forumsrank'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'forumsrank', 'lastupdate', '$timestamp'"; } $threads = $posts = $thismonth = $today = array(); if(isset($statvars['threads'])) { $threads = unserialize($statvars['threads']); } else { $statvars['forums'] = 0; $query = $db->query("SELECT fid, name, threads FROM {$tablepre}forums WHERE status='1' AND type<>'group' ORDER BY threads DESC LIMIT 0, 20"); while($forum = $db->fetch_array($query)) { $statvars['forums']++; $threads[] = $forum; } $newstatvars[] = "'forumsrank', 'threads', '".addslashes(serialize($threads))."'"; $newstatvars[] = "'forumsrank', 'forums', '$statvars[forums]'"; } $statvars['forums'] = $statvars['forums'] ? $statvars['forums'] : 20; if(isset($statvars['posts'])) { $posts = unserialize($statvars['posts']); } else { $query = $db->query("SELECT fid, name, posts FROM {$tablepre}forums WHERE status='1' AND type<>'group' ORDER BY posts DESC LIMIT 0, $statvars[forums]"); while($forum = $db->fetch_array($query)) { $posts[] = $forum; } $newstatvars[] = "'forumsrank', 'posts', '".addslashes(serialize($posts))."'"; } if(isset($statvars['thismonth'])) { $thismonth = unserialize($statvars['thismonth']); } else { $query = $db->query("SELECT DISTINCT(p.fid) AS fid, f.name, COUNT(pid) AS posts FROM {$tablepre}posts p LEFT JOIN {$tablepre}forums f USING (fid) WHERE dateline>='$timestamp'-86400*30 AND invisible='0' AND authorid>'0' GROUP BY p.fid ORDER BY posts DESC LIMIT 0, $statvars[forums]"); while($forum = $db->fetch_array($query)) { $thismonth[] = $forum; } $newstatvars[] = "'forumsrank', 'thismonth', '".addslashes(serialize($thismonth))."'"; } if(isset($statvars['today'])) { $today = unserialize($statvars['today']); } else { $query = $db->query("SELECT DISTINCT(p.fid) AS fid, f.name, COUNT(pid) AS posts FROM {$tablepre}posts p LEFT JOIN {$tablepre}forums f USING (fid) WHERE dateline>='$timestamp'-86400 AND invisible='0' AND authorid>'0' GROUP BY p.fid ORDER BY posts DESC LIMIT 0, $statvars[forums]"); while($forum = $db->fetch_array($query)) { $today[] = $forum; } $newstatvars[] = "'forumsrank', 'today', '".addslashes(serialize($today))."'"; } for($i = 0; $i < $statvars['forums']; $i++) { $bgclass = $i % 2 ? ' class="colplural"' : ''; @$forumsrank[0] .= $threads[$i]['name'] || $posts[$i]['name'] ? "{$threads[$i]['name']}{$threads[$i]['threads']}\n". "{$posts[$i]['name']}{$posts[$i]['posts']}\n" : ''; @$forumsrank[1] .= $thismonth[$i]['name'] || $today[$i]['name'] ? "{$thismonth[$i]['name']}{$thismonth[$i]['posts']}\n". "{$today[$i]['name']}{$today[$i]['posts']}\n" : ''; } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_misc'); } elseif($type == 'postsrank') { $postsrank = ''; $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='postsrank'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'postsrank', 'lastupdate', '$timestamp'"; } $posts = $digestposts = $thismonth = $today = array(); if(isset($statvars['posts'])) { $posts = unserialize($statvars['posts']); } else { $query = $db->query("SELECT username, uid, posts FROM {$tablepre}members ORDER BY posts DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $posts[] = $member; } $newstatvars[] = "'postsrank', 'posts', '".addslashes(serialize($posts))."'"; } if(isset($statvars['digestposts'])) { $digestposts = unserialize($statvars['digestposts']); } else { $query = $db->query("SELECT username, uid, digestposts FROM {$tablepre}members ORDER BY digestposts DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $digestposts[] = $member; } $newstatvars[] = "'postsrank', 'digestposts', '".addslashes(serialize($digestposts))."'"; } if(isset($statvars['thismonth'])) { $thismonth = unserialize($statvars['thismonth']); } else { $query = $db->query("SELECT DISTINCT(author) AS username, COUNT(pid) AS posts FROM {$tablepre}posts WHERE dateline>='$timestamp'-86400*30 AND invisible='0' AND authorid>'0' GROUP BY author ORDER BY posts DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $thismonth[] = $member; } $newstatvars[] = "'postsrank', 'thismonth', '".addslashes(serialize($thismonth))."'"; } if(isset($statvars['today'])) { $today = unserialize($statvars['today']); } else { $query = $db->query("SELECT DISTINCT(author) AS username, COUNT(pid) AS posts FROM {$tablepre}posts WHERE dateline >='$timestamp'-86400 AND invisible='0' AND authorid>'0' GROUP BY author ORDER BY posts DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $today[] = $member; } $newstatvars[] = "'postsrank', 'today', '".addslashes(serialize($today))."'"; } for($i = 0; $i < 20; $i++) { $bgclass = $i % 2 ? ' class="colplural"' : ''; @$postsrank .= "{$posts[$i]['username']} {$posts[$i]['posts']}\n". "{$digestposts[$i]['username']}{$digestposts[$i]['digestposts']}\n". "{$thismonth[$i]['username']}{$thismonth[$i]['posts']}\n". "{$today[$i]['username']}{$today[$i]['posts']}\n"; } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_misc'); } elseif($type == 'creditsrank') { $creditsrank = ''; $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='creditsrank'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'creditsrank', 'lastupdate', '$timestamp'"; } //ATTENTION: initialize the arrays first! $credits = $extendedcredits = array(); if(isset($statvars['credits'])) { $credits = unserialize($statvars['credits']); } else { $query = $db->query("SELECT username, uid, credits FROM {$tablepre}members ORDER BY credits DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $credits[] = $member; } $newstatvars[] = "'creditsrank', 'credits', '".addslashes(serialize($credits))."'"; } if(isset($statvars['extendedcredits'])) { $extendedcredits = unserialize($statvars['extendedcredits']); } else { foreach($extcredits as $id => $credit) { $query = $db->query("SELECT username, uid, extcredits$id AS credits FROM {$tablepre}members ORDER BY extcredits$id DESC LIMIT 0, 20"); while($member = $db->fetch_array($query)) { $extendedcredits[$id][] = $member; } } $newstatvars[] = "'creditsrank', 'extendedcredits', '".addslashes(serialize($extendedcredits))."'"; } if(is_array($extendedcredits)) { $extcreditfirst = 0;$extcreditkeys = $creditsrank = array(); foreach($extendedcredits as $key => $extendedcredit) { $max = $extendedcredit[0]['credits']; !$extcreditfirst && $extcreditfirst = $key; $extcreditkeys[] = $key; foreach($extendedcredit as $i => $members) { @$width = intval(370 * $members['credits'] / $max); $width += 2; $creditsrank[$key] .= "$members[username]\n". "
 
  $members[credits]\n"; } } $extcredit = empty($extcredit) || !in_array($extcredit, $extcreditkeys) ? $extcreditfirst : intval($extcredit); } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_misc'); } elseif($type == 'onlinetime' && $oltimespan) { $onlines = ''; $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='onlines'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'onlines', 'lastupdate', '$timestamp'"; } $total = $thismonth = array(); if(isset($statvars['total'])) { $total = unserialize($statvars['total']); } else { $query = $db->query("SELECT o.uid, m.username, o.total AS time FROM {$tablepre}onlinetime o LEFT JOIN {$tablepre}members m USING (uid) ORDER BY o.total DESC LIMIT 20"); while($online = $db->fetch_array($query)) { $online['time'] = round($online['time'] / 60, 2); $total[] = $online; } $newstatvars[] = "'onlines', 'total', '".addslashes(serialize($total))."'"; } if(isset($statvars['thismonth'])) { $thismonth = unserialize($statvars['thismonth']); } else { $dateline = strtotime(gmdate('Y-n-01', $timestamp)); $query = $db->query("SELECT o.uid, m.username, o.thismonth AS time FROM {$tablepre}onlinetime o, {$tablepre}members m WHERE o.uid=m.uid AND m.lastactivity>='$dateline' ORDER BY o.thismonth DESC LIMIT 20"); while($online = $db->fetch_array($query)) { $online['time'] = round($online['time'] / 60, 2); $thismonth[] = $online; } $newstatvars[] = "'onlines', 'thismonth', '".addslashes(serialize($thismonth))."'"; } for($i = 0; $i < 20; $i++) { $bgclass = $i % 2 ? ' class="colplural"' : ''; @$onlines .= "{$total[$i]['username']} {$total[$i]['time']}\n". "{$thismonth[$i]['username']}{$thismonth[$i]['time']}\n"; } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_onlinetime'); } elseif($type == 'team') { $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='team'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'team', 'lastupdate', '$timestamp'"; } $team = array(); if(isset($statvars['team'])) { $team = unserialize($statvars['team']); } else { $forums = $moderators = $members = $fuptemp = array(); $categories = array(0 => array('fid' => 0, 'fup' => 0, 'type' => 'group', 'name' => $bbname)); $uids = 0; $query = $db->query("SELECT fid, uid FROM {$tablepre}moderators WHERE inherited='0' ORDER BY displayorder"); while($moderator = $db->fetch_array($query)) { $moderators[$moderator['fid']][] = $moderator['uid']; $uids .= ','.$moderator['uid']; } if($oltimespan) { $oltimeadd1 = ', o.thismonth AS thismonthol, o.total AS totalol'; $oltimeadd2 = "LEFT JOIN {$tablepre}onlinetime o ON o.uid=m.uid"; } else { $oltimeadd1 = $oltimeadd2 = ''; } $totaloffdays = $totalol = $totalthismonthol = 0; $query = $db->query("SELECT m.uid, m.username, m.adminid, m.lastactivity, m.credits, m.posts $oltimeadd1 FROM {$tablepre}members m $oltimeadd2 WHERE m.uid IN ($uids) OR m.adminid IN (1, 2) ORDER BY m.adminid"); $admins = array(); while($member = $db->fetch_array($query)) { if($member['adminid'] == 1 || $member['adminid'] == 2) { $admins[] = $member['uid']; } $member['offdays'] = intval(($timestamp - $member['lastactivity']) / 86400); $totaloffdays += $member['offdays']; if($oltimespan) { $member['totalol'] = round($member['totalol'] / 60, 2); $member['thismonthol'] = gmdate('Yn', $member['lastactivity']) == gmdate('Yn', $timestamp) ? round($member['thismonthol'] / 60, 2) : 0; $totalol += $member['totalol']; $totalthismonthol += $member['thismonthol']; } $members[$member['uid']] = $member; $uids .= ','.$member['uid']; } $totalthismonthposts = 0; $query = $db->query("SELECT authorid, COUNT(*) AS posts FROM {$tablepre}posts WHERE dateline>=$timestamp-86400*30 AND authorid IN ($uids) AND invisible='0' GROUP BY authorid"); while($post = $db->fetch_array($query)) { $members[$post['authorid']]['thismonthposts'] = $post['posts']; $totalthismonthposts += $post['posts']; } $totalmodposts = $totalmodactions = 0; if($modworkstatus) { $starttime = gmdate("Y-m-1", $timestamp + $_DCACHE['settings']['timeoffset'] * 3600); $query = $db->query("SELECT uid, SUM(count) AS actioncount FROM {$tablepre}modworks WHERE dateline>='$starttime' GROUP BY uid"); while($member = $db->fetch_array($query)) { $members[$member['uid']]['modactions'] = $member['actioncount']; $totalmodactions += $member['actioncount']; } } $query = $db->query("SELECT fid, fup, type, name, inheritedmod FROM {$tablepre}forums WHERE status='1' ORDER BY type, displayorder"); while($forum = $db->fetch_array($query)) { $forum['moderators'] = count($moderators[$forum['fid']]); switch($forum['type']) { case 'group': $categories[$forum['fid']] = $forum; $forums[$forum['fid']][$forum['fid']] = $forum; $catfid = $forum['fid']; break; case 'forum': $forums[$forum['fup']][$forum['fid']] = $forum; $fuptemp[$forum['fid']] = $forum['fup']; $catfid = $forum['fup']; break; case 'sub': $forums[$fuptemp[$forum['fup']]][$forum['fid']] = $forum; $catfid = $fuptemp[$forum['fup']]; break; } if(!empty($moderators[$forum['fid']])) { $categories[$catfid]['moderating'] = 1; } } foreach($categories as $fid => $category) { if(empty($category['moderating'])) { unset($categories[$fid]); } } $team = array ( 'categories' => $categories, 'forums' => $forums, 'admins' => $admins, 'moderators' => $moderators, 'members' => $members, 'avgoffdays' => @($totaloffdays / count($members)), 'avgthismonthposts' => @($totalthismonthposts / count($members)), 'avgtotalol' => @($totalol / count($members)), 'avgthismonthol' => @($totalthismonthol / count($members)), 'avgmodactions' => @($totalmodactions / count($members)), ); $newstatvars[] = "'team', 'team', '".addslashes(serialize($team))."'"; } if(is_array($team)) { foreach($team['members'] as $uid => $member) { @$member['thismonthposts'] = intval($member['thismonthposts']); @$team['members'][$uid]['offdays'] = $member['offdays'] > $team['avgoffdays'] ? ''.$member['offdays'].'' : $member['offdays']; @$team['members'][$uid]['thismonthposts'] = $member['thismonthposts'] < $team['avgthismonthposts'] / 2 ? ''.$member['thismonthposts'].'' : $member['thismonthposts']; @$team['members'][$uid]['lastactivity'] = gmdate("$dateformat $timeformat", $member['lastactivity'] + $timeoffset * 3600); @$team['members'][$uid]['thismonthol'] = $member['thismonthol'] < $team['avgthismonthol'] / 2 ? ''.$member['thismonthol'].'' : $member['thismonthol']; @$team['members'][$uid]['totalol'] = $member['totalol'] < $team['avgtotalol'] / 2 ? ''.$member['totalol'].'' : $member['totalol']; @$team['members'][$uid]['modposts'] = $member['modposts'] < $team['avgmodposts'] / 2 ? ''.intval($member['modposts']).'' : intval($member['modposts']); @$team['members'][$uid]['modactions'] = $member['modactions'] < $team['avgmodactions'] / 2 ? ''.intval($member['modactions']).'' : intval($member['modactions']); } } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_team'); } elseif($type == 'modworks' && $modworkstatus) { $before = (isset($before) && $before > 0 && $before <= $maxmodworksmonths) ? intval($before) : 0 ; list($now['year'], $now['month'], $now['day']) = explode("-", gmdate("Y-n-j", $timestamp + $_DCACHE['settings']['timeoffset'] * 3600)); for($i = 0; $i <= $maxmodworksmonths; $i++) { $month = date("Y-m", mktime(0, 0, 0, $now['month'] - $i, 1, $now['year'])); if($i != $before) { $monthlinks[$i] = "$month"; } else { $thismonth = $month; $starttime = $month.'-01'; $endtime = date("Y-m-01", mktime(0, 0, 0, $now['month'] - $i + 1 , 1, $now['year'])); $daysofmonth = date("t", mktime(0, 0, 0, $now['month'] - $i , 1, $now['year'])); $monthlinks[$i] = "$month"; } } $expiretime = date('Y-m', mktime(0, 0, 0, $now['month'] - $maxmodworksmonths - 1, 1, $now['year'])); $daysofmonth = empty($before) ? $now['day'] : $daysofmonth; $mergeactions = array('OPN' => 'CLS', 'ECL' => 'CLS', 'UEC' => 'CLS', 'EOP' => 'CLS', 'UEO' => 'CLS', 'UDG' => 'DIG', 'EDI' =>'DIG', 'UED' => 'DIG', 'UST' => 'STK', 'EST' => 'STK', 'UES' => 'STK', 'DLP' => 'DEL', 'PRN' => 'DEL', 'UDL' => 'DEL', 'UHL' => 'HLT', 'EHL' => 'HLT', 'UEH' => 'HLT', 'SPL' => 'MRG', 'ABL' => 'EDT', 'RBL' => 'EDT'); if(!empty($uid)) { $member = $db->fetch_first("SELECT username FROM {$tablepre}members WHERE uid='$uid' AND adminid>'0'"); if(!$member) { showmessage('undefined_action'); } $modactions = $totalactions = array(); for($i = 1; $i <= $daysofmonth; $i++) { $modactions[sprintf("$thismonth-%02d", $i)] = array(); } $query = $db->query("SELECT * FROM {$tablepre}modworks WHERE uid='$uid' AND dateline>='{$starttime}' AND dateline<'$endtime'"); while($data = $db->fetch_array($query)) { if(isset($mergeactions[$data['modaction']])) { $data['modaction'] = $mergeactions[$data['modaction']]; } $modactions[$data['dateline']][$data['modaction']]['count'] += $data['count']; $modactions[$data['dateline']][$data['modaction']]['posts'] += $data['posts']; $totalactions[$data['modaction']]['count'] += $data['count']; $totalactions[$data['modaction']]['posts'] += $data['posts']; } } else { $modworksupdated = false; $variable = empty($before) ? 'thismonth' : $starttime; $members = $db->fetch_first("SELECT * FROM {$tablepre}statvars WHERE type='modworks' AND variable='$variable'"); if($members) { $members = unserialize($members['value']); if( !empty($before) || (($timestamp - $members['lastupdate'] < $statscachelife) && $members['thismonth'] == $starttime)) { $modworksupdated = true; } } if($modworksupdated) { if(empty($before)) { unset($members['lastupdate'], $members['thismonth']); } } else { $members = array(); $uids = $totalmodactions = 0; $query = $db->query("SELECT uid, username, adminid FROM {$tablepre}members WHERE adminid IN (1, 2, 3) ORDER BY adminid, uid"); while($member = $db->fetch_array($query)) { $members[$member['uid']] = $member; $uids .= ', '.$member['uid']; } $query = $db->query("SELECT uid, modaction, SUM(count) AS count, SUM(posts) AS posts FROM {$tablepre}modworks WHERE uid IN ($uids) AND dateline>='{$starttime}' AND dateline<'$endtime' GROUP BY uid, modaction"); while($data = $db->fetch_array($query)) { if(isset($mergeactions[$data['modaction']])) { $data['modaction'] = $mergeactions[$data['modaction']]; } $members[$data['uid']]['total'] += $data['count']; $totalmodactioncount += $data['count']; $members[$data['uid']][$data['modaction']]['count'] += $data['count']; $members[$data['uid']][$data['modaction']]['posts'] += $data['posts']; } $avgmodactioncount = @($totalmodactioncount / count($members)); foreach($members as $id => $member) { $members[$id]['totalactions'] = intval($members[$id]['totalactions']); $members[$id]['username'] = ($members[$id]['total'] < $avgmodactioncount / 2) ? (''.$members[$id]['username'].'') : ($members[$id]['username']); } if(!empty($before)) { $db->query("DELETE FROM {$tablepre}statvars WHERE type='modworks' AND variable<'$expiretime'", 'UNBUFFERED'); $db->query("DELETE FROM {$tablepre}modworks WHERE dateline<'{$expiretime}-01'", 'UNBUFFERED'); $newstatvars[] = "'modworks', '$starttime', '".addslashes(serialize($members))."'"; } else { $members['thismonth'] = $starttime; $members['lastupdate'] = $timestamp; $newstatvars[] = "'modworks', 'thismonth', '".addslashes(serialize($members))."'"; unset($members['lastupdate'], $members['thismonth']); } } } include language('modactions'); $bgarray = array(); foreach($modactioncode as $key => $val) { if(isset($mergeactions[$key])) { unset($modactioncode[$key]); } } $tdcols = count($modactioncode) + 1; $tdwidth = floor(90 / ($tdcols - 1)).'%'; updatenewstatvars(); include template('stats_misc'); } elseif($type == 'trade') { $statvars = array(); $query = $db->query("SELECT * FROM {$tablepre}statvars WHERE type='trade'"); while($variable = $db->fetch_array($query)) { $statvars[$variable['variable']] = $variable['value']; } if($timestamp - $statvars['lastupdate'] > $statscachelife) { $statvars = array('lastupdate' => $timestamp); $newstatvars[] = "'trade', 'lastupdate', '$timestamp'"; } if($statvars['tradesum']) { $tradesums = unserialize($statvars['tradesum']); } else { $query = $db->query("SELECT subject, tid, pid, seller, sellerid, sum(tradesum) as tradesum FROM {$tablepre}trades WHERE tradesum>0 GROUP BY sellerid ORDER BY tradesum DESC LIMIT 10"); while($data = $db->fetch_array($query)) { $tradesums[] = $data; } $newstatvars[] = "'trade', 'tradesums', '".addslashes(serialize($tradesums))."'"; } if($statvars['credittradesum']) { $credittradesums = unserialize($statvars['credittradesum']); } else { $query = $db->query("SELECT subject, tid, pid, seller, sellerid, sum(credittradesum) as credittradesum FROM {$tablepre}trades WHERE credittradesum>0 GROUP BY sellerid ORDER BY credittradesum DESC LIMIT 10"); while($data = $db->fetch_array($query)) { $credittradesums[] = $data; } $newstatvars[] = "'trade', 'credittradesum', '".addslashes(serialize($credittradesums))."'"; } if($statvars['totalitems']) { $totalitems = unserialize($statvars['totalitems']); } else { $query = $db->query("SELECT subject, tid, pid, seller, sellerid, sum(totalitems) as totalitems FROM {$tablepre}trades WHERE totalitems>0 GROUP BY sellerid ORDER BY totalitems DESC LIMIT 10"); while($data = $db->fetch_array($query)) { $totalitems[] = $data; } $newstatvars[] = "'trade', 'totalitems', '".addslashes(serialize($totalitems))."'"; } $lastupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $timeoffset * 3600); $nextupdate = gmdate("$dateformat $timeformat", $statvars['lastupdate'] + $statscachelife + $timeoffset * 3600); updatenewstatvars(); include template('stats_trade'); } else { showmessage('undefined_action', NULL, 'HALTED'); } function statsdata($type, $max, $sortfunc = '') { global $barno; $statsbar = ''; $sum = 0; $datarray = $GLOBALS["stats_$type"]; if(is_array($datarray)) { if($sortfunc) { eval("$sortfunc(\$datarray);"); } foreach($datarray as $count) { $sum += $count; } } else { $datarray = array(); } foreach($datarray as $variable => $count) { $barno ++; switch($type) { case $type == 'month' || $type == 'monthposts': $variable = substr($variable, 0, 4).'-'.substr($variable, -2); break; case 'dayposts': $variable = substr($variable, 0, 4).'-'.substr($variable, -4, 2).'-'.substr($variable, -2); break; case 'week': include language('misc'); $variable = $language['week_'.intval($variable)]; break; case 'hour': $variable = intval($variable); break; default: $variable = ' '.$variable; break; } @$width = intval(370 * $count / $max); @$percent = sprintf ("%01.1f", 100 * $count / $sum); $width = $width ? $width : '2'; $variable = $count == $max ? ''.$variable.'' : $variable; $count = '
 
  '.$percent.'% ('.$count.')'; $statsbar .= "$variable$count\n"; } return $statsbar; } function updatenewstatvars() { global $newstatvars, $db, $tablepre; if($newstatvars && $newdata = @implode('),(', $newstatvars)) { $db->query("REPLACE INTO {$tablepre}statvars (type, variable, value) VALUES ($newdata)"); } $newstatvars = array(); } ?>