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()