35 lines
No EOL
1.4 KiB
Python
35 lines
No EOL
1.4 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
|
|
return context
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
if request.user.is_superuser:
|
|
return super(InternalProblem, self).get(request, *args, **kwargs)
|
|
return HttpResponseForbidden() |