From 90dc32590a9b4863ad42b62af60247891e18aa55 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Fri, 30 Oct 2015 18:15:28 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=20vm=20=E5=AF=BC=E8=87=B4=E7=9A=84=E4=B8=8A?= =?UTF-8?q?=E4=B8=AA=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE=E5=B8=A6=E5=88=B0?= =?UTF-8?q?=E4=B8=8B=E4=B8=AA=E9=A1=B5=E9=9D=A2=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/contest/addContest.js | 13 +++++++++++- .../src/js/app/admin/contest/editContest.js | 1 + .../src/js/app/admin/contest/editProblem.js | 21 +++++++++++++++---- static/src/js/app/admin/problem/addProblem.js | 16 +++++++++++++- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/static/src/js/app/admin/contest/addContest.js b/static/src/js/app/admin/contest/addContest.js index 9cbd57dd..cd4e1fdf 100644 --- a/static/src/js/app/admin/contest/addContest.js +++ b/static/src/js/app/admin/contest/addContest.js @@ -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", diff --git a/static/src/js/app/admin/contest/editContest.js b/static/src/js/app/admin/contest/editContest.js index f34e2614..67a027c3 100644 --- a/static/src/js/app/admin/contest/editContest.js +++ b/static/src/js/app/admin/contest/editContest.js @@ -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++) { diff --git a/static/src/js/app/admin/contest/editProblem.js b/static/src/js/app/admin/contest/editProblem.js index 31b2560a..4fdb94fe 100644 --- a/static/src/js/app/admin/contest/editProblem.js +++ b/static/src/js/app/admin/contest/editProblem.js @@ -49,7 +49,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE ajaxData["id"] = avalon.vmodels.admin.problemId; var alertContent = "题目编辑成功"; } - else{ + else { var method = "post"; var alertContent = "题目创建成功"; } @@ -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) { @@ -142,7 +155,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE else { vm.testCaseId = response.data.test_case_id; vm.testCaseList = []; - for(var key in response.data.file_list){ + for (var key in response.data.file_list) { vm.testCaseList.push({ input: response.data.file_list[key].input_name, output: response.data.file_list[key].output_name @@ -189,8 +202,8 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE url: "/api/admin/test_case_upload/?test_case_id=" + vm.testCaseId, method: "get", dataType: "json", - success: function(response){ - if(response.code){ + success: function (response) { + if (response.code) { bsAlert(response.data); } else { diff --git a/static/src/js/app/admin/problem/addProblem.js b/static/src/js/app/admin/problem/addProblem.js index dc19f0b5..e2f9e6fc 100644 --- a/static/src/js/app/admin/problem/addProblem.js +++ b/static/src/js/app/admin/problem/addProblem.js @@ -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({ @@ -135,7 +149,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE vm.testCaseId = response.data.test_case_id; vm.uploadSuccess = true; vm.testCaseList = []; - for(var key in response.data.file_list){ + for (var key in response.data.file_list) { vm.testCaseList.push({ input: response.data.file_list[key].input_name, output: response.data.file_list[key].output_name From 94a28c188a3f1a6dde4e48b187dae9df4883534d Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Fri, 30 Oct 2015 18:24:24 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=80=92=E8=AE=A1?= =?UTF-8?q?=E6=97=B6=E6=96=87=E5=AD=97=E4=B8=AD=E8=8B=B1=E6=96=87=E6=B7=B7?= =?UTF-8?q?=E5=90=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/lib/jcountdown/jcountdown.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static/src/js/lib/jcountdown/jcountdown.js b/static/src/js/lib/jcountdown/jcountdown.js index aa91f597..318f7b73 100644 --- a/static/src/js/lib/jcountdown/jcountdown.js +++ b/static/src/js/lib/jcountdown/jcountdown.js @@ -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, From 8767adda25f04a16f5acd190e56fbbb116acd1b5 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Fri, 30 Oct 2015 18:26:51 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AF=94=E8=B5=9B?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=AE=8C=E6=88=90=E5=90=8E=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/contest/addContest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/src/js/app/admin/contest/addContest.js b/static/src/js/app/admin/contest/addContest.js index cd4e1fdf..e84f6b08 100644 --- a/static/src/js/app/admin/contest/addContest.js +++ b/static/src/js/app/admin/contest/addContest.js @@ -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 { From 40f3abb7547850839758227c700bbbc405d3da8b Mon Sep 17 00:00:00 2001 From: esp Date: Sun, 1 Nov 2015 14:41:28 +0800 Subject: [PATCH 4/8] =?UTF-8?q?update=20mq.py=20update=20mq.py=20=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E9=A2=98=E7=9B=AE=E7=8A=B6=E6=80=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E5=AF=BC=E8=87=B4=E6=B2=A1AC?= =?UTF-8?q?=E7=9A=84=E9=A2=98=E7=9B=AE=E5=9C=A8=E9=A2=98=E7=9B=AE=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=87=8C=E4=B9=9F=E6=98=BE=E7=A4=BA=E4=B8=BA=E5=AF=B9?= =?UTF-8?q?=E5=8B=BE=E4=BA=86=E3=80=82=20user.problem=5Fstatus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mq/scripts/mq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mq/scripts/mq.py b/mq/scripts/mq.py index 7ba83fba..50e8b241 100644 --- a/mq/scripts/mq.py +++ b/mq/scripts/mq.py @@ -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() From 6b263db3ba342237e821a1bdf53daf41d23ef406 Mon Sep 17 00:00:00 2001 From: sxw Date: Mon, 2 Nov 2015 19:08:10 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E9=A1=B5=E9=9D=A2=E6=A0=B7=E4=BE=8B=E6=B7=B7?= =?UTF-8?q?=E4=B9=B1=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=96=B0=E9=97=AE=E9=A2=98=E4=B8=8D=E4=BC=9A=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=8A=E4=B8=80=E6=AC=A1=E7=BC=96=E8=BE=91=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E8=80=81=E6=A0=B7=E4=BE=8B[CI=20SKIP]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/src/js/app/admin/problem/editProblem.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/src/js/app/admin/problem/editProblem.js b/static/src/js/app/admin/problem/editProblem.js index 4b936e02..54091495 100644 --- a/static/src/js/app/admin/problem/editProblem.js +++ b/static/src/js/app/admin/problem/editProblem.js @@ -147,7 +147,7 @@ require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagE } }, function (file, percentage) { - vm.uploadProgress = percentage; + vm.uploadProgress = parseInt(percentage * 100); } ); @@ -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, From 06f83663ffc11f6032126f8af43b589637b5a6c6 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 2 Nov 2015 20:48:11 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=B0=86=E6=8F=90=E4=BA=A4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E9=99=90=E5=88=B6=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?20000=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- submission/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submission/serializers.py b/submission/serializers.py index dcaf7014..a0bc1094 100644 --- a/submission/serializers.py +++ b/submission/serializers.py @@ -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) From 2868356048625359ede21e1da5c9de7c95207fa4 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 2 Nov 2015 21:03:16 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AF=94=E8=B5=9B?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E7=BB=93=E6=9D=9F=E8=BF=98=E8=83=BD=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E9=A2=98=E7=9B=AE=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/decorators.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contest/decorators.py b/contest/decorators.py index 2f5e3ba3..93e24fad 100644 --- a/contest/decorators.py +++ b/contest/decorators.py @@ -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 From 5a422ec28aa00093d2c08246a11a6a9735c4bfa9 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Mon, 2 Nov 2015 21:03:30 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B2=A1=E7=94=A8?= =?UTF-8?q?=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- oj/urls.py | 5 +---- submission/views.py | 21 --------------------- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/oj/urls.py b/oj/urls.py index 53283fe2..c4d2e09f 100644 --- a/oj/urls.py +++ b/oj/urls.py @@ -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\d+)/problem/(?P\d+)/$', "contest.views.contest_problem_page", name="contest_problem_page"), diff --git a/submission/views.py b/submission/views.py index e9eaa44e..1f2acb16 100644 --- a/submission/views.py +++ b/submission/views.py @@ -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)