if (!list($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements) = $Cache->get_value('geodistribution')) { include_once(SERVER_ROOT.'/classes/charts.class.php'); $DB->query(' SELECT Code, Users FROM users_geodistribution'); $Data = $DB->to_array(); $Count = $DB->record_count() - 1; $CountryMinThreshold = Min($Count, 30); $CountryMax = ceil(log(Max(1, $Data[0][1])) / log(2)) + 1; $CountryMin = floor(log(Max(1, $Data[$CountryMinThreshold][1])) / log(2)); $CountryRegions = array('RS' => array('RS-KM')); // Count Kosovo as Serbia as it doesn't have a TLD foreach ($Data as $Key => $Item) { list($Country, $UserCount) = $Item; $Countries[] = $Country; $CountryUsers[] = number_format((((log($UserCount) / log(2)) - $CountryMin) / ($CountryMax - $CountryMin)) * 100, 2); $Rank[] = round((1 - ($Key / $Count)) * 100); if (isset($CountryRegions[$Country])) { foreach ($CountryRegions[$Country] as $Region) { $Countries[] = $Region; $Rank[] = end($Rank); } } } reset($Rank); for ($i = $CountryMin; $i <= $CountryMax; $i++) { $LogIncrements[] = Format::human_format(pow(2, $i)); } $Cache->cache_value('geodistribution', array($Countries, $Rank, $CountryUsers, $CountryMax, $CountryMin, $LogIncrements), 0); } if (!$ClassDistribution = $Cache->get_value('class_distribution')) { $DB->query(" SELECT p.Name, COUNT(m.ID) AS Users FROM users_main AS m JOIN permissions AS p ON m.PermissionID = p.ID WHERE m.Enabled = '1' GROUP BY p.Name ORDER BY Users DESC"); $ClassDistribution = $DB->to_array(); $Cache->cache_value('class_distribution', $ClassDistribution, 3600 * 24 * 14); } if (!$PlatformDistribution = $Cache->get_value('platform_distribution')) { $DB->query(" SELECT OperatingSystem, COUNT(UserID) AS Users FROM users_sessions GROUP BY OperatingSystem ORDER BY Users DESC"); $PlatformDistribution = $DB->to_array(); $Cache->cache_value('platform_distribution', $PlatformDistribution, 3600 * 24 * 14); } if (!$BrowserDistribution = $Cache->get_value('browser_distribution')) { $DB->query(" SELECT Browser, COUNT(UserID) AS Users FROM users_sessions GROUP BY Browser ORDER BY Users DESC"); $BrowserDistribution = $DB->to_array(); $Cache->cache_value('browser_distribution', $BrowserDistribution, 3600 * 24 * 14); } //Timeline generation if (!list($Labels, $InFlow, $OutFlow) = $Cache->get_value('users_timeline')) { $DB->query(" SELECT DATE_FORMAT(JoinDate,\"%b %Y\") AS Month, COUNT(UserID) FROM users_info GROUP BY Month ORDER BY JoinDate DESC LIMIT 1, 11"); $TimelineIn = array_reverse($DB->to_array()); $DB->query(" SELECT DATE_FORMAT(BanDate,\"%b %Y\") AS Month, COUNT(UserID) FROM users_info WHERE BanDate > 0 GROUP BY Month ORDER BY BanDate DESC LIMIT 1, 11"); $TimelineOut = array_reverse($DB->to_array()); $Labels = array(); foreach($TimelineIn as $Month) { list($Labels[], $InFlow[]) = $Month; } foreach($TimelineOut as $Month) { list(, $OutFlow[]) = $Month; } $Cache->cache_value('users_timeline', array($Labels, $InFlow, $OutFlow), mktime(0, 0, 0, date('n') + 1, 2)); //Tested: fine for Dec -> Jan } //End timeline generation View::show_header('Detailed User Statistics', 'chart'); ?>