]> git.sesse.net Git - foosball/blobdiff - www/index.pl
Centralize rounding decisions, so we round symmetrically.
[foosball] / www / index.pl
index a6b8cf043fdb92fb6cb945c627f9d7179875d814..c1ab7d17a2993e2dab12c7a66cfcb31556c88645 100755 (executable)
@@ -21,14 +21,14 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @single_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
        };
 }
@@ -47,14 +47,14 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @double_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
        };
 }
@@ -62,9 +62,70 @@ while (my $ref = $q->fetchrow_hashref) {
 
 # Last games
 my @last_games = ();
-$q = $dbh->prepare('select * from ( select to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,\'Double\' as type,team1_username1 || \' / \' || team1_username2 as username1, team2_username1 || \' / \' || team2_username2 as username2,score1,score2 from double_results union all select to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,\'Single\' as type,username1,username2,score1,score2 from single_results ) t1 order by gametime desc limit 10');
+$q = $dbh->prepare('
+select * from (
+    select
+        gametime as sort_gametime,
+        to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,
+        \'Double\' as type,
+       team1_username1 || \' / \' || team1_username2 as username1,
+        team2_username1 || \' / \' || team2_username2 as username2,
+       score1,
+       score2,
+       ra1.rating_diff as diff1, 
+       ra2.rating_diff as diff2, 
+       ra3.rating_diff as diff3, 
+       ra4.rating_diff as diff4 
+    from
+        double_results re
+        join double_rating ra1
+            on re.gametime=ra1.ratetime
+           and re.team1_username1=ra1.username
+       join double_rating ra2
+           on re.gametime=ra2.ratetime
+           and re.team1_username2=ra2.username
+       join double_rating ra3
+           on re.gametime=ra3.ratetime
+           and re.team2_username1=ra3.username
+       join double_rating ra4
+           on re.gametime=ra4.ratetime
+           and re.team2_username2=ra4.username
+    union all
+    select
+        gametime as sort_gametime,
+        to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,
+       \'Single\' as type,
+       username1,
+       username2,
+       score1,
+       score2,
+       ra1.rating_diff as diff1, 
+       null as diff2, 
+       ra2.rating_diff as diff3,
+       null as diff4 
+    from
+        single_results re
+        join single_rating ra1
+            on re.gametime=ra1.ratetime
+           and re.username1=ra1.username
+       join single_rating ra2
+           on re.gametime=ra2.ratetime
+           and re.username2=ra2.username
+) t1
+order by sort_gametime desc limit 10');
 $q->execute();
 while (my $ref = $q->fetchrow_hashref) {
+       if (defined($ref->{'diff2'})) {
+               $ref->{'diff1'} = sprintf "%+d / %+d",
+                       foosball::round($ref->{'diff1'}),
+                       foosball::round($ref->{'diff2'});
+               $ref->{'diff2'} = sprintf "%+d / %+d",
+                       foosball::round($ref->{'diff3'}),
+                       foosball::round($ref->{'diff4'});
+       } else {
+               $ref->{'diff1'} = sprintf "%+d", foosball::round($ref->{'diff1'});
+               $ref->{'diff2'} = sprintf "%+d", foosball::round($ref->{'diff3'});
+       }
        push @last_games, $ref;
 }
 
@@ -73,8 +134,8 @@ $dbh->disconnect;
 print CGI->header(-type=>'application/xhtml+xml');
 
 my $doc = XML::Template::process_file('index.xml', {
-       '#singletop' => \@single_top,
-       '#doubletop' => \@double_top,
-       '#lastgames' => \@last_games,
+       '#singletop' => XML::Template::alternate('tr/class', \@single_top, 'odd', 'even'),
+       '#doubletop' => XML::Template::alternate('tr/class', \@double_top, 'odd', 'even'),
+       '#lastgames' => XML::Template::alternate('tr/class', \@last_games, 'odd', 'even'),
 });
 print $doc->toString;