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:
virusdefender 2015-11-02 21:05:21 +08:00
commit a94a394f63
11 changed files with 59 additions and 39 deletions

View File

@ -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

View File

@ -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()

View File

@ -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"),

View File

@ -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",

View File

@ -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++) {

View File

@ -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) {

View File

@ -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({

View File

@ -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,

View File

@ -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,

View File

@ -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)

View File

@ -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)