Source code for oioioi.participants.views

from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from oioioi.base.menu import account_menu_registry
from oioioi.base.permissions import enforce_condition, not_anonymous
from oioioi.contests.menu import (
    contest_admin_menu_registry,
    personal_data_menu_registry,
)
from oioioi.contests.utils import (
    can_see_personal_data,
    contest_exists,
    is_contest_admin,
)
from oioioi.participants.models import Participant
from oioioi.participants.utils import (
    can_edit_registration,
    can_register,
    can_unregister,
    contest_has_participants,
    render_participants_data_csv,
    serialize_participants_data,
)

account_menu_registry.register(
    'participants_registration',
    _("Register to the contest"),
    lambda request: reverse(
        'participants_register', kwargs={'contest_id': request.contest.id}
    ),
    condition=contest_exists & contest_has_participants & can_register,
    order=80,
)

account_menu_registry.register(
    'participants_edit_registration',
    _("Edit contest registration"),
    lambda request: reverse(
        'participants_register', kwargs={'contest_id': request.contest.id}
    ),
    condition=contest_exists & contest_has_participants & can_edit_registration,
    order=80,
)


@enforce_condition(not_anonymous & contest_exists & contest_has_participants)
[docs]def registration_view(request): rcontroller = request.contest.controller.registration_controller() return rcontroller.registration_view(request)
@enforce_condition( not_anonymous & contest_exists & contest_has_participants & can_unregister )
[docs]def unregistration_view(request): if request.method == 'POST': participant = get_object_or_404( Participant, contest=request.contest, user=request.user ) participant.delete() return redirect('index') return TemplateResponse(request, 'participants/unregister.html')
@contest_admin_menu_registry.register_decorator( _("Participants' data"), lambda request: reverse( 'participants_data', kwargs={'contest_id': request.contest.id} ), condition=is_contest_admin, order=100, ) @personal_data_menu_registry.register_decorator( _("Participants' data"), lambda request: reverse( 'participants_data', kwargs={'contest_id': request.contest.id} ), condition=(can_see_personal_data & ~is_contest_admin), order=100, ) @enforce_condition( not_anonymous & contest_exists & contest_has_participants & can_see_personal_data )
[docs]def participants_data(request): context = serialize_participants_data( request, Participant.objects.filter(contest=request.contest) ) return TemplateResponse(request, 'participants/data.html', context)
@enforce_condition( not_anonymous & contest_exists & contest_has_participants & can_see_personal_data )
[docs]def participants_data_csv(request): return render_participants_data_csv( request, Participant.objects.filter(contest=request.contest), request.contest.id )