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'
    ]
Beispiel #2
0
    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)
Beispiel #3
0
            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)
Beispiel #4
0
    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)
Beispiel #5
0
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
Beispiel #6
0
                    '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
Beispiel #7
0
        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)
Beispiel #8
0
                    '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
Beispiel #9
0
    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)
Beispiel #10
0
        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)
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
    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)
Beispiel #14
0
        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
Beispiel #15
0
        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)
Beispiel #16
0
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)
Beispiel #17
0
        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
Beispiel #18
0
        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)
Beispiel #19
0
                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)