import types
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from oioioi.base import admin
from oioioi.base.menu import personal_menu_registry
from oioioi.base.permissions import is_superuser
from oioioi.usergroups.models import UserGroup, UserGroupRanking
from oioioi.contests.admin import ContestAdmin, NO_CATEGORY
[docs]def get_user_name_and_login_bounded(self, user):
return "%s (%s)" % (user.get_full_name(), user.username)
[docs]class UserGroupAdmin(admin.ModelAdmin):
[docs] exclude = ('addition_config', 'sharing_config', 'contests')
[docs] filter_horizontal = ('owners', 'members')
[docs] search_fields = ('name',)
admin.site.register(UserGroup, UserGroupAdmin)
admin.system_admin_menu_registry.register(
'user_groups',
_("User Groups"),
lambda request: reverse('oioioiadmin:usergroups_usergroup_changelist'),
condition=is_superuser,
order=10,
)
personal_menu_registry.register(
'user_groups',
_("User Groups"),
lambda request: reverse('teacher_usergroups_list'),
lambda request: request.user.has_perm('teachers.teacher'),
order=20,
)
[docs]class UserGroupRankingInline(admin.StackedInline):
[docs] model = UserGroupRanking
[docs]class UserGroupRankingsContestAdminMixin(object):
def __init__(self, *args, **kwargs):
super(UserGroupRankingsContestAdminMixin, self).__init__(*args, **kwargs)
self.inlines = tuple(self.inlines) + (UserGroupRankingInline,)
ContestAdmin.mix_in(UserGroupRankingsContestAdminMixin)