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",
|
||||
{"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 _check_user_contest_permission
|
||||
|
@ -96,7 +96,7 @@ class MessageQueue(object):
|
||||
contest_problem.add_ac_number()
|
||||
problems_status["contest_problems"][str(contest_problem.id)] = 1
|
||||
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.save()
|
||||
|
||||
|
@ -21,8 +21,7 @@ from admin.views import AdminTemplateView
|
||||
|
||||
from problem.views import TestCaseUploadAPIView, ProblemTagAdminAPIView, ProblemAdminAPIView
|
||||
from submission.views import (SubmissionAPIView, SubmissionAdminAPIView, ContestSubmissionAPIView,
|
||||
SubmissionShareAPIView, SubmissionRejudgeAdminAPIView,
|
||||
ContestSubmissionAdminAPIView)
|
||||
SubmissionShareAPIView, SubmissionRejudgeAdminAPIView)
|
||||
from monitor.views import QueueLengthMonitorAPIView
|
||||
from utils.views import SimditorImageUploadAPIView
|
||||
|
||||
@ -73,8 +72,6 @@ urlpatterns = [
|
||||
name="join_group_request_admin_api"),
|
||||
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/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",
|
||||
name="contest_problem_page"),
|
||||
|
@ -48,7 +48,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
||||
method: "post",
|
||||
success: function (data) {
|
||||
if (!data.code) {
|
||||
bsAlert("添加成功!将转到比赛列表页以便为比赛添加问题(注意比赛当前状态为:隐藏)");
|
||||
bsAlert("添加成功!接下来下需要为比赛添加问题(注意比赛当前状态为:隐藏)");
|
||||
location.hash = "#contest/contest_list";
|
||||
}
|
||||
else {
|
||||
@ -61,8 +61,19 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
||||
});
|
||||
|
||||
//editor("#editor");
|
||||
if (avalon.vmodels.add_contest)
|
||||
if (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
|
||||
var vm = avalon.define({
|
||||
$id: "add_contest",
|
||||
|
@ -130,6 +130,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "date
|
||||
vm.realTimeRank = contest.real_time_rank;
|
||||
vm.startTime = contest.start_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, 小组内比赛
|
||||
vm.isGlobal = false;
|
||||
for (var i = 0; i < vm.allGroups.length; i++) {
|
||||
|
@ -134,6 +134,19 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
||||
});
|
||||
else {
|
||||
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) {
|
||||
|
@ -79,6 +79,20 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
||||
|
||||
if (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
|
||||
var vm = avalon.define({
|
||||
|
@ -165,6 +165,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE
|
||||
avalon.vmodels.problemDescriptionEditor.content = problem.description;
|
||||
vm.timeLimit = problem.time_limit;
|
||||
vm.memoryLimit = problem.memory_limit;
|
||||
vm.samples = [];
|
||||
for (var i = 0; i < problem.samples.length; i++) {
|
||||
vm.samples.push({
|
||||
input: problem.samples[i].input,
|
||||
|
@ -659,10 +659,10 @@
|
||||
yearSingularText: 'year',
|
||||
monthSingularText: 'month',
|
||||
weekSingularText: 'week',
|
||||
daySingularText: 'day',
|
||||
hourSingularText: 'hour',
|
||||
minSingularText: 'min',
|
||||
secSingularText: 'sec',
|
||||
daySingularText: '天',
|
||||
hourSingularText: '小时',
|
||||
minSingularText: '分钟',
|
||||
secSingularText: '秒',
|
||||
digits : [0,1,2,3,4,5,6,7,8,9],
|
||||
isRTL: false,
|
||||
minus: false,
|
||||
|
@ -8,7 +8,7 @@ from .models import Submission
|
||||
class CreateSubmissionSerializer(serializers.Serializer):
|
||||
problem_id = serializers.IntegerField()
|
||||
language = serializers.IntegerField()
|
||||
code = serializers.CharField(max_length=3000)
|
||||
code = serializers.CharField(max_length=20000)
|
||||
|
||||
|
||||
class SubmissionSerializer(serializers.ModelSerializer):
|
||||
@ -34,6 +34,6 @@ class CreateContestSubmissionSerializer(serializers.Serializer):
|
||||
contest_id = serializers.IntegerField()
|
||||
problem_id = 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"任务提交成功")
|
||||
else:
|
||||
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