/web/status.php
PHP | 592 lines | 493 code | 39 blank | 60 comment | 109 complexity | e2428271309730416cbd274137faea3f MD5 | raw file
Possible License(s): GPL-2.0
- <?php
- /*
- HLstatsX Community Edition - Real-time player and clan rankings and statistics
- Copyleft (L) 2008-20XX Nicholas Hastings (nshastings@gmail.com)
- http://www.hlxcommunity.com
-
- HLstatsX Community Edition is a continuation of
- ELstatsNEO - Real-time player and clan rankings and statistics
- Copyleft (L) 2008-20XX Malte Bayer (steam@neo-soft.org)
- http://ovrsized.neo-soft.org/
-
- ELstatsNEO is an very improved & enhanced - so called Ultra-Humongus Edition of HLstatsX
- HLstatsX - Real-time player and clan rankings and statistics for Half-Life 2
- http://www.hlstatsx.com/
- Copyright (C) 2005-2007 Tobias Oetzel (Tobi@hlstatsx.com)
-
- HLstatsX is an enhanced version of HLstats made by Simon Garner
- HLstats - Real-time player and clan rankings and statistics for Half-Life
- http://sourceforge.net/projects/hlstats/
- Copyright (C) 2001 Simon Garner
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- For support and installation notes visit http://www.hlxcommunity.com
- */
-
- define('IN_HLSTATS', true);
-
- foreach ($_SERVER as $key => $entry) {
- if ($key !== 'HTTP_COOKIE') {
- $search_pattern = array('/<script>/', '/<\/script>/', '/[^A-Za-z0-9.\-\/=:;_?#&~]/');
- $replace_pattern = array('', '', '');
- $entry = preg_replace($search_pattern, $replace_pattern, $entry);
-
- if ($key == 'PHP_SELF') {
- if ((strrchr($entry, '/') !== '/hlstats.php') &&
- (strrchr($entry, '/') !== '/ingame.php') &&
- (strrchr($entry, '/') !== '/show_graph.php') &&
- (strrchr($entry, '/') !== '/sig.php') &&
- (strrchr($entry, '/') !== '/sig2.php') &&
- (strrchr($entry, '/') !== '/index.php') &&
- (strrchr($entry, '/') !== '/status.php') &&
- (strrchr($entry, '/') !== '/top10.php') &&
- (strrchr($entry, '/') !== '/config.php') &&
- (strrchr($entry, '/') !== '/') &&
- ($entry !== '')) {
- header('Location: http://'.$_SERVER['HTTP_HOST'].'/hlstats.php');
- exit;
- }
- }
- $_SERVER[$key] = $entry;
- }
- }
-
- require('config.php');
- header('Content-Type: text/html; charset=utf-8');
-
- // Check PHP configuration
-
- if (version_compare(phpversion(), "4.1.0", "<"))
- {
- error("HLstats requires PHP version 4.1.0 or newer (you are running PHP version " . phpversion() . ").");
- }
-
- // do not report NOTICE warnings
- error_reporting(E_ALL ^ E_NOTICE);
-
- ///
- /// Classes
- ///
-
- // Load database classes
- require(INCLUDE_PATH . "/class_db.php");
- require(INCLUDE_PATH . "/functions.php");
-
- ////
- //// Initialisation
- ////
-
- $db_classname = 'DB_' . DB_TYPE;
- if ( class_exists($db_classname) )
- {
- $db = new $db_classname(DB_ADDR, DB_USER, DB_PASS, DB_NAME, DB_PCONNECT);
- }
- else
- {
- error('Database class does not exist. Please check your config.php file for DB_TYPE');
- }
-
- $g_options = getOptions();
-
- if (!isset($g_options['scripturl']))
- $g_options['scripturl'] = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : getenv('PHP_SELF');
-
- $g_options['scriptbase'] = str_replace('/status.php', '', $g_options['scripturl']);
-
- ////
- //// Main Config
- ////
-
- $game = 'css';
- if ((isset($_GET['game'])) && (is_string($_GET['game'])))
- $game = valid_request($_GET['game'], 0);
- $game_escaped = $db->escape($game);
- $server_id = '1';
- if ((isset($_GET['server_id'])) && (is_numeric($_GET['server_id'])))
- $server_id = valid_request($_GET['server_id'], 1);
- $width = '218';
- if ((isset($_GET['width'])) && (is_numeric($_GET['width'])))
- $width = valid_request($_GET['width'], 1);
- $body_color = 'ECF8FF';
- if ((isset($_GET['body_color'])) && (is_string($_GET['body_color'])))
- $body_color = valid_request($_GET['body_color'], 0);
- $background_color = 'ABCCD6';
- if (isset($_GET['bg_color']))
- $background_color = valid_request($_GET['bg_color'], 0);
- $color = '000000';
- if ((isset($_GET['color'])) && (is_string($_GET['color'])))
- $color = valid_request($_GET['color'], 0);
- $border_width = '1';
- if (isset($_GET['border_width']))
- $border_width = valid_request($_GET['border_width'], 1);
- $border_color = 'ABCCD6';
- if (isset($_GET['border_color']))
- $border_color = valid_request($_GET['border_color'], 0);
- $show_logo = '1';
- if ((isset($_GET['show_logo'])) && (is_string($_GET['show_logo'])))
- $show_logo = valid_request($_GET['show_logo'], 1);
- $small_fonts = '1';
- if ((isset($_GET['small_fonts'])) && (is_numeric($_GET['small_fonts'])))
- $small_fonts = valid_request($_GET['small_fonts'], 1);
- $server_name = '1';
- if ((isset($_GET['server_name'])) && (is_string($_GET['server_name'])))
- $server_name = valid_request($_GET['server_name'], 1);
- $server_url = '1';
- if ((isset($_GET['server_url'])) && (is_string($_GET['server_url'])))
- $server_url = valid_request($_GET['server_url'], 1);
- $map_image = '1';
- if ((isset($_GET['map_image'])) && (is_numeric($_GET['map_image'])))
- $map_image = valid_request($_GET['map_image'], 1);
- $show_summary = '1';
- if ((isset($_GET['show_summary'])) && (is_numeric($_GET['show_summary'])))
- $show_summary = valid_request($_GET['show_summary'], 1);
- $map_name = '1';
- if ((isset($_GET['map_name'])) && (is_numeric($_GET['map_name'])))
- $map_name = valid_request($_GET['map_name'], 1);
- $show_flags = '1';
- if ((isset($_GET['show_flags'])) && (is_numeric($_GET['show_flags'])))
- $show_flags = valid_request($_GET['show_flags'], 1);
- $show_players = '1';
- if ((isset($_GET['show_players'])) && (is_numeric($_GET['show_players'])))
- $show_players = valid_request($_GET['show_players'], 1);
- $show_teams = '1';
- if ((isset($_GET['show_teams'])) && (is_numeric($_GET['show_teams'])))
- $show_teams = valid_request($_GET['show_teams'], 1);
- $show_team_wins = '1';
- if ((isset($_GET['show_team_wins'])) && (is_numeric($_GET['show_team_wins'])))
- $show_team_wins = valid_request($_GET['show_team_wins'], 1);
- $show_map_wins = '1';
- if ((isset($_GET['show_map_wins'])) && (is_numeric($_GET['show_map_wins'])))
- $show_map_wins = valid_request($_GET['show_map_wins'], 1);
- $top_players = '10';
- if ((isset($_GET['top_players'])) && (is_numeric($_GET['top_players'])))
- $top_players = valid_request($_GET['top_players'], 1);
- $players_images = '1';
- if ((isset($_GET['players_images'])) && (is_numeric($_GET['players_images'])))
- $players_images = valid_request($_GET['players_images'], 1);
- $show_password = '';
- if ((isset($_GET['show_password'])) && (is_string($_GET['show_password'])))
- $show_password = valid_request($_GET['show_password'], 1);
-
- //// Entries
- $result = $db->query("
- SELECT
- IF(publicaddress != '', publicaddress, concat(address, ':', port)) AS addr,
- name,
- publicaddress,
- act_map,
- players,
- kills,
- headshots,
- map_started,
- act_players,
- max_players,
- map_ct_wins,
- map_ts_wins
- FROM
- hlstats_Servers
- WHERE
- serverId=$server_id");
- $server_data = $db->fetch_array($result);
-
- if ($small_fonts == 1)
- {
- $fsize = 'fSmall';
- }
- else
- {
- $fsize = 'fNormal';
- }
-
- if ($server_data['addr'] != '') {
- echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
- echo '<html>';
- echo '<head>';
- echo '<title>'.$g_options["sitename"].'</title>';
- echo '<style type="text/css">{margin:0px;padding:0px;}</style>';
- echo '<link rel="stylesheet" type="text/css" href="hlstats.css">';
- echo '<link rel="stylesheet" type="text/css" href="styles/'.$g_options['style'].'">';
- echo '</head>';
- echo '<body style="background:#'.$body_color.';color:#'.$color.';" class="'.$fsize.'">';
- echo '<table border="0" cellpadding="0" cellspacing="0" style="border:'.$border_width.'px solid #'.$border_color.';background:#'.$background_color.';color:#'.$color.';width:'.$width.'px;">';
-
- if ($show_logo == 1)
- {
- echo '<tr style="background-image:url('.IMAGE_PATH.'/icons/title-background.gif);"><td align="center" colspan="2" class="'.$fsize.'">';
- $logo = file_exists(IMAGE_PATH.'/icons/shorttitle-'.$game.'.png');
- if ($logo) {
- if ($server_name == 1)
- {
- echo '<a target="_blank" href="'.$g_options["siteurl"].'"><img src="'.IMAGE_PATH.'/icons/shorttitle-'.$game.'.png" style="width:'.$width.'px;border:0px;" alt="'.$g_options['sitename'].'" title="'.$g_options['sitename'].'" /></a>';
- }
- else
- {
- echo '<a target="_blank" href="'.$g_options["siteurl"].'"><img src="'.IMAGE_PATH.'/icons/shorttitle-'.$game.'.png" style="width:'.$width.'px;border:0px;" alt="'.$server_data['name'].'" title="'.$server_data['name'].'" /></a>';
- }
- }
- else
- {
- echo '<a target="_blank" href="http://www.hlxcommunity.com" style="display:block;"><img src="'.IMAGE_PATH.'/icons/title-short.png" style="width:'.$width.'px;border:0px;" alt="Realtime player statistics for Halflife2 Source Engine" title="Realtime player statistics for Halflife2 Source Engine" /></a>';
- }
- echo '</td></tr>';
- }
-
- if ($server_name == 1)
- {
- echo '<tr><td align="center" colspan="2" class="'.$fsize.'">';
- echo '<a target="_blank" href="'.$g_options['scriptbase'].'" title="View statistics"><b>'.$server_data['name'].'</b></a>';
- echo '</td></tr>';
- }
-
- if ($server_url == 1)
- {
- echo '<tr><td align="center" colspan="2" class="'.$fsize.'">';
- echo '<a href="steam://connect/'.$server_data['addr'].'" title="Connent to Server"><b>'.$server_data['addr'].'</b></a>';
- echo '</td></tr>';
- }
-
- if ($show_password != '')
- {
- echo '<tr><td align="center" colspan="2" class="'.$fsize.'">';
- echo '<b>Password: '.$show_password.'</b>';
- echo '</td></tr>';
- }
-
- if ($map_image == 1)
- {
- $mapimg = getImage("/games/{$game}/maps/{$server_data['act_map']}");
- if (!file_exists($mapimg['path'])) {
- $mapimg = getImage("/games/{$game}/maps/default");
- if (!file_exists($mapimg['path'])) {
- $mapimg = getImage("/nomap");
- }
- }
-
- echo '<tr><td align="center" colspan="2">';
- echo '<a target="_blank" href="'.$g_options['scriptbase'].'/hlstats.php?mode=mapinfo&map='.$server_data['act_map'].'&game='.$game.'"><img src="'.$mapimg['url'].'" style="width:'.$width.'px;border:0px" alt="'.$server_data['act_map'].'" title="'.$server_data['act_map'].'" /></a>';
- echo '</td></tr>';
- }
-
- if ($show_summary == 1)
- {
- echo '<tr><td align="left" style="padding-left:2px" class="'.$fsize.'">';
- echo 'Players:';
- echo '</td><td align="right" style="padding-right:2px;" class="'.$fsize.'">';
- echo number_format($server_data['players']);
- echo '</td></tr>';
-
- echo '<tr><td align="left" style="padding-left:2px" class="'.$fsize.'">';
- echo 'Kills:';
- echo '</td><td align="right" style="padding-right:2px;" class="'.$fsize.'">';
- echo number_format($server_data['kills']);
- echo '</td></tr>';
-
- if ($server_data['headshots'] > 0)
- {
- echo '<tr><td align="left" style="padding-left:2px" class="'.$fsize.'">';
- echo 'Headshots:';
- echo '</td><td align="right" style="padding-right:2px;" class="'.$fsize.'">';
- echo number_format($server_data['headshots']);
- echo '</td></tr>';
- }
- }
-
- if ($map_name == 1) {
- echo '<tr><td align="left" style="padding-left:2px" class="'.$fsize.'">';
- echo 'Map:';
- echo '</td><td align="right" style="padding-right:2px;" class="'.$fsize.'">';
- echo $server_data['act_map'];
- echo '</td></tr>';
- }
- $stamp = $server_data['map_started']==0?0:time() - $server_data['map_started'];
- $hours = sprintf("%02d", floor($stamp / 3600));
- $min = sprintf("%02d", floor(($stamp % 3600) / 60));
- $sec = sprintf("%02d", floor($stamp % 60));
- echo '<tr><td align="left" style="padding-left:2px" class="'.$fsize.'">';
- echo 'Map Time:';
- echo '</td><td align="right" style="padding-right:2px;" class="'.$fsize.'">';
- echo $hours.':'.$min.':'.$sec;
- echo '</td></tr>';
- echo '<tr><td align="left" style="padding-left:2px;border-bottom:1px solid #000000;" class="'.$fsize.'">';
- echo 'Online:';
- echo '</td><td align="right" style="padding-right:2px;border-bottom:1px solid #000000;" class="'.$fsize.'">';
- echo $server_data['act_players'].'/'.$server_data['max_players'];
- echo '</td></tr>';
-
- if ($show_players == 1)
- {
- echo '<tr><td colspan="2"><table width="100%" border="0" cellpadding="0" cellspacing="0">';
-
- unset($team_colors);
- $statsdata = $db->query("
- SELECT
- team,
- name,
- teamkills,
- teamdeaths,
- teamheadshots,
- teamping,
- teamskill,
- teamshots,
- teamhits,
- teamjointime,
- IFNULL(playerlist_bgcolor,'#D5D5D5') as playerlist_bgcolor,
- IFNULL(playerlist_color,'#050505') AS playerlist_color,
- IFNULL(playerlist_index, 99 ) AS playerlist_index
- FROM
- hlstats_Teams
- RIGHT JOIN
- (SELECT
- team,
- sum( kills ) AS teamkills,
- sum( deaths ) AS teamdeaths,
- sum( headshots ) AS teamheadshots,
- avg( ping /2 ) AS teamping,
- avg( skill ) AS teamskill,
- sum( shots ) AS teamshots,
- sum( hits ) AS teamhits,
- sum( unix_timestamp( NOW( ) ) - connected ) AS teamjointime
- FROM
- hlstats_Livestats
- WHERE
- server_id = $server_id
- AND connected >0
- GROUP BY
- team
- ORDER BY
- teamkills
- ) teaminfo
- ON
- code = team
- AND
- hlstats_Teams.game = '{$game_escaped}'
- ORDER BY
- playerlist_index
- LIMIT 0 , 30
- ");
-
- $teamdata = array();
- $playerdata = array();
- $teamno = 0;
-
- while ($thisteam = $db->fetch_array($statsdata))
- {
- $teamdata[$teamno] = $thisteam;
- $thisteam_escaped = $db->escape($thisteam['team']);
- $pldata = $db->query("
- SELECT
- player_id,
- name,
- kills,
- deaths,
- headshots,
- ping,
- skill,
- shots,
- hits,
- connected,
- skill_change,
- cli_flag
- FROM
- hlstats_Livestats
- WHERE
- server_id = $server_id
- AND team = '{$thisteam_escaped}'
- ORDER BY
- kills DESC
- ");
-
- while ($thisplayer = $db->fetch_array($pldata))
- {
- $playerdata[$teamno][] = $thisplayer;
- }
- $teamno++;
- }
- $curteam = 0;
-
- while (isset($teamdata[$curteam]))
- {
- $j=0;
- $thisteam = $teamdata[$curteam];
- $teamcolor = 'background:'.$thisteam['playerlist_bgcolor'].';color:'.$thisteam['playerlist_color'];
- $bordercolor = 'background:'.$$thisteam['playerlist_bgcolor'].';color:'.$thisteam['playerlist_color'].';border-top:1px '.$thisteam['playerlist_color'].' solid';
- $team_display_name = htmlspecialchars($thisteam['name']);
-
- while (isset($playerdata[$curteam][$j]))
- {
- $thisplayer = $playerdata[$curteam][$j];
- echo '<tr style="'.$teamcolor.'">';
- echo '<td align="left" width="85%" style="'.$teamcolor.';padding-left:3px;" class="'.$fsize.'">';
- if (isset($thisplayer))
- {
- if (strlen($thisplayer['name'])>50)
- {
- $thisplayer['name'] = substr($thisplayer['name'], 0, 50);
- }
- echo '<a target="_blank" style="color:'.$thisteam['playerlist_color'].';" href="'.$g_options['scriptbase'].'/hlstats.php?mode=playerinfo&player='.$thisplayer['player_id'].'" title="Player Details">';
- if ($show_flags == 1)
- {
- echo '<img src="'.getFlag($thisplayer['cli_flag']).'" alt="'.ucfirst(strtolower($thisplayer['cli_country'])).'" title="'.ucfirst(strtolower($thisplayer['cli_country'])).'"> ';
- }
- echo '<span style="vertical-align:middle;">'.htmlspecialchars($thisplayer['name'], ENT_COMPAT).'</span></a>';
- }
- else
- {
- echo ' ';
- }
- echo '</td>';
- echo '<td align="right" width="15%" style="'.$teamcolor.';padding-right:3px" class="'.$fsize.'">';
- if (isset($thisplayer))
- {
- echo $thisplayer['kills'];
- }
- else
- {
- echo ' ';
- }
- echo ' : ';
- if (isset($thisplayer))
- {
- echo $thisplayer['deaths'];
- }
- else
- {
- echo ' ';
- }
- echo '</td>';
- echo '</tr>';
- $j++;
- }
-
- if ($show_teams == 1)
- {
- if ($team_display_name)
- {
- echo '<tr style="'.$teamcolor.'">';
- echo '<td align="left" width="85%" style="'.$bordercolor.';'.$teamcolor.';padding-left:3px;" class="'.$fsize.'">';
- echo ' <b>'.$team_display_name.'</b>';
- if ($show_team_wins == 1) {
- if (($map_teama_wins > 0) || ($map_teamb_wins > 0))
- {
- echo ' ('.$map_teama_wins.' wins)';
- }
- }
- echo '</td>';
- echo '<td align="right" width="15%" style="'.$bordercolor.';'.$teamcolor.';padding-right:3px" class="'.$fsize.'">';
- if (count($teamdata[$curteam]) > 0)
- {
- echo $teamdata[$curteam]['teamkills'];
- }
- else
- {
- echo ' ';
- }
- echo ' : ';
- if (count($teamdata[$curteam]) > 0)
- {
- echo $teamdata[$curteam]['teamdeaths'];
- }
- else
- {
- echo ' ';
- }
- echo '</td>';
- echo '</tr>';
- }
- }
- $curteam++;
- }
- // these variables are not set - so removing it
- /*
- if ((count($teama_players) > 0) || (count($teamb_players) > 0))
- {
- if ($show_map_wins == 1) {
- echo '<tr><td align="center" colspan="2" class="'.$fsize.'">';
- echo '<span style="color:'.$teamcolor.';font-weight:bold;">'.$teama_display_name.' '.$server_data['map_ct_wins'].' </span><span style="color:black;">: </span><span style="color:'.$teamcolor.';font-weight:bold;">'.$server_data['map_ts_wins'].' '.$teamb_display_name.'</span>';
- echo '</td></tr>';
- }
- }
- */
- if (count($teamdata) == 0)
- {
- echo '<tr><td colspan="2" align="left" style="background:#EFEFEF;color:black" class="'.$fsize.'">';
- echo ' No Players';
- echo '</td></tr>';
- }
- echo '</table></td></tr>';
- }
-
- if ($top_players > 0)
- {
- $db->query("
- SELECT
- playerId,
- unhex(replace(hex(lastName), 'E280AE', '')) as lastName,
- flag,
- country,
- skill,
- IFNULL(kills/deaths, '-') AS kpd,
- IFNULL(ROUND((hits / shots * 100), 1), 0.0) AS acc
- FROM
- hlstats_Players
- WHERE
- game='{$game_escaped}'
- AND hideranking=0
- ORDER BY
- skill DESC,
- kpd DESC
- LIMIT 0,$top_players
- ");
- echo '<tr><td colspan="2"><table border="0" cellpadding="0" cellspacing="0" style="width:100%">';
- echo '<tr><td align="center" colspan="2" style="border:1px solid #000000;" class="'.$fsize.'">';
- echo '<b>TOP '.$top_players.' Players</b>';
- echo '</td></tr>';
-
- while ($player = $db->fetch_array())
- {
- echo '<tr><td align="left" width="85%" style="padding-left:2px" class="'.$fsize.'">';
- $cut_pos = 15;
- if ($small_fonts == 1)
- $cut_pos += 10;
- $display_name = $player['lastName'];
- if (strlen($player['lastName']) > $cut_pos)
- $display_name = substr($player['lastName'], 0, $cut_pos);
- echo '<a target="_blank" href="'.$g_options["scriptbase"].'/hlstats.php?mode=playerinfo&player='.$player['playerId'].'" title="Player Details">';
- if ($show_flags == 1)
- {
- if ($player['country'] == '')
- $player['country'] = 'Unknown Country';
- echo '<img src="'.getFlag($player['flag']).'" alt="'.ucfirst($player['country']).'" title="'.ucfirst($player['country']).'"> ';
- }
- else
- {
- if ($players_images == 1)
- {
- echo '<img src="'.IMAGE_PATH.'/player.gif" /> ';
- }
- }
- echo '<span style="vertical-align:middle;">'.htmlspecialchars($display_name, ENT_COMPAT).'</span></a>';
- echo '</td><td align="right" width="15%" style="padding-right:2px;" class="'.$fsize.'">';
- echo $player['skill'];
- echo '</td></tr>';
- }
- echo '</table></td></tr>';
- }
- echo '</table>';
- echo '</body>';
- echo '</html>';
- }
- ?>