Skip to content
Snippets Groups Projects

Tabulka Moje soutěže

Closed Jan Prachař requested to merge honza/mr7 into devel
+ 22
15
@@ -200,28 +200,31 @@ class Rights:
# Interní rozhodovaní o dostupnosti zadání
def _check_view_statement(self, round: db.Round):
def _check_view_statement(self, round: db.Round) -> tuple[bool, str]:
if round.tasks_file is None:
return False
return False, "zatím chybí"
if self.have_right(Right.manage_round):
# Správce kola může vždy všechno
return True
# Pokud už soutěž skončila, přístup k zadání má každý org.
# XXX: Rozhodujeme podle stavu kola, nikoliv soutěže!
if round.state in [db.RoundState.grading, db.RoundState.closed]:
return True
return True, ""
# Od stanoveného času vidí zadání orgové s právem view_statement.
if (self.have_right(Right.view_statement)
and round.state != db.RoundState.preparing
and round.pr_tasks_start is not None
and mo.now >= round.pr_tasks_start):
return True
if (self.have_right(Right.view_statement)):
# Ve zbylých případech jsme konzervativní a zadání neukazujeme
return False
if (round.state == db.RoundState.preparing
or round.pr_tasks_start is None):
return False, "až začne soutěž"
if mo.now < round.pr_tasks_start:
return False, mo.util_format.timedelta(round.pr_tasks_start)
return True, ""
if round.state not in [db.RoundState.grading, db.RoundState.closed]:
return False, "až začnou opravy"
# Pokud už soutěž skončila, přístup k zadání má každý org.
# XXX: Rozhodujeme podle stavu kola, nikoliv soutěže!
return True, ""
class RoundRights(Rights):
@@ -279,6 +282,10 @@ class ContestRights(Rights):
or self.have_right(Right.manage_contest))
def can_view_statement(self) -> bool:
can, _ = self._check_view_statement(self.contest.round)
return can
def can_view_statement_with_reason(self) -> (bool, str):
return self._check_view_statement(self.contest.round)
Loading