Implement the rest of the ranking.
authorSteinar H. Gunderson <sesse@samfundet.no>
Wed, 16 Feb 2005 20:22:26 +0000 (20:22 +0000)
committerSteinar H. Gunderson <sesse@samfundet.no>
Wed, 16 Feb 2005 20:22:26 +0000 (20:22 +0000)
html/do-finish-tournament.pl

index 7c7b14a..b493968 100755 (executable)
@@ -21,6 +21,7 @@ my $last_sround;
 for my $sr (@$srounds) {
        # only accept strict ordering
        last if (defined($last_sround) && $sr->{'round'} != $last_sround - 1);
+       $last_sround = $sr->{'round'};
 
        # Grab the highscore list from this round
        my $scores = ccbs::db_fetch_all($dbh, 'SELECT player,SUM(score) AS score FROM scores WHERE tournament=? AND round=? GROUP BY parallel,player ORDER BY SUM(score) DESC',
@@ -39,6 +40,19 @@ if (!defined($last_sround)) {
        ccbs::user_error("Forsøk på å avslutte en turnering med flere grupper aktive.");
 }
 
+# Grab all the remaining groups; we order by the simple criteria:
+# 1. If player A has gone to group X and player B hasn't, player A is higher.
+# 2. If player A has higher max score than player B, player A is higher.
+my $scores = ccbs::db_fetch_all($dbh, 'SELECT player FROM scores WHERE tournament=? AND round < ? GROUP BY round,player ORDER BY round DESC,MAX(score) DESC',
+       $tournament, $last_sround);
+for my $s (@$scores) {
+       next if ($already_ordered{$s->{'player'}});
+       $dbh->do('INSERT INTO tournamentrankings (tournament, ranking, player, points) VALUES (?,?,?,?)',
+                       undef, $tournament, $ranking, $s->{'player'}, points_for_place($ranking));
+       $ranking++;
+       $already_ordered{$s->{'player'}} = 1;
+}
+
 $dbh->commit;
 $dbh->disconnect;