hlstatsx/web/trend_graph.php

159 lines
6.1 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
*/
define('IN_HLSTATS', true);
// Load database classes
require ('config.php');
require (INCLUDE_PATH . '/class_db.php');
require (INCLUDE_PATH . '/functions.php');
require (INCLUDE_PATH . '/pChart/pData.class');
require (INCLUDE_PATH . '/pChart/pChart.class');
$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();
$bg_color = array('red' => 90, 'green' => 90, 'blue' => 90);
if ((isset($_GET['bgcolor'])) && (is_string($_GET['bgcolor'])))
$bg_color = hex2rgb(valid_request($_GET['bgcolor'], 0));
$color = array('red' => 213, 'green' => 217, 'blue' => 221);
if ((isset($_GET['color'])) && (is_string($_GET['color'])))
$color = hex2rgb(valid_request($_GET['color'], 0));
if (isset($_GET['player'])) $player = (int)$_GET['player'];
if (!$player) exit();
$res = $db->query("SELECT UNIX_TIMESTAMP(eventTime) AS ts, skill, skill_change FROM hlstats_Players_History WHERE playerId = '$player' ORDER BY eventTime DESC LIMIT 30");
$skill = array();
$skill_change = array();
$date = array();
$rowcnt = $db->num_rows();
$last_time = 0;
for ($i = 1; $i <= $rowcnt; $i++)
{
$row = $db->fetch_array($res);
array_unshift($skill, ($row['skill']==0)?0:($row['skill']/1000));
array_unshift($skill_change, $row['skill_change']);
if ($i == 1 || $i == round($rowcnt/2) || $i == $rowcnt)
{
array_unshift($date, date("M-j", $row['ts']));
$last_time = $row['ts'];
}
else
{
array_unshift($date, '');
}
}
$cache_image = IMAGE_PATH . "/progress/trend_{$player}_{$last_time}.png";
if (file_exists($cache_image))
{
header('Content-type: image/png');
readfile($cache_image);
exit();
}
$Chart = new pChart(400, 200);
$Chart->drawBackground($bg_color['red'], $bg_color['green'], $bg_color['blue']);
$Chart->setGraphArea(40, 28, 339, 174);
$Chart->drawGraphAreaGradient(40, 40, 40, -50);
if (count($date) < 2)
{
$Chart->setFontProperties(IMAGE_PATH . '/sig/font/DejaVuSans.ttf', 11);
$Chart->drawTextBox(100, 90, 180, 110, "Not Enough Session Data", 0, 0, 0, 0, ALIGN_LEFT, FALSE, 255, 255, 255, 0);
}
else
{
$DataSet = new pData;
$DataSet->AddPoint($skill, 'SerieSkill');
$DataSet->AddPoint($skill_change, 'SerieSession');
$DataSet->AddPoint($date, 'SerieDate');
$DataSet->AddSerie('SerieSkill');
$DataSet->SetAbsciseLabelSerie('SerieDate');
$DataSet->SetSerieName('Skill', 'SerieSkill');
$DataSet->SetSerieName('Session', 'SerieSession');
$Chart->setFontProperties(IMAGE_PATH . '/sig/font/DejaVuSans.ttf', 7);
$DataSet->SetYAxisName('Skill');
$DataSet->SetYAxisUnit('K');
$Chart->setColorPalette(0, 255, 255, 0);
$Chart->drawRightScale($DataSet->GetData(), $DataSet->GetDataDescription(),
SCALE_NORMAL, $color['red'], $color['green'], $color['blue'], TRUE, 0, 0);
$Chart->drawGrid(1, FALSE, 55, 55, 55, 100);
$Chart->setShadowProperties(3, 3, 0, 0, 0, 30, 4);
$Chart->drawCubicCurve($DataSet->GetData(), $DataSet->GetDataDescription());
$Chart->clearShadow();
$Chart->drawFilledCubicCurve($DataSet->GetData(), $DataSet->GetDataDescription(), .1, 30);
$Chart->drawPlotGraph($DataSet->GetData(), $DataSet->GetDataDescription(), 1, 1, 255, 255, 255);
$Chart->clearScale();
$DataSet->RemoveSerie('SerieSkill');
$DataSet->AddSerie('SerieSession');
$DataSet->SetYAxisName('Session');
$DataSet->SetYAxisUnit('');
$Chart->setColorPalette(1, 255, 0, 0);
$Chart->setColorPalette(2, 0, 0, 255);
$Chart->drawScale($DataSet->GetData(), $DataSet->GetDataDescription(),
SCALE_NORMAL, $color['red'], $color['green'], $color['blue'], TRUE, 0, 0);
$Chart->setShadowProperties(3, 3, 0, 0, 0, 30, 4);
$Chart->drawCubicCurve($DataSet->GetData(), $DataSet->GetDataDescription());
$Chart->clearShadow();
$Chart->drawPlotGraph($DataSet->GetData(), $DataSet->GetDataDescription(), 1, 1, 255, 255, 255);
$Chart->setFontProperties(IMAGE_PATH . '/sig/font/DejaVuSans.ttf',7);
$Chart->drawHorizontalLegend(235, -1, $DataSet->GetDataDescription(),
0, 0, 0, 0, 0, 0, $color['red'], $color['green'], $color['blue'], FALSE);
}
$cache_image = IMAGE_PATH . "/progress/trend_{$player}_{$last_time}.png";
$Chart->Render($cache_image);
header("Location: $cache_image");
?>