def get_form(self, request, obj=None, **kwargs): Form = super(RegionAdmin, self).get_form(request, obj, **kwargs) def form_wrapper(*args, **kwargs): form = Form(*args, **kwargs) form.request_contest = request.contest return form return form_wrapper admin.site.register(Region, RegionAdmin) contest_admin_menu_registry.register( 'regions', _("Regions"), lambda request: reverse('oioioiadmin:oi_region_changelist'), condition=is_onsite_contest, order=21) class SchoolAdmin(admin.ModelAdmin): list_display = ('name', 'participants_link', 'address', 'postal_code_link', 'city', 'province', 'phone', 'email', 'is_active', 'is_approved', 'similar_schools') list_filter = ('province', 'city', 'is_approved', 'is_active') search_fields = ('name', 'address', 'postal_code') actions = [ 'make_active', 'make_inactive', 'approve', 'disapprove', 'merge_action', 'delete_selected' ]
def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'problem_instance': qs = ProblemInstance.objects if request.contest: qs = qs.filter(contest=request.contest) kwargs['queryset'] = qs return super(ProblemBalloonsConfigAdmin, self) \ .formfield_for_foreignkey(db_field, request, **kwargs) contest_site.contest_register(ProblemBalloonsConfig, ProblemBalloonsConfigAdmin) contest_admin_menu_registry.register( 'problemballoonsconfig_admin', _("Balloons colors"), lambda request: reverse( 'oioioiadmin:balloons_problemballoonsconfig_changelist'), order=60) class BalloonsDisplayAdmin(admin.ModelAdmin): list_display = ['ip_addr', 'user'] def has_add_permission(self, request): return is_contest_admin(request) def has_change_permission(self, request, obj=None): return is_contest_admin(request) def has_delete_permission(self, request, obj=None): return self.has_change_permission(request, obj)
return '' contest = instance.submission.problem_instance.contest href = reverse('submission', kwargs={'contest_id': contest.id, 'submission_id': instance.submission.id}) return make_html_link(href, instance.submission.id) related_submission.short_description = _("Related submission") def accept_action(self, request, queryset): queryset = queryset.order_by('id') for mailsubmission in queryset: accept_mail_submission(request, mailsubmission) accept_action.short_description = _("Accept selected submissions") def queryset(self, request): queryset = super(MailSubmissionAdmin, self).queryset(request) queryset = queryset.filter(problem_instance__contest=request.contest) queryset = queryset.order_by('-id') return queryset def changelist_view(self, request, extra_context=None): return super(MailSubmissionAdmin, self) \ .changelist_view(request, extra_context=extra_context) contest_site.contest_register(MailSubmission, MailSubmissionAdmin) contest_admin_menu_registry.register('mail_submissions_admin', _("Postal submissions"), lambda request: reverse('oioioiadmin:mailsubmit_mailsubmission_changelist'), order=40, condition=is_mailsubmit_used)
related_submission.short_description = _("Related submission") def accept_action(self, request, queryset): queryset = queryset.order_by('id') for mailsubmission in queryset: accept_mail_submission(request, mailsubmission) accept_action.short_description = _("Accept selected submissions") def get_queryset(self, request): queryset = super(MailSubmissionAdmin, self).get_queryset(request) queryset = queryset.filter(problem_instance__contest=request.contest) queryset = queryset.order_by('-id') return queryset def changelist_view(self, request, extra_context=None): return super(MailSubmissionAdmin, self) \ .changelist_view(request, extra_context=extra_context) contest_site.contest_register(MailSubmission, MailSubmissionAdmin) contest_admin_menu_registry.register( 'mail_submissions_admin', _("Postal submissions"), lambda request: reverse('oioioiadmin:mailsubmit_mailsubmission_changelist' ), order=40, condition=is_mailsubmit_used)
class ContestDependentParticipantAdmin(admin.InstanceDependentAdmin): default_participant_admin = NoParticipantAdmin def _find_model_admin(self, request, object_id): rcontroller = request.contest.controller.registration_controller() if has_participants_admin(request): participant_admin = rcontroller.participant_admin(self.model, self.admin_site) else: participant_admin = self.default_participant_admin(self.model, self.admin_site) return participant_admin admin.site.register(Participant, ContestDependentParticipantAdmin) contest_admin_menu_registry.register('participants', _("Participants"), lambda request: reverse('oioioiadmin:participants_participant_changelist'), condition=has_participants_admin, order=30) class ParticipantInline(admin.TabularInline): model = Participant extra = 0 readonly_fields = ('contest', 'status') def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): # Protected by parent ModelAdmin return True
'submission__problem_instance' ] def get_queryset(self, request): queryset = super(SubmissionsSimilarityEntryAdmin, self) \ .get_queryset(request) queryset = queryset.filter( submission__problem_instance__contest=request.contest) queryset = queryset.order_by('-id') return queryset contest_site.contest_register(SubmissionsSimilarityEntry, SubmissionsSimilarityEntryAdmin) contest_admin_menu_registry.register('submissions_similarity', _("Similar submits"), lambda request: reverse( 'oioioiadmin:similarsubmits_submissionssimilarityentry_changelist'), order=100) class SubmisionsSimilarityEntryInline(admin.TabularInline): model = SubmissionsSimilarityEntry extra = 0 raw_id_fields = ['submission'] def has_add_permission(self, request): return True def has_change_permission(self, request, obj=None): return True
return self.has_change_permission(request, obj) def get_queryset(self, request): qs = super(TeamsAdmin, self).get_queryset(request) qs = qs.filter(contest=request.contest) return qs def save_form(self, request, *args, **kwargs): obj = super(TeamsAdmin, self).save_form(request, *args, **kwargs) obj.contest = request.contest return obj contest_site.contest_register(Team, TeamsAdmin) contest_admin_menu_registry.register('teams', _("Teams"), lambda request: reverse('oioioiadmin:teams_team_changelist'), condition=teams_enabled, order=30) class TeamsConfigInline(admin.TabularInline): model = TeamsConfig class TeamsAdminMixin(object): """Adds :class:`~oioioi.teams.models.TeamsConfig` to an admin panel. """ def __init__(self, *args, **kwargs): super(TeamsAdminMixin, self).__init__(*args, **kwargs) self.inlines = self.inlines + [TeamsConfigInline] ContestAdmin.mix_in(TeamsAdminMixin)
'submission__problem_instance' ] def queryset(self, request): queryset = super(SubmissionsSimilarityEntryAdmin, self) \ .queryset(request) queryset = queryset.filter( submission__problem_instance__contest=request.contest) queryset = queryset.order_by('-id') return queryset contest_site.contest_register(SubmissionsSimilarityEntry, SubmissionsSimilarityEntryAdmin) contest_admin_menu_registry.register('submissions_similarity', _("Similar submits"), lambda request: reverse( 'oioioiadmin:similarsubmits_submissionssimilarityentry_changelist'), order=100) class SubmisionsSimilarityEntryInline(admin.TabularInline): model = SubmissionsSimilarityEntry extra = 0 raw_id_fields = ['submission'] def has_add_permission(self, request): return True def has_change_permission(self, request, obj=None): return True
def user_full_name(self, instance): return instance.user.get_full_name() user_full_name.short_description = _("User name") user_full_name.admin_order_field = 'user__last_name' def guilty_text(self, instance): return _("Yes") if instance.guilty else _("No") guilty_text.short_description = _("Guilty") guilty_text.admin_order_field = 'guilty' def get_custom_list_select_related(self): return super(DisqualificationAdmin, self)\ .get_custom_list_select_related() \ + ['submission', 'user', 'submission__problem_instance'] def get_queryset(self, request): return super(DisqualificationAdmin, self).get_queryset(request) \ .filter(contest=request.contest) \ .order_by('-id') contest_site.contest_register(Disqualification, DisqualificationAdmin) contest_admin_menu_registry.register( 'disqualification_admin', _("Custom disqualification"), lambda request: reverse( 'oioioiadmin:disqualification_disqualification_changelist'), order=100)
qs = super(ProblemBalloonsConfigAdmin, self).get_queryset(request) return qs.filter(problem_instance__contest=request.contest) def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'problem_instance': qs = ProblemInstance.objects if request.contest: qs = qs.filter(contest=request.contest) kwargs['queryset'] = qs return super(ProblemBalloonsConfigAdmin, self) \ .formfield_for_foreignkey(db_field, request, **kwargs) contest_site.contest_register(ProblemBalloonsConfig, ProblemBalloonsConfigAdmin) contest_admin_menu_registry.register('problemballoonsconfig_admin', _("Balloon colors"), lambda request: reverse('oioioiadmin:balloons_problemballoonsconfig_changelist'), order=60) class BalloonsDisplayAdmin(admin.ModelAdmin): list_display = ['ip_addr', 'user'] def has_add_permission(self, request): return is_contest_admin(request) def has_change_permission(self, request, obj=None): return is_contest_admin(request) def has_delete_permission(self, request, obj=None): return self.has_change_permission(request, obj)
from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ from oioioi.contests.menu import contest_admin_menu_registry contest_admin_menu_registry.register('export_submissions', _("Export submissions"), lambda request: reverse('export_submissions'), order=100)
from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ from oioioi.contests.menu import contest_admin_menu_registry from oioioi.contests.utils import is_contest_admin contest_admin_menu_registry.register('export_submissions', _("Export submissions"), lambda request: reverse('export_submissions'), is_contest_admin, order=100)
def save_model(self, request, obj, form, change): obj.contest = request.contest obj.save() def get_form(self, request, obj=None, **kwargs): Form = super(RegionAdmin, self).get_form(request, obj, **kwargs) def form_wrapper(*args, **kwargs): form = Form(*args, **kwargs) form.request_contest = request.contest return form return form_wrapper admin.site.register(Region, RegionAdmin) contest_admin_menu_registry.register('regions', _("Regions"), lambda request: reverse('oioioiadmin:oi_region_changelist'), condition=is_onsite_contest, order=21) class SchoolAdmin(admin.ModelAdmin): list_display = ('name', 'address', 'postal_code', 'city', 'province', 'phone', 'email') list_filter = ('province', 'city') search_fields = ('name', 'address', 'postal_code') ordering = ('city', 'name') admin.site.register(School, SchoolAdmin) admin.system_admin_menu_registry.register('schools', _("Schools"), lambda request: reverse('oioioiadmin:oi_school_changelist'), order=20)
return False def came_from(self): return reverse('oioioiadmin:problems_contestproblempackage_changelist') def get_actions(self, request): actions = super(ContestProblemPackageAdmin, self).get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions contest_site.contest_register(ContestProblemPackage, ContestProblemPackageAdmin) contest_admin_menu_registry.register('problempackage_change', _("Problem packages"), lambda request: reverse('oioioiadmin:problems_contestproblempackage_changelist'), condition=((~is_superuser) & pending_contest_packages), order=70) class MainProblemInstanceAdmin(admin.ModelAdmin): fields = ('problem', 'short_name') readonly_fields = ('problem',) def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): if obj is None: return False problem = obj.problem
verbose_name = _("Contest Queued Jobs") class ContestJobsQueueAdmin(SystemJobsQueueAdmin): def __init__(self, *args, **kwargs): super(ContestJobsQueueAdmin, self).__init__(*args, **kwargs) self.list_display = [ x for x in self.list_display if x not in ('contest', 'celery_task_id_link') ] self.list_display_links = None self.list_filter = self.list_filter + [UserListFilter] def has_change_permission(self, request, obj=None): if obj: return False return is_contest_admin(request) def get_queryset(self, request): qs = super(ContestJobsQueueAdmin, self).get_queryset(request) return qs.filter(submission__problem_instance__contest=request.contest) contest_site.contest_register(ContestQueuedJob, ContestJobsQueueAdmin) contest_admin_menu_registry.register( 'queuedjob_admin', _("Evaluation queue"), lambda request: reverse('oioioiadmin:evalmgr_contestqueuedjob_changelist'), condition=(lambda request: not request.user.is_superuser), order=60)
class ContestQueuedJob(QueuedJob): class Meta(object): proxy = True verbose_name = _("Contest Queued Jobs") class ContestJobsQueueAdmin(SystemJobsQueueAdmin): def __init__(self, *args, **kwargs): super(ContestJobsQueueAdmin, self).__init__(*args, **kwargs) self.list_display = [x for x in self.list_display if x not in ('contest', 'celery_task_id_link')] self.list_display_links = None self.list_filter = self.list_filter + [UserListFilter] def has_change_permission(self, request, obj=None): if obj: return False return is_contest_admin(request) def get_queryset(self, request): qs = super(ContestJobsQueueAdmin, self).get_queryset(request) return qs.filter(submission__problem_instance__contest=request.contest) contest_site.contest_register(ContestQueuedJob, ContestJobsQueueAdmin) contest_admin_menu_registry.register('queuedjob_admin', _("Evaluation queue"), lambda request: reverse( 'oioioiadmin:evalmgr_contestqueuedjob_changelist'), condition=(lambda request: not request.user.is_superuser), order=60)
if has_participants_admin(request): participant_admin = rcontroller.participant_admin( self.model, self.admin_site) else: participant_admin = self.default_participant_admin( self.model, self.admin_site) return participant_admin def _model_admin_for_instance(self, request, instance=None): raise NotImplementedError contest_site.contest_register(Participant, ContestDependentParticipantAdmin) contest_admin_menu_registry.register( 'participants', _("Participants"), lambda request: reverse('oioioiadmin:participants_participant_changelist'), condition=has_participants_admin, order=30) class ParticipantInline(admin.TabularInline): model = Participant extra = 0 readonly_fields = ('contest', 'status') def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): # Protected by parent ModelAdmin return True
return super(ContestAdmin, self).response_change(request, obj) class BaseContestAdmin(admin.MixinsAdmin): default_model_admin = ContestAdmin def _mixins_for_instance(self, request, instance): if instance: controller = instance.controller return controller.mixins_for_admin() + \ controller.registration_controller().mixins_for_admin() admin.site.register(Contest, BaseContestAdmin) contest_admin_menu_registry.register('contest_change', _("Settings"), lambda request: reverse('oioioiadmin:contests_contest_change', args=(request.contest.id,)), order=20) class ProblemInstanceAdmin(admin.ModelAdmin): form = ProblemInstanceForm fields = ('contest', 'round', 'problem', 'short_name') list_display = ('name_link', 'short_name_link', 'round', 'actions_field') readonly_fields = ('contest', 'problem') def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): return request.contest is not None and is_contest_admin(request)
force_text(instance.submission.problem_instance)) ) submission_link.short_description = _("Submission") def user_full_name(self, instance): return instance.user.get_full_name() user_full_name.short_description = _("User name") user_full_name.admin_order_field = 'user__last_name' def guilty_text(self, instance): return _("Yes") if instance.guilty else _("No") guilty_text.short_description = _("Guilty") guilty_text.admin_order_field = 'guilty' def get_custom_list_select_related(self): return super(DisqualificationAdmin, self)\ .get_custom_list_select_related() \ + ['submission', 'user', 'submission__problem_instance'] def get_queryset(self, request): return super(DisqualificationAdmin, self).get_queryset(request) \ .filter(contest=request.contest) \ .order_by('-id') contest_site.contest_register(Disqualification, DisqualificationAdmin) contest_admin_menu_registry.register('disqualification_admin', _("Custom disqualification"), lambda request: reverse('oioioiadmin:disqualification_disqualification_changelist'), order=100)