]> git.sesse.net Git - ccbs/blobdiff - html/do-start-round.pl
Make it possible to enter NULL values by leaving fields blank.
[ccbs] / html / do-start-round.pl
index 5cd6779273fde236a2ed366b78abdc226a3b0964..2637076503eddb76584864307c6f6555323f4a92 100755 (executable)
@@ -14,6 +14,8 @@ my $num_chosen = $cgi->param('numchosen');
 my $num_groups = $cgi->param('numgroups');
 my $num_qual = $cgi->param('numqual');
 
+$dbh->{AutoCommit} = 0;
+
 $dbh->do('INSERT INTO rounds (tournament, round, randomsongs, chosensongs, numqualifying) VALUES (?, ?, ?, ?, ?)',
        undef, $tournament, $round, $num_random, $num_chosen, $num_qual);
 
@@ -22,6 +24,58 @@ for my $i (1..$num_groups) {
                undef, $tournament, $round, $i);
 }
 
-ccbs::print_see_other('show-tournamelt.pl?id=' . $tournament);
+# Seed people into groups (quite preliminary for now)
+my $people;
+if ($round == 1) {
+       $people = ccbs::db_fetch_all($dbh, 'SELECT * FROM players WHERE player IN ( SELECT player FROM tournamentparticipation WHERE tournament=? ) ORDER BY lower(nick)',
+               $tournament);
+} else {
+       die "Fix qualifying later";
+}
+
+# Zigzag people to get the most fair groups possible
+my $group = 1;
+my $direction = 1;
+my $position = 1;
+for my $p (@$people) {
+       $dbh->do('INSERT INTO roundparticipation (tournament, round, parallel, player, position) VALUES (?, ?, ?, ?, ?)', undef,
+               $tournament, $round, $group, $p->{'player'}, $position);
+
+       if ($group + $direction < 1 || $group + $direction > $num_groups) {
+               $direction = -$direction;
+               $position++;
+       } else {
+               $group += $direction;
+       }
+}
+
+# Pick random songs for the groups
+for my $g (1..$num_groups) {
+       for my $s (1..$num_random) {
+               my $ref = $dbh->selectrow_hashref('SELECT * FROM machinesongs WHERE song NOT IN ( SELECT song FROM randomsongsused ) AND machine=( SELECT machine FROM tournaments WHERE tournament=? ) ORDER BY random() LIMIT 1',
+                       undef, $tournament);
+               if (!defined($ref)) {
+                       ccbs::user_error('Det er ikke flere sanger igjen i sangvelgeren!');
+               }
+               $dbh->do('INSERT INTO randomsongsused (song) VALUES (?)',
+                       undef, $ref->{'song'});
+               $dbh->do('INSERT INTO roundrandomsongs (tournament, round, parallel, song) VALUES (?,?,?,?)',
+                       undef, $tournament, $round, $g, $ref->{'song'});
+
+               $dbh->do('INSERT INTO scores SELECT tournament,round,parallel,player,?,?,NULL,NULL,\'f\',NULL FROM roundparticipation WHERE tournament=? AND round=? AND parallel=?', undef,
+                       $s, $ref->{'song'}, $tournament, $round, $g);
+       }
+}
+
+# Add empty "score" records for the chosen songs.
+for my $g (1..$num_groups) {
+       for my $s (1..$num_chosen) {
+               $dbh->do('INSERT INTO scores SELECT tournament,round,parallel,player,?,NULL,NULL,NULL,\'t\',NULL FROM roundparticipation WHERE tournament=? AND round=? AND parallel=?', undef,
+                       $s + $num_random, $tournament, $round, $g);
+       }
+}
+
+ccbs::print_see_other('show-tournament.pl?id=' . $tournament);
 
+$dbh->commit;
 $dbh->disconnect;