mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 16:33:22 +00:00
Accept Merge Request #291 dev -> master : (dev -> master)
Merge Request: dev -> master Created By: @virusdefender Accepted By: @virusdefender URL: https://coding.net/u/virusdefender/p/qduoj/git/merge/291
This commit is contained in:
commit
a94a394f63
@ -91,6 +91,10 @@ def check_user_contest_permission(func):
|
|||||||
return render(request, "oj/contest/no_contest_permission.html",
|
return render(request, "oj/contest/no_contest_permission.html",
|
||||||
{"reason": "contest_not_start", "show_tab": False, "contest": contest})
|
{"reason": "contest_not_start", "show_tab": False, "contest": contest})
|
||||||
|
|
||||||
|
# 比赛已经结束了,只拦截 ajax 的答案提交
|
||||||
|
if contest.status == CONTEST_ENDED and request.is_ajax():
|
||||||
|
return error_response(u"比赛已经结束")
|
||||||
|
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
|
|
||||||
return _check_user_contest_permission
|
return _check_user_contest_permission
|
||||||
|
@ -96,7 +96,7 @@ class MessageQueue(object):
|
|||||||
contest_problem.add_ac_number()
|
contest_problem.add_ac_number()
|
||||||
problems_status["contest_problems"][str(contest_problem.id)] = 1
|
problems_status["contest_problems"][str(contest_problem.id)] = 1
|
||||||
else:
|
else:
|
||||||
problems_status["contest_problems"][str(contest_problem.id)] = 1
|
problems_status["contest_problems"][str(contest_problem.id)] = 0
|
||||||
user.problems_status = problems_status
|
user.problems_status = problems_status
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
|
@ -21,8 +21,7 @@ from admin.views import AdminTemplateView
|
|||||||
|
|
||||||
from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView
|
from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView
|
||||||
from submission.views import (SubmissionAPIView, SubmissionAdminAPIView, ContestSubmissionAPIView,
|
from submission.views import (SubmissionAPIView, SubmissionAdminAPIView, ContestSubmissionAPIView,
|
||||||
SubmissionShareAPIView, SubmissionRejudgeAdminAPIView,
|
SubmissionShareAPIView, SubmissionRejudgeAdminAPIView)
|
||||||
ContestSubmissionAdminAPIView)
|
|
||||||
from monitor.views import QueueLengthMonitorAPIView
|
from monitor.views import QueueLengthMonitorAPIView
|
||||||
from utils.views import SimditorImageUploadAPIView
|
from utils.views import SimditorImageUploadAPIView
|
||||||
|
|
||||||
@ -73,8 +72,6 @@ urlpatterns = [
|
|||||||
name="join_group_request_admin_api"),
|
name="join_group_request_admin_api"),
|
||||||
url(r'^api/admin/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"),
|
url(r'^api/admin/submission/$', SubmissionAdminAPIView.as_view(), name="submission_admin_api_view"),
|
||||||
url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"),
|
url(r'^api/admin/monitor/$', QueueLengthMonitorAPIView.as_view(), name="queue_length_monitor_api"),
|
||||||
url(r'^api/admin/contest_submission/$', ContestSubmissionAdminAPIView.as_view(), name="contest_submission_admin_api_view"),
|
|
||||||
|
|
||||||
|
|
||||||
url(r'^contest/(?P<contest_id>\d+)/problem/(?P<contest_problem_id>\d+)/$', "contest.views.contest_problem_page",
|
url(r'^contest/(?P<contest_id>\d+)/problem/(?P<contest_problem_id>\d+)/$', "contest.views.contest_problem_page",
|
||||||
name="contest_problem_page"),
|
name="contest_problem_page"),
|
||||||
|
@ -48,7 +48,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
|||||||
method: "post",
|
method: "post",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (!data.code) {
|
if (!data.code) {
|
||||||
bsAlert("添加成功!将转到比赛列表页以便为比赛添加问题(注意比赛当前状态为:隐藏)");
|
bsAlert("添加成功!接下来下需要为比赛添加问题(注意比赛当前状态为:隐藏)");
|
||||||
location.hash = "#contest/contest_list";
|
location.hash = "#contest/contest_list";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -61,8 +61,19 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
|||||||
});
|
});
|
||||||
|
|
||||||
//editor("#editor");
|
//editor("#editor");
|
||||||
if (avalon.vmodels.add_contest)
|
if (avalon.vmodels.add_contest) {
|
||||||
var vm = avalon.vmodels.add_contest;
|
var vm = avalon.vmodels.add_contest;
|
||||||
|
vm.title = "";
|
||||||
|
vm.startTime = "";
|
||||||
|
vm.endTime = "";
|
||||||
|
vm.password = "";
|
||||||
|
vm.isGlobal = true;
|
||||||
|
vm.allGroups = [];
|
||||||
|
vm.showGlobalViewRadio = true;
|
||||||
|
vm.realTimeRank = true;
|
||||||
|
avalon.vmodels.contestDescriptionEditor.content = "";
|
||||||
|
|
||||||
|
}
|
||||||
else
|
else
|
||||||
var vm = avalon.define({
|
var vm = avalon.define({
|
||||||
$id: "add_contest",
|
$id: "add_contest",
|
||||||
|
@ -130,6 +130,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
|||||||
vm.realTimeRank = contest.real_time_rank;
|
vm.realTimeRank = contest.real_time_rank;
|
||||||
vm.startTime = contest.start_time.substring(0, 16).replace("T", " ");
|
vm.startTime = contest.start_time.substring(0, 16).replace("T", " ");
|
||||||
vm.endTime = contest.end_time.substring(0, 16).replace("T", " ");
|
vm.endTime = contest.end_time.substring(0, 16).replace("T", " ");
|
||||||
|
vm.password = contest.password;
|
||||||
if (contest.contest_type == 0) { //contest_type == 0, 小组内比赛
|
if (contest.contest_type == 0) { //contest_type == 0, 小组内比赛
|
||||||
vm.isGlobal = false;
|
vm.isGlobal = false;
|
||||||
for (var i = 0; i < vm.allGroups.length; i++) {
|
for (var i = 0; i < vm.allGroups.length; i++) {
|
||||||
|
@ -134,6 +134,19 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
});
|
});
|
||||||
else {
|
else {
|
||||||
var vm = avalon.vmodels.editProblem;
|
var vm = avalon.vmodels.editProblem;
|
||||||
|
title = "";
|
||||||
|
description = "";
|
||||||
|
timeLimit = 1000;
|
||||||
|
memoryLimit = 128;
|
||||||
|
samples = [];
|
||||||
|
hint = "";
|
||||||
|
sortIndex = "";
|
||||||
|
visible = true;
|
||||||
|
inputDescription = "";
|
||||||
|
outputDescription = "";
|
||||||
|
testCaseId = "";
|
||||||
|
testCaseList = [];
|
||||||
|
uploadSuccess = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
|
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
|
||||||
|
@ -79,6 +79,20 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
|
|
||||||
if (avalon.vmodels.addProblem) {
|
if (avalon.vmodels.addProblem) {
|
||||||
var vm = avalon.vmodels.addProblem;
|
var vm = avalon.vmodels.addProblem;
|
||||||
|
vm.title = "";
|
||||||
|
vm.timeLimit = 1000;
|
||||||
|
vm.memoryLimit = 128;
|
||||||
|
vm.samples = [{input: "", output: "", "visible": true}];
|
||||||
|
vm.visible = true;
|
||||||
|
vm.difficulty = "1";
|
||||||
|
vm.tags = [];
|
||||||
|
vm.inputDescription = "";
|
||||||
|
vm.outputDescription = "";
|
||||||
|
vm.testCaseId = "";
|
||||||
|
vm.testCaseList = [];
|
||||||
|
vm.uploadSuccess = false;
|
||||||
|
vm.source = "";
|
||||||
|
vm.uploadProgress = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
var vm = avalon.define({
|
var vm = avalon.define({
|
||||||
|
@ -165,6 +165,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
|||||||
avalon.vmodels.problemDescriptionEditor.content = problem.description;
|
avalon.vmodels.problemDescriptionEditor.content = problem.description;
|
||||||
vm.timeLimit = problem.time_limit;
|
vm.timeLimit = problem.time_limit;
|
||||||
vm.memoryLimit = problem.memory_limit;
|
vm.memoryLimit = problem.memory_limit;
|
||||||
|
vm.samples = [];
|
||||||
for (var i = 0; i < problem.samples.length; i++) {
|
for (var i = 0; i < problem.samples.length; i++) {
|
||||||
vm.samples.push({
|
vm.samples.push({
|
||||||
input: problem.samples[i].input,
|
input: problem.samples[i].input,
|
||||||
|
@ -659,10 +659,10 @@
|
|||||||
yearSingularText: 'year',
|
yearSingularText: 'year',
|
||||||
monthSingularText: 'month',
|
monthSingularText: 'month',
|
||||||
weekSingularText: 'week',
|
weekSingularText: 'week',
|
||||||
daySingularText: 'day',
|
daySingularText: '天',
|
||||||
hourSingularText: 'hour',
|
hourSingularText: '小时',
|
||||||
minSingularText: 'min',
|
minSingularText: '分钟',
|
||||||
secSingularText: 'sec',
|
secSingularText: '秒',
|
||||||
digits : [0,1,2,3,4,5,6,7,8,9],
|
digits : [0,1,2,3,4,5,6,7,8,9],
|
||||||
isRTL: false,
|
isRTL: false,
|
||||||
minus: false,
|
minus: false,
|
||||||
|
@ -8,7 +8,7 @@ from .models import Submission
|
|||||||
class CreateSubmissionSerializer(serializers.Serializer):
|
class CreateSubmissionSerializer(serializers.Serializer):
|
||||||
problem_id = serializers.IntegerField()
|
problem_id = serializers.IntegerField()
|
||||||
language = serializers.IntegerField()
|
language = serializers.IntegerField()
|
||||||
code = serializers.CharField(max_length=3000)
|
code = serializers.CharField(max_length=20000)
|
||||||
|
|
||||||
|
|
||||||
class SubmissionSerializer(serializers.ModelSerializer):
|
class SubmissionSerializer(serializers.ModelSerializer):
|
||||||
@ -34,6 +34,6 @@ class CreateContestSubmissionSerializer(serializers.Serializer):
|
|||||||
contest_id = serializers.IntegerField()
|
contest_id = serializers.IntegerField()
|
||||||
problem_id = serializers.IntegerField()
|
problem_id = serializers.IntegerField()
|
||||||
language = serializers.IntegerField()
|
language = serializers.IntegerField()
|
||||||
code = serializers.CharField(max_length=3000)
|
code = serializers.CharField(max_length=20000)
|
||||||
|
|
||||||
|
|
||||||
|
@ -286,24 +286,3 @@ class SubmissionRejudgeAdminAPIView(APIView):
|
|||||||
return success_response(u"任务提交成功")
|
return success_response(u"任务提交成功")
|
||||||
else:
|
else:
|
||||||
return serializer_invalid_response(serializer)
|
return serializer_invalid_response(serializer)
|
||||||
|
|
||||||
|
|
||||||
class ContestSubmissionAdminAPIView(APIView):
|
|
||||||
@check_user_contest_permission
|
|
||||||
def get(self, request):
|
|
||||||
"""
|
|
||||||
查询比赛提交,单个比赛题目提交的adminAPI
|
|
||||||
---
|
|
||||||
response_serializer: SubmissionSerializer
|
|
||||||
"""
|
|
||||||
problem_id = request.GET.get("problem_id", None)
|
|
||||||
contest_id = request.GET.get("contest_id", None)
|
|
||||||
|
|
||||||
# 需要 problem_id 和 contest_id 两个参数 否则会在check_user_contest_permission 的时候被拦截
|
|
||||||
if problem_id:
|
|
||||||
submissions = Submission.objects.filter(contest_id=contest_id, problem_id=problem_id).order_by("-create_time")
|
|
||||||
# 需要 contest_id 参数
|
|
||||||
else:
|
|
||||||
submissions = Submission.objects.filter(contest_id=contest_id).order_by("-create_time")
|
|
||||||
|
|
||||||
return paginate(request, submissions, SubmissionSerializer)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user