1 package Gruntmaster
::Page
::Submit
;
3 use Gruntmaster
::Page
::Base
;
5 use constant FORMAT_EXTENSION
=> {
19 my ($self, $frm, $env) = @_;
20 my $r = Plack
::Request
->new($env);
21 my ($problem, $format, $contest, $private, $prog) = map {scalar $r->param($_)} 'problem', 'prog_format', 'contest', 'private', 'source_code';
22 $problem //= $env->{'gruntmaster.problem'};
23 $contest //= $env->{'gruntmaster.contest'};
24 my $upload = $r->upload('prog');
25 if (defined $upload) {
26 my $temp = read_file
$upload->path;
27 $prog = $temp if $temp
29 die if defined $contest && $contest !~ /^\w+$/ ;
30 die if defined $contest && (time > db
($env)->contest($contest)->stop);
31 return reply
'A required parameter was not supplied' if grep { !defined } $problem, $format, $prog;
32 return reply
'Maximum source size is 10KB' if length $prog > 25 * 1024;
33 return reply
'You must wait 30 seconds between jobs' unless time > db
($env)->user($r->user)->lastjob + 30;
34 db
($env)->user($r->user)->update({lastjob
=> time});
36 db
($env)->jobs->create({
37 defined $contest ?
(contest
=> $contest) : (),
39 extension
=> FORMAT_EXTENSION
->{$format},
41 defined $private ?
(private
=> $private) : (),
48 #PUBLISH 'jobs', "$contest.$job";
49 [303, [Location
=> ($contest ?
"/ct/$contest/log/" : '/log/')], ['']]