50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from django.views.generic import ListView
|
|
from django.utils.translation import gettext as _, gettext_lazy
|
|
from django.db.models import Count
|
|
from django.http import HttpResponseForbidden
|
|
|
|
from judge.utils.diggpaginator import DiggPaginator
|
|
from judge.models import VolunteerProblemVote, Problem
|
|
|
|
|
|
class InternalProblem(ListView):
|
|
model = Problem
|
|
title = _("Internal problems")
|
|
template_name = "internal/base.html"
|
|
paginate_by = 100
|
|
context_object_name = "problems"
|
|
|
|
def get_paginator(
|
|
self, queryset, per_page, orphans=0, allow_empty_first_page=True, **kwargs
|
|
):
|
|
return DiggPaginator(
|
|
queryset,
|
|
per_page,
|
|
body=6,
|
|
padding=2,
|
|
orphans=orphans,
|
|
allow_empty_first_page=allow_empty_first_page,
|
|
**kwargs
|
|
)
|
|
|
|
def get_queryset(self):
|
|
queryset = (
|
|
Problem.objects.annotate(vote_count=Count("volunteer_user_votes"))
|
|
.filter(vote_count__gte=1)
|
|
.order_by("-vote_count")
|
|
)
|
|
return queryset
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(InternalProblem, self).get_context_data(**kwargs)
|
|
context["page_type"] = "problem"
|
|
context["title"] = self.title
|
|
context["page_prefix"] = self.request.path + "?page="
|
|
context["first_page_href"] = self.request.path
|
|
|
|
return context
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
if request.user.is_superuser:
|
|
return super(InternalProblem, self).get(request, *args, **kwargs)
|
|
return HttpResponseForbidden()
|