Skip to content
Snippets Groups Projects
Commit 268bd6bc authored by Martin Mareš's avatar Martin Mareš
Browse files

org_contest: Right a Rights importujeme

parent b2dc4522
No related branches found
No related tags found
1 merge request!9WIP: Zárodek uživatelské části webu a submitování
...@@ -15,6 +15,7 @@ import mo.csv ...@@ -15,6 +15,7 @@ import mo.csv
import mo.db as db import mo.db as db
import mo.imports import mo.imports
import mo.rights import mo.rights
from mo.rights import Right, Rights
import mo.util import mo.util
from mo.web import app from mo.web import app
from mo.web.util import PagerForm from mo.web.util import PagerForm
...@@ -62,7 +63,7 @@ class ParticipantsActionForm(FlaskForm): ...@@ -62,7 +63,7 @@ class ParticipantsActionForm(FlaskForm):
remove_participation = wtforms.SubmitField("Smazat záznam o účasti") remove_participation = wtforms.SubmitField("Smazat záznam o účasti")
def do_action(self, round: db.Round, rights: mo.rights.Rights, query: Query) -> bool: def do_action(self, round: db.Round, rights: Rights, query: Query) -> bool:
"""Do participation modification on partipations from given query """Do participation modification on partipations from given query
(possibly filtered by checkboxes). `rights` param is used to check rights (possibly filtered by checkboxes). `rights` param is used to check rights
for contest of each modified participation or for contest in which for contest of each modified participation or for contest in which
...@@ -91,7 +92,7 @@ class ParticipantsActionForm(FlaskForm): ...@@ -91,7 +92,7 @@ class ParticipantsActionForm(FlaskForm):
flash(f"Nepovedlo se najít soutěž v kole {round.round_code()} v oblasti {contest_place.name}", 'danger') flash(f"Nepovedlo se najít soutěž v kole {round.round_code()} v oblasti {contest_place.name}", 'danger')
return False return False
rights.get_for_contest(contest) rights.get_for_contest(contest)
if not rights.have_right(mo.rights.Right.manage_contest): if not rights.have_right(Right.manage_contest):
flash(f"Nemáte právo ke správě soutěže v kole {round.round_code()} v oblasti {contest_place.name}, nelze do ní přesunout účastníky", 'danger') flash(f"Nemáte právo ke správě soutěže v kole {round.round_code()} v oblasti {contest_place.name}, nelze do ní přesunout účastníky", 'danger')
return False return False
elif self.remove_participation.data: elif self.remove_participation.data:
...@@ -116,7 +117,7 @@ class ParticipantsActionForm(FlaskForm): ...@@ -116,7 +117,7 @@ class ParticipantsActionForm(FlaskForm):
if pion.contest_id in rights_cache: if pion.contest_id in rights_cache:
continue continue
rights.get_for_contest(pion.contest) rights.get_for_contest(pion.contest)
if rights.have_right(mo.rights.Right.manage_contest): if rights.have_right(Right.manage_contest):
rights_cache.add(pion.contest_id) rights_cache.add(pion.contest_id)
continue continue
flash( flash(
...@@ -182,10 +183,10 @@ def get_contest(id: int) -> db.Contest: ...@@ -182,10 +183,10 @@ def get_contest(id: int) -> db.Contest:
return contest return contest
def get_contest_rr(id: int, right_needed: Optional[mo.rights.Right] = None) -> Tuple[db.Contest, mo.rights.Rights]: def get_contest_rr(id: int, right_needed: Optional[Right] = None) -> Tuple[db.Contest, Rights]:
contest = get_contest(id) contest = get_contest(id)
rr = mo.rights.Rights(g.user) rr = Rights(g.user)
rr.get_for_contest(contest) rr.get_for_contest(contest)
if not (right_needed is None or rr.have_right(right_needed)): if not (right_needed is None or rr.have_right(right_needed)):
...@@ -202,13 +203,13 @@ def org_contest(id: int): ...@@ -202,13 +203,13 @@ def org_contest(id: int):
'org_contest.html', 'org_contest.html',
contest=contest, contest=contest,
rights=sorted(rr.current_rights, key=lambda r: r. name), rights=sorted(rr.current_rights, key=lambda r: r. name),
can_manage=rr.have_right(mo.rights.Right.manage_contest), can_manage=rr.have_right(Right.manage_contest),
) )
@app.route('/org/contest/c/<int:id>/import', methods=('GET', 'POST')) @app.route('/org/contest/c/<int:id>/import', methods=('GET', 'POST'))
def org_contest_import(id: int): def org_contest_import(id: int):
contest, rr = get_contest_rr(id, mo.rights.Right.manage_contest) contest, rr = get_contest_rr(id, Right.manage_contest)
form = ImportForm() form = ImportForm()
errs = [] errs = []
...@@ -249,7 +250,7 @@ def org_contest_import_template(): ...@@ -249,7 +250,7 @@ def org_contest_import_template():
@app.route('/org/contest/c/<int:id>/ucastnici', methods=('GET', 'POST')) @app.route('/org/contest/c/<int:id>/ucastnici', methods=('GET', 'POST'))
def org_contest_list(id: int): def org_contest_list(id: int):
contest, rr = get_contest_rr(id) contest, rr = get_contest_rr(id)
can_edit = rr.have_right(mo.rights.Right.manage_contest) can_edit = rr.have_right(Right.manage_contest)
format = request.args.get('format', "") format = request.args.get('format', "")
filter = ParticipantsFilterForm(request.args) filter = ParticipantsFilterForm(request.args)
...@@ -371,7 +372,7 @@ def make_contestant_table(query: Query, add_checkbox: bool = False, add_contest_ ...@@ -371,7 +372,7 @@ def make_contestant_table(query: Query, add_checkbox: bool = False, add_contest_
def org_contest_solutions(id: int): def org_contest_solutions(id: int):
# FIXME: Práva? # FIXME: Práva?
# FIXME: Hlavička stránky podle Jirkova předělání # FIXME: Hlavička stránky podle Jirkova předělání
contest, rr = get_contest_rr(id, mo.rights.Right.manage_contest) contest, rr = get_contest_rr(id, Right.manage_contest)
format = request.args.get('format', "") format = request.args.get('format', "")
sess = db.get_session() sess = db.get_session()
...@@ -446,7 +447,7 @@ def org_contest_solutions(id: int): ...@@ -446,7 +447,7 @@ def org_contest_solutions(id: int):
@app.route('/org/contest/c/<int:id>/proctor-import', methods=('GET', 'POST')) @app.route('/org/contest/c/<int:id>/proctor-import', methods=('GET', 'POST'))
def org_proctor_import(id: int): def org_proctor_import(id: int):
contest, rr = get_contest_rr(id, mo.rights.Right.manage_contest) contest, rr = get_contest_rr(id, Right.manage_contest)
form = ImportForm() form = ImportForm()
errs = [] errs = []
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment