]> git.sesse.net Git - foosball/blob - www/assess-single.pl
e9ffee198e27a1157d5e9713db79e2e32614a349
[foosball] / www / assess-single.pl
1 #! /usr/bin/perl
2 use strict;
3 use warnings;
4 use DBI;
5 use CGI;
6 use CGI::Carp qw(fatalsToBrowser);
7 use lib qw(/srv/bzr.sesse.net/www/xml-template/perl/);
8 use XML::Template;
9 require '../foosball.pm';
10
11 my $cgi = CGI->new;
12
13 my $username1 = $cgi->param('username1');
14 $username1 =~ /^([a-z][a-z0-9]*)$/ or die "Invalid user name 1";
15 $username1 = $1;
16
17 my $username2 = $cgi->param('username2');
18 $username2 =~ /^([a-z][a-z0-9]*)$/ or die "Invalid user name 2";
19 $username2 = $1;
20
21 my $dbh = foosball::db_connect();
22
23 # fetch the single ratings
24 my ($rating1, $rd1) = foosball::find_single_rating($dbh, $username1);
25 my ($rating2, $rd2) = foosball::find_single_rating($dbh, $username2);
26
27 # 10-x table
28 open ASSESS, "/srv/foosball.sesse.net/foosrank $rating1 $rd1 $rating2 $rd2 10 |"
29         or die "foosrank: $!";
30
31 my @results10 = ();
32 while (<ASSESS>) {
33         my ($score, $prob, $rdiff1, $rdiff2) = split /,/, $_;
34         push @results10, {
35                 score => $score,
36                 prob => (sprintf "%.3f", $prob),
37                 rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
38                 rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
39         };
40 }
41
42 # 7-x table
43 open ASSESS, "/srv/foosball.sesse.net/foosrank $rating1 $rd1 $rating2 $rd2 7 |"
44         or die "foosrank: $!";
45
46 my @results7 = ();
47 while (<ASSESS>) {
48         my ($score, $prob, $rdiff1, $rdiff2) = split /,/, $_;
49         push @results7, {
50                 score => $score,
51                 prob => (sprintf "%.3f", $prob),
52                 rdiff1 => (sprintf "%+d", int($rdiff1+0.5)),
53                 rdiff2 => (sprintf "%+d", int($rdiff2+0.5)),
54         };
55 }
56
57 print CGI->header(-type=>'application/xhtml+xml');
58
59 my $doc = XML::Template::process_file('assess.xml', {
60         'username1' => $username1,
61         'username2' => $username2,
62         'rating1' => int($rating1+0.5),
63         'rating2' => int($rating2+0.5),
64         '#results10' => \@results10,
65         '#results7' => \@results7,
66 });
67 print $doc->toString;