478 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			478 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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
 | |
| */
 | |
| 
 | |
| 
 | |
| 	
 | |
| 	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;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	define('IN_HLSTATS', true);
 | |
| 
 | |
| 	// Load database classes
 | |
| 	require ('config.php');
 | |
| 	require (INCLUDE_PATH . '/class_db.php');
 | |
| 	require (INCLUDE_PATH . '/functions.php');
 | |
| 	require (INCLUDE_PATH . '/functions_graph.php');
 | |
| 
 | |
| 	$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();
 | |
| 
 | |
| 	$width = 500;
 | |
| 	if ((isset($_GET['width'])) && (is_numeric($_GET['width'])))
 | |
| 		$width = valid_request($_GET['width'], 1);
 | |
| 	$server_id = 1;
 | |
| 	if ((isset($_GET['server_id'])) && (is_numeric($_GET['server_id'])))
 | |
| 		$server_id = valid_request($_GET['server_id'], 1);
 | |
| 	$height = 125;
 | |
| 	if ((isset($_GET['height'])) && (is_numeric($_GET['height'])))
 | |
| 		$height = valid_request($_GET['height'], 1);
 | |
| 	$player = 1;
 | |
| 	if ((isset($_GET['player'])) && (is_numeric($_GET['player'])))
 | |
| 		$player = valid_request($_GET['player'], 1);
 | |
| 	$game = "unset";
 | |
| 	if (isset($_GET['game']))
 | |
| 		$game = valid_request($_GET['game'], 0);
 | |
| 
 | |
| 	$game_escaped=$db->escape($game);
 | |
| 
 | |
| 	$bar_type = 0; // 0 == serverinfo last 100 entries
 | |
| 	// 1 == ?!
 | |
| 	// 2 == player trend history
 | |
| 	// 3 == masterserver load
 | |
| 
 | |
| 	if ((isset($_GET['type'])) && (is_numeric($_GET['type'])))
 | |
| 		$bar_type = valid_request($_GET['type'], 1);
 | |
| 
 | |
| 		
 | |
| 	$selectedStyle = (isset($_COOKIE['style']) && $_COOKIE['style']) ? $_COOKIE['style'] : $g_options['style'];
 | |
| 
 | |
| 	
 | |
| 	// Determine if we have custom nav images available
 | |
| 	$selectedStyle = preg_replace('/\.css$/','',$selectedStyle);
 | |
| 	
 | |
| 	$iconpath = IMAGE_PATH . "/icons";
 | |
| 	if (file_exists($iconpath . "/" . $selectedStyle)) {
 | |
| 		$iconpath = $iconpath . "/" . $selectedStyle;
 | |
| 	}		
 | |
| 
 | |
| 	$bg_color = array('red' => 171, 'green' => 204, 'blue' => 214);
 | |
| 	if ((isset($_GET['bgcolor'])) && (is_string($_GET['bgcolor'])))
 | |
| 		$bg_color = hex2rgb(valid_request($_GET['bgcolor'], 0));
 | |
| 
 | |
| 	$color = array('red' => 255, 'green' => 255, 'blue' => 255);
 | |
| 	if ((isset($_GET['color'])) && (is_string($_GET['color'])))
 | |
| 		$color = hex2rgb(valid_request($_GET['color'], 0));
 | |
| 
 | |
| 	$bg_id = $bg_color['red'] + $bg_color['green'] + $bg_color['blue'];
 | |
| 
 | |
| 	$server_load_type = 1;
 | |
| 	if ((isset($_GET['range'])) && (is_numeric($_GET['range'])))
 | |
| 		$server_load_type = valid_request($_GET['range'], 1);
 | |
| 
 | |
| 	switch ($server_load_type)
 | |
| 	{
 | |
| 		case 1:
 | |
| 			$avg_step = 1;
 | |
| 			$update_interval = IMAGE_UPDATE_INTERVAL;
 | |
| 			break;
 | |
| 		case 2:
 | |
| 			$avg_step = 7;
 | |
| 			$update_interval = 60 * 60 * 6; // 6 Hours
 | |
| 			break;
 | |
| 		case 3:
 | |
| 			$avg_step = 33;
 | |
| 			$update_interval = 60 * 60 * 12; // 12 Hours
 | |
| 			break;
 | |
| 		case 4:
 | |
| 			$avg_step = 400;
 | |
| 			$update_interval = 60 * 60 * 24; // 24 Hours
 | |
| 			break;
 | |
| 		default:
 | |
| 			$avg_step = 1;
 | |
| 			$update_interval = IMAGE_UPDATE_INTERVAL;
 | |
| 			break;
 | |
| 	}
 | |
| 
 | |
| 	if ($bar_type != 2)
 | |
| 	{
 | |
| 		$cache_image = IMAGE_PATH . '/progress/server_' . $width . '_' . $height . '_' . $bar_type . '_' . $game . '_' . $server_id . '_' . $bg_id . '_' . $server_load_type . '.png';
 | |
| 		if (file_exists($cache_image))
 | |
| 		{
 | |
| 			$file_timestamp = filemtime($cache_image);
 | |
| 			if ($file_timestamp + $update_interval > time())
 | |
| 			{
 | |
| 				if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
 | |
| 				{
 | |
| 					if ( strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) + $update_interval > time() )
 | |
| 					{
 | |
| 						header('HTTP/1.0 304 Not Modified');
 | |
| 						exit;
 | |
| 					}
 | |
| 				}
 | |
| 				$mod_date = date('D, d M Y H:i:s \G\M\T', $file_timestamp);
 | |
| 				header('Last-Modified:' . $mod_date);
 | |
| 				$image = imagecreatefrompng(IMAGE_PATH . '/progress/server_' . $width . '_' . $height . '_' . $bar_type . '_' . $game . '_' . $server_id . '_' . $bg_id . '_' . $server_load_type . '.png');
 | |
| 				imagepng($image);
 | |
| 				imagedestroy($image);
 | |
| 				exit;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	$legend_x = 0;
 | |
| 	$max_pos_y = array();
 | |
| 	// array("width" => $width, "height" => $height, "indent_x" => array(20, 20), "indent_y" => array(10,15))
 | |
| 	// defined: function drawItems($image, $bounds, $data_array, $max_index, $name, $dot, $make_grid, $write_timestamp, $write_legend, $color)
 | |
| 
 | |
| 	$image = imagecreatetruecolor($width, $height);
 | |
| 	imagealphablending($image, false);
 | |
| 
 | |
| 	if (function_exists('imageantialias'))
 | |
| 		imageantialias($image, true);
 | |
| 
 | |
| 
 | |
| 	// load bgimage if exists...
 | |
| 	$drawbg = true;
 | |
| 
 | |
| 	$normal_color = imagecolorallocate($image, 0xEF, 0xEF, 0xEF);
 | |
| 	$light_color = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
 | |
| 	$dark_color = imagecolorallocate($image, 0x99, 0xAA, 0xAA);
 | |
| 
 | |
| 	$font_color = imagecolorallocate($image, $color['red'], $color['green'], $color['blue']);
 | |
| 	$main_color = imagecolorallocate($image, $bg_color['red'], $bg_color['green'], $bg_color['blue']);
 | |
| 
 | |
| 	$blue = imagecolorallocate($image, 0, 0, 255);
 | |
| 	$black = imagecolorallocate($image, 0, 0, 0);
 | |
| 	$red = imagecolorallocate($image, 255, 0, 0);
 | |
| 	$white = imagecolorallocate($image, 255, 255, 255);
 | |
| 	$orange = imagecolorallocate($image, 255, 165, 0);
 | |
| 	$gray = imagecolorallocate($image, 105, 105, 105);
 | |
| 	$light_gray = imagecolorallocate($image, 0xEF, 0xEF, 0xEF);
 | |
| 	$green = imagecolorallocate($image, 255, 0, 255);
 | |
| 	$gray_border = imagecolorallocate($image, 0xE0, 0xE0, 0xE0);
 | |
| 
 | |
| 	if ($bar_type == 0)
 | |
| 	{
 | |
| 		$indent_x = array(30, 30);
 | |
| 		$indent_y = array(15, 15);
 | |
| 
 | |
| 		// background
 | |
| 		if ($drawbg)
 | |
| 		{
 | |
| 			imagefilledrectangle($image, 0, 0, $width, $height, $main_color); // background color
 | |
| 			imagerectangle($image, $indent_x[0], $indent_y[0], $width - $indent_x[1], $height - $indent_y[1], $dark_color);
 | |
| 			imagefilledrectangle($image, $indent_x[0] + 1, $indent_y[0] + 1, $width - $indent_x[1] - 1, $height - $indent_y[1] - 1, $light_color);
 | |
| 		}
 | |
| 
 | |
| 		$limit = '';
 | |
| 		if ($avg_step < 10)
 | |
| 			$limit = ' LIMIT 0, 2500';
 | |
| 
 | |
| 		// entries
 | |
| 		$data_array = array();
 | |
| 		$result = $db->query("SELECT timestamp, act_players, min_players, max_players, map, uptime, fps FROM hlstats_server_load WHERE server_id=$server_id ORDER BY timestamp DESC$limit");
 | |
| 		// TSGK
 | |
| 		$last_map = 0;
 | |
| 		// TSGK
 | |
| 
 | |
| 		$i = 0;
 | |
| 		$avg_values = array();
 | |
| 		while ($rowdata = $db->fetch_array($result))
 | |
| 		{
 | |
| 			$i++;
 | |
| 			$avg_values[] = array('timestamp' => $rowdata['timestamp'], 'act_players' => $rowdata['act_players'], 'min_players' => $rowdata['min_players'], 'max_players' => $rowdata['max_players'], 'uptime' => $rowdata['uptime'], 'fps' => $rowdata['fps'], 'map' => $rowdata['map']);
 | |
| 			
 | |
| 			if ($i == $avg_step)
 | |
| 			{
 | |
| 				$insert_values = array();
 | |
| 				$insert_values['timestamp'] = $avg_values[ceil($avg_step / 2) - 1]['timestamp'];
 | |
| 				$insert_values['act_players'] = 0;
 | |
| 				$insert_values['min_players'] = 0;
 | |
| 				$insert_values['max_players'] = 0;
 | |
| 				$insert_values['uptime'] = 0;
 | |
| 				$insert_values['fps'] = 0;
 | |
| 				$insert_values['map'] = "";
 | |
| 
 | |
| 				foreach ($avg_values as $entry)
 | |
| 				{
 | |
| 					$insert_values['act_players'] += $entry['act_players'];
 | |
| 					$insert_values['min_players'] += $entry['min_players'];
 | |
| 					$insert_values['max_players'] += $entry['max_players'];
 | |
| 					$insert_values['uptime'] += $entry['uptime'];
 | |
| 					$insert_values['fps'] += $entry['fps'];
 | |
| 					$insert_values['map'] = $entry['map'];
 | |
| 				}
 | |
| 				$insert_values['act_players'] = round($insert_values['act_players'] / $avg_step);
 | |
| 				$insert_values['uptime'] = round($insert_values['uptime'] / $avg_step);
 | |
| 				$insert_values['fps'] = round($insert_values['fps'] / $avg_step);
 | |
| 				$insert_values['min_players'] = round($insert_values['min_players'] / $avg_step);
 | |
| 				$insert_values['max_players'] = round($insert_values['max_players'] / $avg_step);
 | |
| 				$data_array[] = array('timestamp' => $insert_values['timestamp'], 'act_players' => $insert_values['act_players'], 'min_players' => $insert_values['min_players'], 'max_players' => $insert_values['max_players'], 'uptime' => $insert_values['uptime'], 'fps' => $insert_values['fps'], 'map' => $insert_values['map']);
 | |
| 				$avg_values = array();
 | |
| 				$i = 0;
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 		//print_r($data_array);
 | |
| 
 | |
| 		$last_map = '';
 | |
| 		if ($avg_step == 1)
 | |
| 		{
 | |
| 			$result = $db->query("SELECT act_players, max_players FROM hlstats_Servers WHERE serverId=$server_id");
 | |
| 			$rowdata = $db->fetch_array($result);
 | |
| 			$rowdata['uptime'] = 0;
 | |
| 			array_unshift($data_array, array('timestamp' => time(), 'act_players' => $rowdata['act_players'], 'min_players' => $data_array[0]['min_players'], 'max_players' => $rowdata['max_players'], 'uptime' => $rowdata['uptime'], 'fps' => $rowdata['uptime'], 'map' => $last_map));
 | |
| 		}
 | |
| 
 | |
| 		if (count($data_array) > 1)
 | |
| 		{
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'max_players', 0, 1, 0, 1, array($gray, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'min_players', 0, 0, 0, 1, array($dark_color, $red, $font_color, $dark_color));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'act_players', 0, 0, 1, 1, array($blue, $red, $font_color, $dark_color));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 2, 'uptime', 0, 0, 1, 1, array($orange, $red, $font_color, $dark_color));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 2, 'fps', 0, 0, 1, 1, array($red, $red, $font_color, $dark_color));
 | |
| 
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'max_players', 0, 1, 0, 0, array($gray, $red, $font_color, $dark_color, $light_gray));
 | |
| 		}
 | |
| 
 | |
| 		if ($width >= 800)
 | |
| 		{
 | |
| 			if ($avg_step == 1)
 | |
| 			{
 | |
| 				$result = $db->query("SELECT avg(act_players) as players FROM hlstats_server_load WHERE server_id=$server_id AND timestamp>=" . (time() - 3600));
 | |
| 				$rowdata = $db->fetch_array($result);
 | |
| 				$players_last_hour = sprintf("%.1f", $rowdata['players']);
 | |
| 
 | |
| 				$result = $db->query("SELECT avg(act_players) as players FROM hlstats_server_load WHERE server_id=$server_id AND timestamp>=" . (time() - 86400));
 | |
| 				$rowdata = $db->fetch_array($result);
 | |
| 				$players_last_day = sprintf("%.1f", $rowdata['players']);
 | |
| 
 | |
| 				$str = 'Average Players Last 24h: ' . $players_last_day . ' Last 1h: ' . $players_last_hour;
 | |
| 				$str_width = (imagefontwidth(1) * strlen($str)) + 2;
 | |
| 				imagestring($image, 1, $width - $indent_x[1] - $str_width, $indent_y[0] - 11, $str, $font_color);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	} elseif ($bar_type == 1)
 | |
| 	{
 | |
| 		$indent_x = array(35, 35);
 | |
| 		$indent_y = array(15, 15);
 | |
| 
 | |
| 		// background
 | |
| 		if ($drawbg)
 | |
| 		{
 | |
| 			imagefilledrectangle($image, 0, 0, $width, $height, $main_color); // background color
 | |
| 			imagerectangle($image, $indent_x[0], $indent_y[0], $width - $indent_x[1], $height - $indent_y[1], $dark_color);
 | |
| 			imagefilledrectangle($image, $indent_x[0] + 1, $indent_y[0] + 1, $width - $indent_x[1] - 1, $height - $indent_y[1] - 1, $light_color);
 | |
| 		}
 | |
| 
 | |
| 		// entries
 | |
|         $data_array = array();
 | |
|         $result = $db->query("SELECT timestamp, players, kills, headshots, act_slots, max_slots FROM hlstats_Trend WHERE game='{$game_escaped}' ORDER BY timestamp DESC LIMIT 0, 350");
 | |
| 		while ($rowdata = $db->fetch_array($result))
 | |
| 		{
 | |
| 			$data_array[] = array('timestamp' => $rowdata['timestamp'], 'players' => $rowdata['players'], 'kills' => $rowdata['kills'], 'headshots' => $rowdata['headshots'], 'act_slots' => $rowdata['act_slots'], 'max_slots' => $rowdata['max_slots']);
 | |
| 		}
 | |
| 
 | |
| 		$players_data = $db->query("SELECT count(playerId) as player_count FROM hlstats_Players WHERE game='{$game_escaped}'");
 | |
| 		$rowdata = $db->fetch_array($players_data);
 | |
| 		$total_players = $rowdata['player_count'];
 | |
| 
 | |
| 		if (count($data_array) > 1)
 | |
| 		{
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'kills', 0, 0, 0, 0, array($orange, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'headshots', 0, 0, 0, 1, array($dark_color, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'players', 0, 0, 0, 1, array($red, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 2, 'max_slots', 0, 0, 0, 1, array($gray, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 2, 'act_slots', 0, 0, 1, 1, array($blue, $red, $font_color, $dark_color));
 | |
| 
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'kills', 0, 1, 0, 1, array($orange, $red, $font_color, $dark_color, $light_gray));
 | |
| 		}
 | |
| 
 | |
| 		if ($width >= 800)
 | |
| 		{
 | |
| 			$result = $db->query("SELECT players FROM hlstats_Trend WHERE game='{$game_escaped}' AND timestamp<=" . (time() - 3600) . " ORDER by timestamp DESC LIMIT 0,1");
 | |
| 			$rowdata = $db->fetch_array($result);
 | |
| 			$players_last_hour = $total_players - $rowdata['players'];
 | |
| 
 | |
| 			$result = $db->query("SELECT players FROM hlstats_Trend WHERE game='{$game_escaped}' AND timestamp<=" . (time() - 86400) . " ORDER by timestamp DESC LIMIT 0,1");
 | |
| 			$rowdata = $db->fetch_array($result);
 | |
| 			$players_last_day = $total_players - $rowdata['players'];
 | |
| 
 | |
| 			$str = 'New Players Last 24h: ' . $players_last_day . ' Last 1h: ' . $players_last_hour;
 | |
| 			$str_width = (imagefontwidth(1) * strlen($str)) + 2;
 | |
| 			imagestring($image, 1, $width - $indent_x[1] - $str_width, $indent_y[0] - 11, $str, $font_color);
 | |
| 		}
 | |
| 
 | |
| 	} elseif ($bar_type == 2)
 | |
| 	{
 | |
| 		// PLAYER HISTORY GRAPH
 | |
| 		$indent_x = array(35, 35);
 | |
| 		$indent_y = array(15, 15);
 | |
| 		
 | |
| 		if (file_exists($iconpath . "/trendgraph.png")) {
 | |
| 			$trendgraph_bg = $iconpath . "/trendgraph.png";
 | |
| 		} else {
 | |
| 			$trendgraph_bg = IMAGE_PATH . "/graph/trendgraph.png";
 | |
| 		}
 | |
| 
 | |
| 		$background_img = imagecreatefrompng($trendgraph_bg);
 | |
| 		if ($background_img)
 | |
| 			{
 | |
| 				imagecopy($image, $background_img, 0, 0, 0, 0, 400, 152);
 | |
| 				imagedestroy($background_img);
 | |
| 				$drawbg = false;
 | |
| 			}
 | |
| 
 | |
| 		// background
 | |
| 		if ($drawbg)
 | |
| 		{
 | |
| 			imagefilledrectangle($image, 0, 0, $width, $height, $main_color); // background color
 | |
| 			imagerectangle($image, $indent_x[0], $indent_y[0], $width - $indent_x[1], $height - $indent_y[1], $dark_color);
 | |
| 			imagefilledrectangle($image, $indent_x[0] + 1, $indent_y[0] + 1, $width - $indent_x[1] - 1, $height - $indent_y[1] - 1, $light_color);
 | |
| 		}
 | |
| 
 | |
| 		// entries
 | |
| 		$deletedays = $g_options['DeleteDays'];
 | |
| 		if ($deletedays == 0)
 | |
| 			$deletedays = 14;
 | |
| 
 | |
| 		// define first day's timestamp range
 | |
| 		$ts = strtotime(date('Y-m-d'));
 | |
| 		$data_array = array();
 | |
| 		$arcount = 0;
 | |
| 		$result = $db->query("SELECT eventTime, skill, kills, deaths, headshots, connection_time, UNIX_TIMESTAMP(eventTime) AS ts FROM hlstats_Players_History WHERE playerId=" . $player . " ORDER BY eventTime DESC LIMIT 0, " . $deletedays);
 | |
| 		while (($rowdata = $db->fetch_array($result)) && ($arcount < $deletedays))
 | |
| 		{
 | |
| 			//echo $rowdata['eventTime']." - ".date("Y-m-d", $ts)."\n";
 | |
| 			while (($rowdata['eventTime'] != date("Y-m-d", $ts)) && ($arcount < $deletedays))
 | |
| 			{
 | |
| 				// insert null value
 | |
| 				$data_array[] = array('timestamp' => $ts, 'skill' => $rowdata['skill'], 'kills' => 0, 'headshots' => 0, 'deaths' => 0, 'time' => 0);
 | |
| 				$ts -= 86400;
 | |
| 				$arcount++;
 | |
| 			}
 | |
| 
 | |
| 			$data_array[] = array('timestamp' => $rowdata['ts'], 'skill' => $rowdata['skill'], 'kills' => $rowdata['kills'], 'headshots' => $rowdata['headshots'], 'deaths' => $rowdata['deaths'], 'time' => $rowdata['connection_time']);
 | |
| 			$arcount++;
 | |
| 			$ts -= 86400;
 | |
| 		}
 | |
| 
 | |
| 		while (($arcount < $deletedays))
 | |
| 		{
 | |
| 			// insert null value
 | |
| 			$data_array[] = array('timestamp' => $ts, 'skill' => $rowdata['skill'], 'kills' => 0, 'headshots' => 0, 'deaths' => 0, 'time' => 0);
 | |
| 			$ts -= 86400;
 | |
| 			$arcount++;
 | |
| 		}
 | |
| 
 | |
| 		$deletedays = count($data_array);
 | |
| 
 | |
| 		$first_entry = 10; // disable tsgk map function
 | |
| 
 | |
| 		if (count($data_array) > 1)
 | |
| 		{
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'kills', 0, 1, 0, 1, array($red, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'headshots', 0, 0, 0, 1, array($dark_color, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 0, 'skill', 0, 0, 0, 1, array($orange, $red, $font_color, $dark_color, $light_gray));
 | |
| 			drawItems($image, array('width' => $width, 'height' => $height, 'indent_x' => $indent_x, 'indent_y' => $indent_y), $data_array, 2, 'deaths', 0, 0, 0, 1, array($gray, $red, $font_color, $dark_color, $light_gray));
 | |
| 		}
 | |
| 
 | |
| 		$str = $deletedays . ' days Trend';
 | |
| 		$str_width = (imagefontwidth(1) * strlen($str)) + 2;
 | |
| 		imagestring($image, 1, $width - $indent_x[1] - $str_width, $indent_y[0] - 11, $str, $font_color);
 | |
| 	}
 | |
| 
 | |
| 	imageTrueColorToPalette($image, 0, 65535);
 | |
| 
 | |
| 	// $bar_type=2;
 | |
| 
 | |
| 	// achtung, hier ist noch ein pfad hardcoded!!!
 | |
| 	header('Content-Type: image/png');
 | |
| 
 | |
| 	if ($bar_type != 2)
 | |
| 	{
 | |
| 		@imagepng($image, IMAGE_PATH . '/progress/server_' . $width . '_' . $height . '_' . $bar_type . '_' . $game . '_' . $server_id . '_' . $bg_id . '_' . $server_load_type . '.png');
 | |
| 		$mod_date = date('D, d M Y H:i:s \G\M\T', time());
 | |
| 		header('Last-Modified:'.$mod_date);
 | |
| 		imagepng($image);
 | |
| 		imagedestroy($image);
 | |
| 		//Opera doesn't like the redirect
 | |
| 		/*$mod_date = date('D, d M Y H:i:s \G\M\T', time());
 | |
| 		header('Last-Modified:'.$mod_date);
 | |
| 		header("Location: ".IMAGE_PATH."/progress/server_".$width."_".$height."_".$bar_type."_".$game."_".$server_id."_".$bg_id."_".$server_load_type.".png");*/
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		imagepng($image);
 | |
| 		imagedestroy($image);
 | |
| 	}
 | |
| ?>
 |