예제 #1
0
    def decorator(view):
        view = enforce_condition(condition, login_redirect=False)(view)
        actions[name] = view

        if menu_text is not None:
            portal_admin_menu_registry.register(name, menu_text,
                    menu_url_generator, condition, order=menu_order)

        return view
예제 #2
0
파일: actions.py 프로젝트: marmistrz/oioioi
    def decorator(view):
        view = enforce_condition(condition, login_redirect=False)(view)
        actions[name] = view

        if menu_text is not None:
            portal_admin_menu_registry.register(name, menu_text,
                    menu_url_generator, condition, order=menu_order)

        return view
예제 #3
0
파일: admin.py 프로젝트: cytadela8/oioioi
class SuspendJudgeProblemInstanceAdminMixin(object):
    """Sets up admin panel for suspendjudge app.
    """
    def __init__(self, *args, **kwargs):
        super(SuspendJudgeProblemInstanceAdminMixin,
              self).__init__(*args, **kwargs)
        self.list_display = self.list_display + ('suspended_on_init_display',
                                                 'suspended_on_final_display')

    def _resume(self, instance_id):
        get_object_or_404(SuspendedProblem, problem_instance=instance_id) \
            .delete()

    def _rejudge(self, instance_id):
        suspended = Submission.objects.filter(queuedjob__state="SUSPENDED",
                                              problem_instance=instance_id)
        for submission in suspended:
            QueuedJob.objects.filter(submission=submission).delete()
            submission.problem_instance.controller.judge(submission)

    def _clear_queue(self, instance_id):
        QueuedJob.objects.filter(submission__problem_instance=instance_id,
                                 state="SUSPENDED").delete()

    def _suspend(self, problem_instance_id, suspend_init_tests=True):
        problem_instance = get_object_or_404(ProblemInstance,
                                             pk=problem_instance_id)
        SuspendedProblem.objects.get_or_create(
            problem_instance=problem_instance,
            suspend_init_tests=suspend_init_tests)

    @method_decorator(enforce_condition(contest_exists & is_contest_admin))
    @method_decorator(require_POST)
    def resume_and_rejudge_view(self, request, problem_instance_id):
        self._resume(problem_instance_id)
        self._rejudge(problem_instance_id)
        return redirect('oioioiadmin:contests_probleminstance_changelist')

    @method_decorator(enforce_condition(contest_exists & is_contest_admin))
    @method_decorator(require_POST)
    def resume_and_clear_view(self, request, problem_instance_id):
        self._resume(problem_instance_id)
        self._clear_queue(problem_instance_id)
        return redirect('oioioiadmin:contests_probleminstance_changelist')

    @method_decorator(enforce_condition(contest_exists & is_contest_admin))
    @method_decorator(require_POST)
    def suspend_all_view(self, request, problem_instance_id):
        self._suspend(problem_instance_id)
        return redirect('oioioiadmin:contests_probleminstance_changelist')

    @method_decorator(enforce_condition(contest_exists & is_contest_admin))
    @method_decorator(require_POST)
    def suspend_all_but_init_view(self, request, problem_instance_id):
        self._suspend(problem_instance_id, False)
        return redirect('oioioiadmin:contests_probleminstance_changelist')

    def _view_href(self, instance, view_name):
        return reverse('oioioiadmin:suspendjudge_' + view_name,
                       kwargs={'problem_instance_id': instance.pk})

    def inline_actions(self, instance):
        if is_suspended(instance):
            actions = [(self._view_href(instance, 'resume_and_rejudge'),
                        _("Resume and rejudge"), 'POST'),
                       (self._view_href(instance, 'resume_and_clear'),
                        _("Resume and clear queue"), 'POST')]
        else:
            actions = [(self._view_href(instance, 'suspend_all'),
                        _("Suspend all tests"), 'POST'),
                       (self._view_href(instance, 'suspend_all_but_init'),
                        _("Suspend final tests"), 'POST')]
        return super(SuspendJudgeProblemInstanceAdminMixin, self) \
                   .inline_actions(instance) + actions

    def suspended_on_init_display(self, instance):
        return not is_suspended_on_init(instance)

    suspended_on_init_display.short_description = _("Judge initial")
    suspended_on_init_display.boolean = True

    def suspended_on_final_display(self, instance):
        return not is_suspended(instance)

    suspended_on_final_display.short_description = _("Judge final")
    suspended_on_final_display.boolean = True

    def get_urls(self):
        urls = super(SuspendJudgeProblemInstanceAdminMixin, self).get_urls()
        extra_urls = [
            url(r'(?P<problem_instance_id>\d+)/resume_and_rejudge/$',
                self.resume_and_rejudge_view,
                name='suspendjudge_resume_and_rejudge'),
            url(r'(?P<problem_instance_id>\d+)/resume_and_clear/$',
                self.resume_and_clear_view,
                name='suspendjudge_resume_and_clear'),
            url(r'(?P<problem_instance_id>\d+)/suspend_all/$',
                self.suspend_all_view,
                name='suspendjudge_suspend_all'),
            url(r'(?P<problem_instance_id>\d+)/suspend_all_but_init/$',
                self.suspend_all_but_init_view,
                name='suspendjudge_suspend_all_but_init')
        ]
        return extra_urls + urls
예제 #4
0
from oioioi.base.permissions import enforce_condition, not_anonymous
from oioioi.base.utils.user_selection import get_user_hints_view
from oioioi.problemsharing.forms import AddFriendshipForm
from oioioi.problemsharing.models import Friendship
from oioioi.teachers.views import is_teacher

account_menu_registry.register(
    name='friends',
    text=_("Friends"),
    url_generator=lambda request: reverse('problemsharing_friends'),
    condition=is_teacher,
    order=170,
)


@method_decorator(enforce_condition(not_anonymous & is_teacher),
                  name='dispatch')
class FriendshipsView(TemplateView):
    template_name = 'problemsharing/friendship.html'

    def get_context_data(self, **kwargs):
        ctx = super(FriendshipsView, self).get_context_data(**kwargs)
        ctx['form'] = AddFriendshipForm()
        ctx['friends'] = User.objects.filter(
            friendships_received__creator=self.request.user)
        return ctx

    def post(self, request):
        ctx = self.get_context_data()
        if 'befriend' in request.POST:
            # if we would always pass POST data to AddFriendshipForm,