Update README and copyright notices
[gruntmaster-data.git] / lib / Gruntmaster / Data.pm
index 3b634ca6f3ebf935bf94af74fad46bc6c10c4a28..d5d7152462e1218a274c5dd1421ee3a9c56513dc 100644 (file)
@@ -4,7 +4,7 @@ use warnings;
 
 use parent qw/Exporter/;
 our $VERSION = '5999.000_013';
-our @EXPORT = qw/dbinit purge db user_list user_entry problem_list problem_entry contest_list contest_entry contest_has_problem job_list job_entry create_job standings update_status rerun_job take_job finish_job/; ## no critic (ProhibitAutomaticExportation)
+our @EXPORT = qw/dbinit purge db user_list user_entry problem_list problem_entry contest_list contest_entry contest_has_problem job_list job_entry create_job standings update_status rerun_job take_job finish_job open_problem/;
 our @EXPORT_OK = @EXPORT;
 
 use JSON::MaybeXS qw/decode_json/;
@@ -252,12 +252,17 @@ sub rerun_job {
 sub take_job {
        my ($daemon) = @_;
        my $id = _query(take_job_sth => $daemon)->list;
-       return $id ? db->select(jobs => '*', {id => $id})->hash : undef;
+       return unless $id;
+       purge '/log/';
+       purge "/log/$id";
+       db->select(jobs => '*', {id => $id})->hash
 }
 
 sub finish_job {
        my ($job, $private, %args) = @_;
        db->update(jobs => \%args, {id => $job->{id}});
+       purge '/log/';
+       purge '/log/' . $job->{id};
        return if $private;
        my $status = {
                problem => $job->{problem},
@@ -268,6 +273,18 @@ sub finish_job {
        eval {
                db->insert(problem_status => $status)
        } or db->update(problem_status => $status, {owner => $job->{owner}, problem => $job->{problem}});
+       purge '/us/' . $job->{owner};
+}
+
+sub open_problem {
+       my ($contest, $problem, $owner, $time) = @_;
+       my $ct = contest_entry($contest);
+       return unless $ct->{id} && $time >= $ct->{start} && $time < $ct->{stop}; ## no critic (ProhibitNegativeExpressionsInUnlessAndUntilConditions)
+       eval { db->insert(opens => { ## no critic (RequireCheckingReturnValueOfEval)
+               contest => $contest,
+               problem => $problem,
+               owner => $owner,
+               time => $time}) };
 }
 
 my @PURGE_HOSTS = exists $ENV{PURGE_HOSTS} ? split ' ', $ENV{PURGE_HOSTS} : ();
@@ -435,6 +452,13 @@ describing the job, or undef if no job was available.
 Updates the job $job with the results in %results. If $private is
 false, also updates the problem_status table.
 
+=item B<open_problem>(I<$contest>, I<$problem>, I<$owner>, I<$time>)
+
+Notes that I<$owner> has opened the problem I<$problem> of contest
+I<$contest> at time I<$time>. If the C<opens> table already contains
+this (I<$contest>, I<$problem>, I<$owner>) triplet, this function does
+nothing.
+
 =back
 
 =head1 AUTHOR
@@ -443,10 +467,10 @@ Marius Gavrilescu E<lt>marius@ieval.roE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2014 by Marius Gavrilescu
+Copyright (C) 2014-2015 by Marius Gavrilescu
 
 This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself, either Perl version 5.18.1 or,
+it under the same terms as Perl itself, either Perl version 5.20.1 or,
 at your option, any later version of Perl 5 you may have available.
 
 
This page took 0.011546 seconds and 4 git commands to generate.