X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FGruntmaster%2FData.pm;h=f9e0639b2aa69df1d68d552e57dae3f75912008c;hb=9396be04bc50afcc4bb29cfb21d32dffbe65111d;hp=e514970820e95cf2037c49806b0f7b23b13dd33e;hpb=edfc5928b7d9ee441f2f0eaf9b3cadec58bbf947;p=gruntmaster-data.git diff --git a/lib/Gruntmaster/Data.pm b/lib/Gruntmaster/Data.pm index e514970..f9e0639 100644 --- a/lib/Gruntmaster/Data.pm +++ b/lib/Gruntmaster/Data.pm @@ -16,8 +16,8 @@ __PACKAGE__->load_namespaces; # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dAEmtAexvUaNXLgYz2rNEg use parent qw/Exporter/; -our $VERSION = '5999.000_012'; -our @EXPORT = qw/purge/; +our $VERSION = '5999.000_013'; +our @EXPORT = qw/purge/; ## no critic (ProhibitAutomaticExportation) use Lingua::EN::Inflect qw/PL_N/; use JSON::MaybeXS qw/decode_json/; @@ -75,7 +75,7 @@ sub user_entry { sub problem_list { my ($self, %args) = @_; my $rs = $self->problems->search(undef, {order_by => 'me.name', columns => PROBLEM_PUBLIC_COLUMNS, prefetch => 'owner'}); - $rs = $rs->search({-or => ['contest_problems.contest' => undef, 'contest.stop' => {'<=', time}], 'me.private' => 0}, {join => {'contest_problems' => 'contest'}, distinct => 1}) unless $args{contest}; + $rs = $rs->search({-or => ['contest_problems.contest' => undef, 'contest.stop' => {'<=', time}], 'me.private' => 0}, {join => {'contest_problems' => 'contest'}, distinct => 1}) unless $args{contest} || $args{private}; $rs = $rs->search({'contest_problems.contest' => $args{contest}}, {join => 'contest_problems'}) if $args{contest}; $rs = $rs->search({'me.owner' => $args{owner}}) if $args{owner}; my %params; @@ -93,16 +93,24 @@ sub problem_entry { my $columns = PROBLEM_PUBLIC_COLUMNS; push @$columns, 'solution' unless $running; my $pb = $self->problems->find($id, {columns => $columns, prefetch => 'owner'}); - eval { ## no critic (RequireCheckingReturnValueOfEval) - $self->opens->create({ - contest => $contest, - problem => $id, - owner => $user, - time => time, - }) - } if $running; + my $open; + $open = $self->opens->find_or_create({ + contest => $contest, + problem => $id, + owner => $user, + time => time, + }) if $running; $contest &&= $self->contest($contest); - +{ $pb->get_columns, owner_name => $pb->owner->name, cansubmit => $contest ? $running : 1, $running ? (contest_start => $contest->start, contest_stop => $contest->stop) : () } + +{ + $pb->get_columns, + owner_name => $pb->owner->name, + cansubmit => $running || !$contest, + $running ? ( + contest_start => $contest->start, + contest_stop => $contest->stop, + open_time => $open->time + ) : (), + } } sub contest_list { @@ -128,9 +136,10 @@ sub job_list { my ($self, %args) = @_; $args{page} //= 1; my $rs = $self->jobs->search(undef, {order_by => {-desc => 'me.id'}, prefetch => ['problem', 'owner'], rows => JOBS_PER_PAGE, page => $args{page}}); - $rs = $rs->search({'me.owner' => $args{owner}}) if $args{owner}; - $rs = $rs->search({contest => $args{contest}}) if $args{contest}; - $rs = $rs->search({problem => $args{problem}}) if $args{problem}; + $rs = $rs->search({'me.private'=> 0}) unless $args{private}; + $rs = $rs->search({'me.owner' => $args{owner}}) if $args{owner}; + $rs = $rs->search({contest => $args{contest}}) if $args{contest}; + $rs = $rs->search({problem => $args{problem}}) if $args{problem}; return { log => [map { my %params = $_->get_columns; @@ -150,10 +159,11 @@ sub job_list { sub job_entry { my ($self, $id) = @_; - my $job = $self->jobs->find($id, {prefetch => ['problem', 'owner']}); + my $job = $self->jobs->find($id, {prefetch => ['problem', 'owner', 'contest']}); my %params = $job->get_columns; $params{owner_name} = $job->owner->name; $params{problem_name} = $job->problem->name; + $params{contest_name} = $job->contest->name if $params{contest}; $params{results} &&= decode_json $params{results}; $params{size} = length $params{source}; delete $params{source}; @@ -186,8 +196,9 @@ sub update_status { my @PURGE_HOSTS = exists $ENV{PURGE_HOSTS} ? split ' ', $ENV{PURGE_HOSTS} : (); my $ht = HTTP::Tiny->new; -sub purge { $ht->request(PURGE => "http://$_$_[0]") for @PURGE_HOSTS } - +sub purge { + $ht->request(PURGE => "http://$_$_[0]") for @PURGE_HOSTS; +} 1;