make invisiable problem visible to super admin

This commit is contained in:
HandsomeHow 2018-11-20 09:56:54 +08:00
parent 2e5fb77947
commit 2070e372c7
2 changed files with 19 additions and 5 deletions

View File

@ -7,7 +7,7 @@ WORKDIR /app
HEALTHCHECK --interval=5s --retries=3 CMD python2 /app/deploy/health_check.py HEALTHCHECK --interval=5s --retries=3 CMD python2 /app/deploy/health_check.py
RUN apk add --update --no-cache build-base nginx openssl curl unzip supervisor jpeg-dev zlib-dev postgresql-dev freetype-dev && \ RUN apk add --update --no-cache build-base nginx openssl curl unzip supervisor jpeg-dev zlib-dev postgresql-dev freetype-dev vim git && \
pip install --no-cache-dir -r /app/deploy/requirements.txt && \ pip install --no-cache-dir -r /app/deploy/requirements.txt && \
apk del build-base --purge apk del build-base --purge

View File

@ -2,6 +2,7 @@ import random
from django.db.models import Q, Count from django.db.models import Q, Count
from utils.api import APIView from utils.api import APIView
from account.decorators import check_contest_permission from account.decorators import check_contest_permission
from account.models import AdminType
from ..models import ProblemTag, Problem, ProblemRuleType from ..models import ProblemTag, Problem, ProblemRuleType
from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer
from contest.models import ContestRuleType from contest.models import ContestRuleType
@ -93,11 +94,18 @@ class ContestProblemAPI(APIView):
@check_contest_permission(check_type="problems") @check_contest_permission(check_type="problems")
def get(self, request): def get(self, request):
problem_id = request.GET.get("problem_id") problem_id = request.GET.get("problem_id")
is_admin = False
if request.user.admin_type == AdminType.SUPER_ADMIN:
is_admin = True
if problem_id: if problem_id:
try: try:
problem = Problem.objects.select_related("created_by").get(_id=problem_id, if is_admin:
contest=self.contest, problem = Problem.objects.select_related("created_by").get(_id=problem_id,
visible=True) contest=self.contest)
else:
problem = Problem.objects.select_related("created_by").get(_id=problem_id,
contest=self.contest,
visible=True)
except Problem.DoesNotExist: except Problem.DoesNotExist:
return self.error("Problem does not exist.") return self.error("Problem does not exist.")
if self.contest.problem_details_permission(request.user): if self.contest.problem_details_permission(request.user):
@ -107,7 +115,13 @@ class ContestProblemAPI(APIView):
problem_data = ProblemSafeSerializer(problem).data problem_data = ProblemSafeSerializer(problem).data
return self.success(problem_data) return self.success(problem_data)
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True) if is_admin:
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest)
for problem in contest_problems:
if not problem.visible:
problem.title = problem.title + " ( HIDEN )"
else:
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
if self.contest.problem_details_permission(request.user): if self.contest.problem_details_permission(request.user):
data = ProblemSerializer(contest_problems, many=True).data data = ProblemSerializer(contest_problems, many=True).data
self._add_problem_status(request, data) self._add_problem_status(request, data)