]> iEval git - gruntmaster-page.git/blobdiff - lib/Plack/App/Gruntmaster.pm
Add D, OCaml, PHP, Python3
[gruntmaster-page.git] / lib / Plack / App / Gruntmaster.pm
index 2c07bd569017005b29bc1fab078529229b74aef8..cda45fc04ded26aacac855140c8a0ec42e058928 100644 (file)
@@ -24,15 +24,20 @@ use constant USER_REGEX => qr/^\w{2,20}$/a;
 use constant FORMAT_EXTENSION => {
        C => 'c',
        CPP => 'cpp',
+       D => 'd',
        GCCGO => 'go',
        GOLANG => 'go',
        GOLFSCRIPT => 'gs',
        HASKELL => 'hs',
+       OBERON => 'm',
        MONO => 'cs',
+       OCAML => 'ml',
        JAVA => 'java',
        PASCAL => 'pas',
        PERL => 'pl',
+       PHP => 'php',
        PYTHON => 'py',
+       PYTHON3 => 'py',
        RUBY => 'rb',
        SBCL => 'l',
 };
@@ -106,7 +111,7 @@ sub dispatch_request{
                },
 
                sub (/st/:contest) {
-                       my @pb = map { [$_->{id}, $_->{name}] } @{problem_list contest => $_{contest}};
+                       my @pb = map { [$_->{id}, $_->{name}] } sort { $a->{value} <=> $b->{value} } @{problem_list contest => $_{contest}};
                        response st => 'Standings', {problems => \@pb, st => standings $_{contest}}, 10
                },
 
@@ -129,7 +134,7 @@ sub dispatch_request{
                sub (/log/ + ?:contest~&:owner~&:page~&:problem~&:private~&:result~) {
                        forbid $_{private};
                        my ($jobs, $pageinfo) = job_list(%_);
-                       response log => 'Job list', {log => $jobs, %$pageinfo}, 5
+                       response log => 'Job log', {log => $jobs, %$pageinfo}, 5
                },
                sub (/pb/  + ?:owner~&:contest~&:private~)                  {
                        forbid $_{private};
@@ -189,6 +194,11 @@ sub dispatch_request{
                                return reply 'This contest has finished' if $contest->{finished};
                                return reply 'This problem is private' if !admin && $private;
                                return reply 'This problem does not belong to this contest' unless contest_has_problem $_{contest}, $_{problem};
+                               if ($_{contest} =~ /d[12]$/) {
+                                       my $other = $_{contest} =~ y/12/21/r;
+                                       my ($ans) = db->query('SELECT COUNT(*) FROM jobs WHERE owner = ? AND contest = ?', remote_user->{id}, $other)->flat;
+                                       return reply 'You are not allowed to participate in both divisions of a round' if $ans;
+                               }
                        }
                        return reply 'Maximum source size is 10KB' if ($prog ? $prog->size : length $_{source_code}) > 10 * 1024;
                        return reply 'You must wait 30 seconds between jobs' if !admin && time <= remote_user->{lastjob} + 30;
This page took 0.018677 seconds and 4 git commands to generate.