Source code for oioioi.mp.admin

from django.utils.translation import gettext_lazy as _

from oioioi.base import admin
from oioioi.contests.admin import ContestAdmin
from oioioi.mp.controllers import MPContestController
from oioioi.mp.forms import MPRegistrationForm
from oioioi.mp.models import MPRegistration, SubmissionScoreMultiplier
from oioioi.participants.admin import ParticipantAdmin


[docs]class MPRegistrationInline(admin.StackedInline):
[docs] model = MPRegistration
[docs] fk_name = 'participant'
[docs] form = MPRegistrationForm
[docs] can_delete = False
[docs] inline_classes = ('collapse open',)
# We don't allow admins to change users' acceptance of contest's terms.
[docs] exclude = ('terms_accepted',)
[docs]class MPRegistrationParticipantAdmin(ParticipantAdmin):
[docs] list_display = ParticipantAdmin.list_display
[docs] inlines = tuple(ParticipantAdmin.inlines) + (MPRegistrationInline,)
[docs] readonly_fields = ['user']
[docs] def has_add_permission(self, request): return request.user.is_superuser
[docs] def has_delete_permission(self, request, obj=None): return request.user.is_superuser
[docs] def get_actions(self, request): actions = super(MPRegistrationParticipantAdmin, self).get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions
[docs]class SubmissionScoreMultiplierInline(admin.TabularInline):
[docs] model = SubmissionScoreMultiplier
[docs] extra = 0
[docs] category = _("Advanced")
[docs]class SubmissionScoreMultiplierAdminMixin(object): """Adds :class:`~oioioi.mp.models.SubmissionScoreMultiplier` to an admin panel when contest controller is MPContestController. """
[docs] def get_inlines(self, request, obj): inlines = super().get_inlines(request, obj) if hasattr(obj, 'controller') and isinstance( obj.controller, MPContestController ): return inlines + [SubmissionScoreMultiplierInline] return inlines
ContestAdmin.mix_in(SubmissionScoreMultiplierAdminMixin)