#!/usr/bin/perl
#----------------------------------------------------------------------------
# $Header: e:/p/w/playchess/rcs/playerstats-vars.cgi 1.8 2003/01/15 16:53:18Z ts init ts $
# $Log: playerstats-vars.cgi $
# Revision 1.8 2003/01/15 16:53:18Z ts # CGI-scripts moved to cgi directory -> relative path
# Revision 1.7 2003/01/04 02:19:18Z ts # Move-Archive replaces Move-Over and Opening tables
# Revision 1.6 2002/11/10 21:26:28Z ts # Renamed all tables: tbl_+oldname
# Revision 1.5 2002/08/13 14:53:09Z ts # Zwischensicherung
# Revision 1.4 2002/05/31 19:38:24Z ts # Corrections
# Revision 1.3 2002/05/10 10:11:52Z ts # Rankings, thematics and alike...
# Revision 1.2 2001/11/27 00:10:35Z ts # Don't know
# Revision 1.5 2001/09/02 22:26:35Z ts # something changed
# Revision 1.4 2001/06/17 22:15:55Z ts # Members
# Revision 1.3 2001/05/01 00:29:35Z ts # Membership dependant features
# Revision 1.1 2001/01/26 16:28:36Z ts # Initial revision
#----------------------------------------------------------------------------
use lib "../cgi-bin";
use CGI qw( :standard );
use CGI::Carp qw(fatalsToBrowser);
use OTree;
use PCPlayer;
use PC;
use PCLeagueUtil;
use Annotate;
use Member;
use Template;
use Object;
use Util;
use ChessConfig;
use PCSession;
use MyDbi;
##--------------------------------------------------------------------------
## LOCAL CONFIGURATION
##--------------------------------------------------------------------------
local $config = getConfig();
$URL = $ENV{DOCUMENT_URI}; # url of your domain
$ROOT = $ENV{DOCUMENT_ROOT}; # path to document root
$SERVER = $ENV{SERVER_NAME}; # server name
$HOST = $ENV{HTTP_HOST};
$err = ''; # error message
$syserr = 0;
# $| = 1;
# local $| = 1; # disable output buffering
local ($starttime,$endtime) = (time(),0);
$cgi = CGI->new();
$sobj = PCSession->new($cgi);
$sname = $sobj->getValue( 'name' );
#$spasswd = $sobj->getValue( 'passwd' );
local $action = $cgi->param( 'action' ) || $ENV{'action'};
local $name = $cgi->param( 'name' ) || $sname;
local $min = $cgi->param( 'min' );
local $pColor = $cgi->param( 'c' );
local $pDepth = $cgi->param( 'd' );
local $pMove = $cgi->param( 'm' );
local $pTime = $cgi->param( 't' );
local $var = $cgi->param( 'var' );
# ignore leading and trailing blanks
$name =~ s/^\s*(.*?)\s*$/$1/;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
unless( $pColor )
{
my $tpl = Template->new( "playerstats-fo.tpl" );
$tpl->addMakro( "NAME", $name );
# $tpl->addMakro( "SESSION_INFO", $sobj->Info() );
print $tpl->Expand($sobj);
# print "TPL-Time: ", time()-$ST, " seconds
\n";
exit(0);
}
# Following actions require database access
#------------------------------------------
$dbh = dbiConnect() or exit(1);
# Favorite Openings
#------------------
{
# Page requires membership
# ~~~~~~~~~~~~~~~~~~~~~~~~
$sobj->assertMember();
local $ST = time();
# Debug output
if( 0 && Util::isLocal )
{
foreach $v ( qw| SCRIPT_NAME PATH_INFO PATH_TRANSLATED QUERY_STRING | )
{
print "ENV($v) = ", $ENV{$v}, "
\n";
}
}
my( $stmt, $rows, @results );
my $starttime = time;
my $pid = getValue('select pid from tbl_player where name=?', $name );
my $depth = $pDepth || 10;
my $maxplies = 2*$depth;
#print "name=$name pid=$pid
\n" if( Util::isLocal || Util::isTest );
my $movecond;
$movecond = ($pMove) ? "and m.moves like '$pMove%'" : '';
$movecond = "and m.moves like '$var%'" if( $var );
my $timecond = ($pTime) ? "and g.lastmove > unix_timestamp(now())-$pTime*86400" : '';
$stmt = "
select
m.gid, m.moves,
IF(g.result=pg.color,1,0),
IF(g.result='d',1,0),
IF(g.result!='d' && g.result!=pg.color,1,0),
0,
g.name, g.lastmove
from
tbl_player_game pg,
tbl_game g,
tbl_move_archive m
where pg.pid=?
and pg.color=?
and pg.gid=g.gid
and pg.gid=m.gid
$movecond
$timecond
and g.result is not null
and g.valid=1
order by 3,2
";
$rows = MyDbi::getRows( $stmt, $pid, $pColor );
#print "$stmt
\n";
unless( $var )
{
# Create HTML for opening tree
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
my $multiUrl = "/players/$name/stats/openings?c=$pColor&m=$pMove&t=$pTime&var=%s";
$tree = OTree::createTree( $rows, $maxplies, "/games/%s", $multiUrl );
# create output
# ~~~~~~~~~~~~~
my $tpl = Template->new( "playerstats-folist.tpl" );
$tpl->addMakro( "NAME", $name );
$tpl->addMakro( "COLOR", (($pColor eq 'w') ? 'White' : 'Black') );
$tpl->addMakro( "FOUND", $#{$rows}+1 );
$tpl->addMakro( "TREE", $tree );
# $tpl->addMakro( 'TEST_C', $pColor );
# $tpl->addMakro( 'TEST_D', $pDepth );
# $tpl->addMakro( 'TEST_M', $pMove );
# $tpl->addMakro( 'TEST_T', $pTime );
$tpl->addSelectMakro( 'c', $pColor ) if( $pColor );
$tpl->addSelectMakro( 'd', $pDepth ) if( $pDepth );
$tpl->addSelectMakro( 'm', $pMove ) if( $pMove );
$tpl->addSelectMakro( 't', $pTime ) if( $pTime );
print $tpl->Expand($sobj);
}
else
{
# Create HTML for game list
# ~~~~~~~~~~~~~~~~~~~~~~~~~
my $gamelist_ref;
($gamelist_ref, $var) = OTree::createList( $rows, $var );
# create output
# ~~~~~~~~~~~~~
my $tpl = Template->new( "playerstats-folist.tpl" );
$tpl->addMakro( "NAME", $name );
$tpl->addMakro( "COLOR", (($pColor eq 'w') ? 'White' : 'Black') );
$tpl->addArray( 'GAMELIST', $gamelist_ref );
$tpl->addMakro( "FOUND", $#{$rows}+1 );
$tpl->addMakro( "VARIANT", $var );
$tpl->addSelectMakro( 'c', $pColor ) if( $pColor );
$tpl->addSelectMakro( 'd', $pDepth ) if( $pDepth );
$tpl->addSelectMakro( 'm', $pMove ) if( $pMove );
$tpl->addSelectMakro( 't', $pTime ) if( $pTime );
print $tpl->Expand($sobj);
}
# print "TPL-Time: ", time()-$ST, " seconds
\n";
}
exit(0);