Check for scores out of range, instead of giving SQL errors.
[ccbs] / html / do-edit-scores.pl
1 #! /usr/bin/perl
2
3 use ccbs;
4 use strict;
5 use warnings;
6
7 my $dbh = ccbs::db_connect();
8 my $cgi = new CGI;
9
10 my $tournament = $cgi->param('tournament');
11 my $round = $cgi->param('round');
12 my $group = $cgi->param('group');
13
14 $dbh->{AutoCommit} = 0;
15
16 # Loop through all parameters and see what parameters differ between old- and current
17 # versions
18 for my $p ($cgi->param()) {
19         next if ($p =~ /^old-(.*?)$/);
20         next unless (defined($cgi->param('old-' . $p)));
21         next if ($cgi->param($p) eq $cgi->param('old-' . $p));
22
23         my $val = $cgi->param($p);
24         undef $val if ($val =~ /^\s*$/);
25
26         if ($p =~ /^score(\d+)-(\d+)/) {
27                 if (defined($val) && ($val < 0 || $val > 10000)) {
28                         ccbs::user_error("Alle poengsummer må være mellom 0 og 10000 (inklusive).");
29                 }
30         
31                 $dbh->do('UPDATE scores SET score=? WHERE tournament=? AND round=? AND parallel=? AND player=? AND songnumber=?', undef,
32                         $val, $tournament, $round, $group, $1, $2);
33         } elsif ($p =~ /^playmode(\d+)-(\d+)/) {
34                 $dbh->do('UPDATE scores SET playmode=? WHERE tournament=? AND round=? AND parallel=? AND player=? AND songnumber=?', undef,
35                         $val, $tournament, $round, $group, $1, $2);
36         } elsif ($p =~ /^difficulty(\d+)-(\d+)/) {
37                 $dbh->do('UPDATE scores SET difficulty=? WHERE tournament=? AND round=? AND parallel=? AND player=? AND songnumber=?', undef,
38                         $val, $tournament, $round, $group, $1, $2);
39         } elsif ($p =~ /^song(\d+)-(\d+)/) {
40                 $dbh->do('UPDATE scores SET song=? WHERE tournament=? AND round=? AND parallel=? AND player=? AND songnumber=? AND chosen=\'t\'', undef,
41                         $val, $tournament, $round, $group, $1, $2);
42         }
43 }
44
45 $dbh->commit;
46 $dbh->disconnect;
47
48 ccbs::print_see_other('show-tournament.pl?id=' . $tournament);
49