diff --git a/.gitignore b/.gitignore index 73adda5..285cfd8 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,9 @@ db.db db.sqlite3 .DS_Store log/ -release/ +static/release/css +static/release/js +static/release/img +build.txt tmp/ test_case/ \ No newline at end of file diff --git a/admin/views.py b/admin/views.py index b37d22d..f8bc0c5 100644 --- a/admin/views.py +++ b/admin/views.py @@ -7,7 +7,7 @@ from rest_framework.views import APIView class AdminTemplateView(APIView): def get(self, request, template_dir, template_name): - path = settings.TEMPLATE_DIRS[0] + "/admin/" + template_dir + "/" + template_name + ".html" + path = settings.TEMPLATES[0]["DIRS"][0] + "/admin/" + template_dir + "/" + template_name + ".html" try: return HttpResponse(open(path).read(), content_type="text/html") except IOError: diff --git a/contest/views.py b/contest/views.py index 8c2e29f..e23b50e 100644 --- a/contest/views.py +++ b/contest/views.py @@ -134,9 +134,9 @@ class ContestAdminAPIView(APIView): response_serializer: ContestSerializer """ if request.user.admin_type == SUPER_ADMIN: - contest = Contest.objects.all().order_by("-last_updated_time") + contest = Contest.objects.all().order_by("-create_time") else: - contest = Contest.objects.filter(created_by=request.user).order_by("-last_updated_time") + contest = Contest.objects.filter(created_by=request.user).order_by("-create_time") visible = request.GET.get("visible", None) if visible: contest = contest.filter(visible=(visible == "true")) @@ -300,7 +300,7 @@ def contest_problem_page(request, contest_id, contest_problem_id): contest_problem = ContestProblem.objects.get(id=contest_problem_id, visible=True) except ContestProblem.DoesNotExist: return error_page(request, u"比赛题目不存在") - warning = u"您已经提交过本题的正确答案!" + warning = u"您已经提交过本题的正确答案,重复提交可能造成时间累计。" show_warning = False try: submission = ContestSubmission.objects.get(user=request.user, contest=contest, problem=contest_problem) @@ -338,7 +338,7 @@ def contest_list_page(request, page=1): 所有比赛的列表页 """ # 正常情况 - contests = Contest.objects.filter(visible=True) + contests = Contest.objects.filter(visible=True).order_by("-create_time") # 搜索的情况 keyword = request.GET.get("keyword", None) @@ -394,39 +394,22 @@ def _cmp(x, y): @check_user_contest_permission def contest_rank_page(request, contest_id): + contest = Contest.objects.get(id=contest_id) + contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index") result = ContestSubmission.objects.values("user_id").annotate(total_submit=Count("user_id")) for i in range(0, len(result)): # 这个人所有的提交 submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"]) + result[i]["submissions"] = {} + for item in submissions: + result[i]["submissions"][item.problem_id] = item result[i]["total_ac"] = submissions.filter(ac=True).count() result[i]["user"] = User.objects.get(id=result[i]["user_id"]) - result[i]["submissions"] = submissions.order_by("problem__sort_index") result[i]["total_time"] = submissions.filter(ac=True).aggregate(total_time=Sum("total_time"))["total_time"] - print result - return render(request, "oj/contest/contest_rank.html") - # - # - # return - # contest = Contest.objects.get(id=contest_id) - # contest_submissions = ContestSubmission.objects.filter(contest=contest) - # result = {} - # # 先把数据按照用户id 为 key 整理一下 - # # {1: {"submissions": [], "total_time": 0, "total_ac": 0}} - # for item in contest_submissions: - # if item.user.id not in contest_submissions: - # result[item.user.id] = {"user": {"id": item.user.id, "username": item.user.username, - # "real_name": item.user.real_name}, - # "submissions": [], "total_time": 0, "total_ac": 0} - # result[item.user.id]["submissions"].append(ContestSubmissionSerializer(item).data) - # if item.ac: - # result[item.user.id]["total_time"] += item.total_time - # result[item.user.id]["total_ac"] += 1 - # l = [] - # for k, v in result.iteritems(): - # l.append(v) - # print sorted(l, cmp=_cmp, reverse=True) + return render(request, "oj/contest/contest_rank.html", + {"contest": contest, "contest_problems": contest_problems, "result": sorted(result, cmp=_cmp, reverse=True)}) diff --git a/mq/scripts/info.py b/mq/scripts/info.py index 661c3ff..6634b5b 100644 --- a/mq/scripts/info.py +++ b/mq/scripts/info.py @@ -61,9 +61,12 @@ class MessageQueue(object): logger.debug(contest.start_time) logger.debug(submission.create_time) logger.debug((submission.create_time - contest.start_time).total_seconds()) + logger.debug(int((submission.create_time - contest.start_time).total_seconds() / 60)) contest_submission.total_time += int((submission.create_time - contest.start_time).total_seconds() / 60) # 标记为已经通过 contest_submission.ac = True + # 提交次数加1 + contest_submission.total_submission_number += 1 # contest problem ac 计数器加1 contest_problem.total_accepted_number += 1 else: diff --git a/oj/settings.py b/oj/settings.py index c3883ae..cf4dafc 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -78,7 +78,7 @@ ROOT_URLCONF = 'oj.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(BASE_DIR, 'template')], + 'DIRS': [os.path.join(BASE_DIR, 'template/src')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -116,7 +116,7 @@ STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.join(BASE_DIR, "static/src/"),) TEMPLATE_DIRS = ( - os.path.join(BASE_DIR, "template"), + os.path.join(BASE_DIR, "template/src"), ) AUTH_USER_MODEL = 'account.User' diff --git a/static/release/fis-conf.js b/static/release/fis-conf.js new file mode 100644 index 0000000..ce128cd --- /dev/null +++ b/static/release/fis-conf.js @@ -0,0 +1,3 @@ +/** + * Created by virusdefender on 8/25/15. + */ diff --git a/template/oj/contest/contest_rank.html b/template/oj/contest/contest_rank.html deleted file mode 100644 index 89d1e40..0000000 --- a/template/oj/contest/contest_rank.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "oj_base.html" %} -{% block body %} - {% load contest %} -
-
- -
-
-
-
-
-
-{% endblock %} - - -{% block js_block %} -{% endblock %} \ No newline at end of file diff --git a/template/404.html b/template/src/404.html similarity index 100% rename from template/404.html rename to template/src/404.html diff --git a/template/500.html b/template/src/500.html similarity index 100% rename from template/500.html rename to template/src/500.html diff --git a/template/admin/admin.html b/template/src/admin/admin.html similarity index 100% rename from template/admin/admin.html rename to template/src/admin/admin.html diff --git a/template/admin/announcement/announcement.html b/template/src/admin/announcement/announcement.html similarity index 100% rename from template/admin/announcement/announcement.html rename to template/src/admin/announcement/announcement.html diff --git a/template/admin/contest/add_contest.html b/template/src/admin/contest/add_contest.html similarity index 100% rename from template/admin/contest/add_contest.html rename to template/src/admin/contest/add_contest.html diff --git a/template/admin/contest/contest_list.html b/template/src/admin/contest/contest_list.html similarity index 100% rename from template/admin/contest/contest_list.html rename to template/src/admin/contest/contest_list.html diff --git a/template/admin/contest/edit_problem.html b/template/src/admin/contest/edit_problem.html similarity index 100% rename from template/admin/contest/edit_problem.html rename to template/src/admin/contest/edit_problem.html diff --git a/template/admin/group/group.html b/template/src/admin/group/group.html similarity index 100% rename from template/admin/group/group.html rename to template/src/admin/group/group.html diff --git a/template/admin/group/group_detail.html b/template/src/admin/group/group_detail.html similarity index 100% rename from template/admin/group/group_detail.html rename to template/src/admin/group/group_detail.html diff --git a/template/admin/group/join_group_request_list.html b/template/src/admin/group/join_group_request_list.html similarity index 100% rename from template/admin/group/join_group_request_list.html rename to template/src/admin/group/join_group_request_list.html diff --git a/template/admin/index/index.html b/template/src/admin/index/index.html similarity index 100% rename from template/admin/index/index.html rename to template/src/admin/index/index.html diff --git a/template/admin/monitor/monitor.html b/template/src/admin/monitor/monitor.html similarity index 100% rename from template/admin/monitor/monitor.html rename to template/src/admin/monitor/monitor.html diff --git a/template/admin/problem/add_problem.html b/template/src/admin/problem/add_problem.html similarity index 100% rename from template/admin/problem/add_problem.html rename to template/src/admin/problem/add_problem.html diff --git a/template/admin/problem/edit_problem.html b/template/src/admin/problem/edit_problem.html similarity index 100% rename from template/admin/problem/edit_problem.html rename to template/src/admin/problem/edit_problem.html diff --git a/template/admin/problem/problem_list.html b/template/src/admin/problem/problem_list.html similarity index 100% rename from template/admin/problem/problem_list.html rename to template/src/admin/problem/problem_list.html diff --git a/template/admin/problem/submission_list.html b/template/src/admin/problem/submission_list.html similarity index 100% rename from template/admin/problem/submission_list.html rename to template/src/admin/problem/submission_list.html diff --git a/template/admin/user/user_list.html b/template/src/admin/user/user_list.html similarity index 100% rename from template/admin/user/user_list.html rename to template/src/admin/user/user_list.html diff --git a/template/oj/account/change_password.html b/template/src/oj/account/change_password.html similarity index 100% rename from template/oj/account/change_password.html rename to template/src/oj/account/change_password.html diff --git a/template/oj/account/login.html b/template/src/oj/account/login.html similarity index 100% rename from template/oj/account/login.html rename to template/src/oj/account/login.html diff --git a/template/oj/account/register.html b/template/src/oj/account/register.html similarity index 100% rename from template/oj/account/register.html rename to template/src/oj/account/register.html diff --git a/template/oj/account/reset_password.html b/template/src/oj/account/reset_password.html similarity index 100% rename from template/oj/account/reset_password.html rename to template/src/oj/account/reset_password.html diff --git a/template/oj/announcement/_announcement_panel.html b/template/src/oj/announcement/_announcement_panel.html similarity index 100% rename from template/oj/announcement/_announcement_panel.html rename to template/src/oj/announcement/_announcement_panel.html diff --git a/template/oj/announcement/announcement.html b/template/src/oj/announcement/announcement.html similarity index 100% rename from template/oj/announcement/announcement.html rename to template/src/oj/announcement/announcement.html diff --git a/template/oj/contest/_contest_header.html b/template/src/oj/contest/_contest_header.html similarity index 100% rename from template/oj/contest/_contest_header.html rename to template/src/oj/contest/_contest_header.html diff --git a/template/oj/contest/contest_index.html b/template/src/oj/contest/contest_index.html similarity index 100% rename from template/oj/contest/contest_index.html rename to template/src/oj/contest/contest_index.html diff --git a/template/oj/contest/contest_list.html b/template/src/oj/contest/contest_list.html similarity index 100% rename from template/oj/contest/contest_list.html rename to template/src/oj/contest/contest_list.html diff --git a/template/oj/contest/contest_problem.html b/template/src/oj/contest/contest_problem.html similarity index 79% rename from template/oj/contest/contest_problem.html rename to template/src/oj/contest/contest_problem.html index cf2b7db..f5b3cb1 100644 --- a/template/oj/contest/contest_problem.html +++ b/template/src/oj/contest/contest_problem.html @@ -1,11 +1,13 @@ {% extends 'oj_base.html' %} {% block body %} -
+

{{ contest_problem.title }}

@@ -15,29 +17,22 @@

-
- +
+ -

{{ contest_problem.description|safe }}

-
-
- +

{{ contest_problem.description|safe }}

+
+
+ + +

{{ contest_problem.input_description }}

-
- -

{{ contest_problem.description|safe }}

-
-
- - -

{{ contest_problem.input_description }}

-
-

{{ contest_problem.output_description }}k

+

{{ contest_problem.output_description }}

{% for item in samples %}
diff --git a/template/oj/contest/contest_problems_list.html b/template/src/oj/contest/contest_problems_list.html similarity index 100% rename from template/oj/contest/contest_problems_list.html rename to template/src/oj/contest/contest_problems_list.html diff --git a/template/src/oj/contest/contest_rank.html b/template/src/oj/contest/contest_rank.html new file mode 100644 index 0000000..823b021 --- /dev/null +++ b/template/src/oj/contest/contest_rank.html @@ -0,0 +1,59 @@ +{% extends "oj_base.html" %} +{% block body %} + {% load submission %} +
+
+ +
+
+
+ + + + + + + + {% for item in contest_problems %} + + {% endfor %} + + + + {% for item in result %} + + + + + + {% for problem in contest_problems %} + + {% endfor %} + + {% endfor %} + +
#用户名AC / 总提交用时 + 罚时{{ item.sort_index }} +
{{ forloop.counter }}{{ item.user.username }}{{ item.total_ac }} / {{ item.total_submit }}{% if item.total_time %}{{ item.total_time }} min{% else %}--{% endif %} + {% submission_problem problem item.submissions %} +
+
+
+
+{% endblock %} + + +{% block js_block %} +{% endblock %} \ No newline at end of file diff --git a/template/oj/contest/my_submission.html b/template/src/oj/contest/my_submission.html similarity index 100% rename from template/oj/contest/my_submission.html rename to template/src/oj/contest/my_submission.html diff --git a/template/oj/contest/my_submissions_list.html b/template/src/oj/contest/my_submissions_list.html similarity index 100% rename from template/oj/contest/my_submissions_list.html rename to template/src/oj/contest/my_submissions_list.html diff --git a/template/oj/contest/no_contest_permission.html b/template/src/oj/contest/no_contest_permission.html similarity index 100% rename from template/oj/contest/no_contest_permission.html rename to template/src/oj/contest/no_contest_permission.html diff --git a/template/oj/contest/submissions_list.html b/template/src/oj/contest/submissions_list.html similarity index 100% rename from template/oj/contest/submissions_list.html rename to template/src/oj/contest/submissions_list.html diff --git a/template/oj/index.html b/template/src/oj/index.html similarity index 100% rename from template/oj/index.html rename to template/src/oj/index.html diff --git a/template/oj/problem/_problem_header.html b/template/src/oj/problem/_problem_header.html similarity index 100% rename from template/oj/problem/_problem_header.html rename to template/src/oj/problem/_problem_header.html diff --git a/template/oj/problem/my_submission.html b/template/src/oj/problem/my_submission.html similarity index 100% rename from template/oj/problem/my_submission.html rename to template/src/oj/problem/my_submission.html diff --git a/template/oj/problem/my_submissions_list.html b/template/src/oj/problem/my_submissions_list.html similarity index 100% rename from template/oj/problem/my_submissions_list.html rename to template/src/oj/problem/my_submissions_list.html diff --git a/template/oj/problem/problem.html b/template/src/oj/problem/problem.html similarity index 100% rename from template/oj/problem/problem.html rename to template/src/oj/problem/problem.html diff --git a/template/oj/problem/problem_list.html b/template/src/oj/problem/problem_list.html similarity index 100% rename from template/oj/problem/problem_list.html rename to template/src/oj/problem/problem_list.html diff --git a/template/oj/submission/my_submissions_list.html b/template/src/oj/submission/my_submissions_list.html similarity index 100% rename from template/oj/submission/my_submissions_list.html rename to template/src/oj/submission/my_submissions_list.html diff --git a/template/oj_base.html b/template/src/oj_base.html similarity index 100% rename from template/oj_base.html rename to template/src/oj_base.html diff --git a/template/utils/error.html b/template/src/utils/error.html similarity index 100% rename from template/utils/error.html rename to template/src/utils/error.html diff --git a/utils/templatetags/submission.py b/utils/templatetags/submission.py index a80c25e..b1f43d2 100644 --- a/utils/templatetags/submission.py +++ b/utils/templatetags/submission.py @@ -29,7 +29,27 @@ def translate_result_class(value): return "danger" +def get_contest_submission_problem_detail(contest_problem, my_submission): + if contest_problem.id in my_submission: + submission = my_submission[contest_problem.id] + if submission.ac: + return u"\n 时间: " + str(submission.total_time) + u" min" + return "" + + +def get_submission_problem_result_class(contest_problem, my_submission): + if contest_problem.id in my_submission: + submission = my_submission[contest_problem.id] + if submission.ac: + return "success" + else: + return "danger" + else: + return "" + register = template.Library() register.filter("translate_result", translate_result) register.filter("translate_language", translate_language) -register.filter("translate_result_class", translate_result_class) \ No newline at end of file +register.filter("translate_result_class", translate_result_class) +register.simple_tag(get_contest_submission_problem_detail, name="submission_problem") +register.simple_tag(get_submission_problem_result_class, name="submission_problem_result_class") \ No newline at end of file