- return reply 'This contest has finished' if contest && contest->is_finished;
- return reply 'This contest has not yet started' if !admin && contest && contest->is_pending;
- return reply 'This problem does not belong to this contest' if !contest && !problem->is_in_archive || contest && !db->contest_problems->find($_{contest}, $_{problem});
+ my $problem = problem_entry $_{problem};
+ my $private = $problem->{private} ? 1 : 0;
+ if ($_{contest}) {
+ $private = 0;
+ my $contest = contest_entry $_{contest};
+ return reply 'This contest has not yet started' if !$contest->{started};
+ 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};
+ }