Add end time limit to a contest

This commit is contained in:
cuom1999 2024-08-14 16:15:19 +07:00
parent 1f91299d41
commit 37cdd2dd04
4 changed files with 206 additions and 211 deletions

View file

@ -19,6 +19,7 @@ from moss import (
MOSS_LANG_PYTHON, MOSS_LANG_PYTHON,
MOSS_LANG_PASCAL, MOSS_LANG_PASCAL,
) )
from datetime import timedelta
from judge import contest_format from judge import contest_format
from judge.models.problem import Problem from judge.models.problem import Problem
@ -354,9 +355,7 @@ class Contest(models.Model, PageVotable, Bookmarkable):
def clean(self): def clean(self):
# Django will complain if you didn't fill in start_time or end_time, so we don't have to. # Django will complain if you didn't fill in start_time or end_time, so we don't have to.
if self.start_time and self.end_time and self.start_time >= self.end_time: if self.start_time and self.end_time and self.start_time >= self.end_time:
raise ValidationError( raise ValidationError(_("End time must be after start time"))
"What is this? A contest that ended before it starts?"
)
self.format_class.validate(self.format_config) self.format_class.validate(self.format_config)
try: try:
@ -371,6 +370,13 @@ class Contest(models.Model, PageVotable, Bookmarkable):
"Contest problem label script: script should return a string." "Contest problem label script: script should return a string."
) )
def save(self, *args, **kwargs):
one_year_later = self.start_time + timedelta(days=365)
if self.end_time > one_year_later:
self.end_time = one_year_later
super().save(*args, **kwargs)
def is_in_contest(self, user): def is_in_contest(self, user):
if user.is_authenticated: if user.is_authenticated:
profile = user.profile profile = user.profile

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: lqdoj2\n" "Project-Id-Version: lqdoj2\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-13 17:34+0700\n" "POT-Creation-Date: 2024-08-14 16:14+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n" "PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n" "Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n" "Language-Team: Vietnamese\n"
@ -23,8 +23,8 @@ msgid "last seen"
msgstr "xem lần cuối" msgstr "xem lần cuối"
#: chat_box/models.py:54 chat_box/models.py:79 chat_box/models.py:95 #: chat_box/models.py:54 chat_box/models.py:79 chat_box/models.py:95
#: judge/admin/interface.py:151 judge/models/contest.py:693 #: judge/admin/interface.py:151 judge/models/contest.py:701
#: judge/models/contest.py:899 judge/models/course.py:129 #: judge/models/contest.py:907 judge/models/course.py:129
#: judge/models/profile.py:475 judge/models/profile.py:549 #: judge/models/profile.py:475 judge/models/profile.py:549
msgid "user" msgid "user"
msgstr "người dùng" msgstr "người dùng"
@ -38,15 +38,19 @@ msgstr "thời gian đăng"
msgid "body of comment" msgid "body of comment"
msgstr "nội dung bình luận" msgstr "nội dung bình luận"
#: chat_box/views.py:44 #: chat_box/views.py:46
msgid "LQDOJ Chat" msgid "LQDOJ Chat"
msgstr "" msgstr ""
#: chat_box/views.py:444 #: chat_box/views.py:173
msgid "Mute chat"
msgstr ""
#: chat_box/views.py:450
msgid "Recent" msgid "Recent"
msgstr "Gần đây" msgstr "Gần đây"
#: chat_box/views.py:448 templates/base.html:198 #: chat_box/views.py:454 templates/base.html:198
#: templates/comments/content-list.html:72 #: templates/comments/content-list.html:72
#: templates/contest/contest-list-tabs.html:6 #: templates/contest/contest-list-tabs.html:6
#: templates/contest/ranking-table.html:52 templates/course/left_sidebar.html:8 #: templates/contest/ranking-table.html:52 templates/course/left_sidebar.html:8
@ -585,7 +589,7 @@ msgstr "Mã bài phải có dạng ^[a-z0-9]+$"
msgid "Problem with code already exists." msgid "Problem with code already exists."
msgstr "Mã bài đã tồn tại." msgstr "Mã bài đã tồn tại."
#: judge/forms.py:507 judge/models/contest.py:102 #: judge/forms.py:507 judge/models/contest.py:103
msgid "Contest id must be ^[a-z0-9]+$" msgid "Contest id must be ^[a-z0-9]+$"
msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$" msgstr "Mã kỳ thi phải có dạng ^[a-z0-9]+$"
@ -695,116 +699,116 @@ msgstr ""
msgid "Override comment lock" msgid "Override comment lock"
msgstr "" msgstr ""
#: judge/models/contest.py:49 #: judge/models/contest.py:50
msgid "Invalid colour." msgid "Invalid colour."
msgstr "" msgstr ""
#: judge/models/contest.py:53 #: judge/models/contest.py:54
msgid "tag name" msgid "tag name"
msgstr "" msgstr ""
#: judge/models/contest.py:57 #: judge/models/contest.py:58
msgid "Lowercase letters and hyphens only." msgid "Lowercase letters and hyphens only."
msgstr "" msgstr ""
#: judge/models/contest.py:62 #: judge/models/contest.py:63
msgid "tag colour" msgid "tag colour"
msgstr "" msgstr ""
#: judge/models/contest.py:64 #: judge/models/contest.py:65
msgid "tag description" msgid "tag description"
msgstr "" msgstr ""
#: judge/models/contest.py:85 #: judge/models/contest.py:86
msgid "contest tag" msgid "contest tag"
msgstr "" msgstr ""
#: judge/models/contest.py:86 judge/models/contest.py:262 #: judge/models/contest.py:87 judge/models/contest.py:263
msgid "contest tags" msgid "contest tags"
msgstr "nhãn kỳ thi" msgstr "nhãn kỳ thi"
#: judge/models/contest.py:94 #: judge/models/contest.py:95
msgid "Visible" msgid "Visible"
msgstr "Hiển thị" msgstr "Hiển thị"
#: judge/models/contest.py:95 #: judge/models/contest.py:96
msgid "Hidden for duration of contest" msgid "Hidden for duration of contest"
msgstr "Ẩn trong thời gian kỳ thi" msgstr "Ẩn trong thời gian kỳ thi"
#: judge/models/contest.py:96 #: judge/models/contest.py:97
msgid "Hidden for duration of participation" msgid "Hidden for duration of participation"
msgstr "Ẩn trong thời gian tham gia" msgstr "Ẩn trong thời gian tham gia"
#: judge/models/contest.py:100 #: judge/models/contest.py:101
msgid "contest id" msgid "contest id"
msgstr "ID kỳ thi" msgstr "ID kỳ thi"
#: judge/models/contest.py:105 #: judge/models/contest.py:106
msgid "contest name" msgid "contest name"
msgstr "tên kỳ thi" msgstr "tên kỳ thi"
#: judge/models/contest.py:109 judge/models/interface.py:80 #: judge/models/contest.py:110 judge/models/interface.py:80
#: judge/models/problem.py:694 #: judge/models/problem.py:694
msgid "authors" msgid "authors"
msgstr "tác giả" msgstr "tác giả"
#: judge/models/contest.py:110 #: judge/models/contest.py:111
msgid "These users will be able to edit the contest." msgid "These users will be able to edit the contest."
msgstr "Những người dùng này có quyền chỉnh sửa kỳ thi." msgstr "Những người dùng này có quyền chỉnh sửa kỳ thi."
#: judge/models/contest.py:115 judge/models/problem.py:157 #: judge/models/contest.py:116 judge/models/problem.py:157
msgid "curators" msgid "curators"
msgstr "quản lý" msgstr "quản lý"
#: judge/models/contest.py:117 #: judge/models/contest.py:118
msgid "" msgid ""
"These users will be able to edit the contest, but will not be listed as " "These users will be able to edit the contest, but will not be listed as "
"authors." "authors."
msgstr "Những người dùng này là tác giả và có quyền chỉnh sửa kỳ thi." msgstr "Những người dùng này là tác giả và có quyền chỉnh sửa kỳ thi."
#: judge/models/contest.py:125 judge/models/problem.py:167 #: judge/models/contest.py:126 judge/models/problem.py:167
msgid "testers" msgid "testers"
msgstr "" msgstr ""
#: judge/models/contest.py:127 #: judge/models/contest.py:128
msgid "These users will be able to view the contest, but not edit it." msgid "These users will be able to view the contest, but not edit it."
msgstr "" msgstr ""
"Những người dùng này có thể thấy kỳ thi nhưng không có quyền chỉnh sửa." "Những người dùng này có thể thấy kỳ thi nhưng không có quyền chỉnh sửa."
#: judge/models/contest.py:132 judge/models/runtime.py:217 #: judge/models/contest.py:133 judge/models/runtime.py:217
msgid "description" msgid "description"
msgstr "mô tả" msgstr "mô tả"
#: judge/models/contest.py:134 judge/models/problem.py:610 #: judge/models/contest.py:135 judge/models/problem.py:610
#: judge/models/runtime.py:222 #: judge/models/runtime.py:222
msgid "problems" msgid "problems"
msgstr "bài tập" msgstr "bài tập"
#: judge/models/contest.py:136 judge/models/contest.py:698 #: judge/models/contest.py:137 judge/models/contest.py:706
msgid "start time" msgid "start time"
msgstr "thời gian bắt đầu" msgstr "thời gian bắt đầu"
#: judge/models/contest.py:137 #: judge/models/contest.py:138
msgid "end time" msgid "end time"
msgstr "thời gian kết thúc" msgstr "thời gian kết thúc"
#: judge/models/contest.py:139 judge/models/problem.py:186 #: judge/models/contest.py:140 judge/models/problem.py:186
#: judge/models/problem.py:645 #: judge/models/problem.py:645
msgid "time limit" msgid "time limit"
msgstr "giới hạn thời gian" msgstr "giới hạn thời gian"
#: judge/models/contest.py:143 #: judge/models/contest.py:144
msgid "" msgid ""
"Format hh:mm:ss. For example, if you want a 2-hour contest, enter 02:00:00" "Format hh:mm:ss. For example, if you want a 2-hour contest, enter 02:00:00"
msgstr "" msgstr ""
"Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy " "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn tạo kỳ thi dài 2h, hãy "
"nhập 02:00:00" "nhập 02:00:00"
#: judge/models/contest.py:147 #: judge/models/contest.py:148
msgid "freeze after" msgid "freeze after"
msgstr "đóng băng sau" msgstr "đóng băng sau"
#: judge/models/contest.py:151 #: judge/models/contest.py:152
msgid "" msgid ""
"Format hh:mm:ss. For example, if you want to freeze contest after 2 hours, " "Format hh:mm:ss. For example, if you want to freeze contest after 2 hours, "
"enter 02:00:00" "enter 02:00:00"
@ -812,12 +816,12 @@ msgstr ""
"Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn đóng băng kỳ thi sau 2h, " "Định dạng hh:mm:ss (giờ:phút:giây). Ví dụ, nếu muốn đóng băng kỳ thi sau 2h, "
"hãy nhập 02:00:00" "hãy nhập 02:00:00"
#: judge/models/contest.py:155 judge/models/course.py:27 #: judge/models/contest.py:156 judge/models/course.py:27
#: judge/models/problem.py:225 #: judge/models/problem.py:225
msgid "publicly visible" msgid "publicly visible"
msgstr "công khai" msgstr "công khai"
#: judge/models/contest.py:158 #: judge/models/contest.py:159
msgid "" msgid ""
"Should be set even for organization-private contests, where it determines " "Should be set even for organization-private contests, where it determines "
"whether the contest is visible to members of the specified organizations." "whether the contest is visible to members of the specified organizations."
@ -825,92 +829,92 @@ msgstr ""
"Đánh dấu ngay cả với các kỳ thi riêng tư của nhóm, quyết định việc kỳ thi có " "Đánh dấu ngay cả với các kỳ thi riêng tư của nhóm, quyết định việc kỳ thi có "
"được hiển thị với các thành viên hay không." "được hiển thị với các thành viên hay không."
#: judge/models/contest.py:164 #: judge/models/contest.py:165
msgid "contest rated" msgid "contest rated"
msgstr "kỳ thi được xếp hạng" msgstr "kỳ thi được xếp hạng"
#: judge/models/contest.py:165 #: judge/models/contest.py:166
msgid "Whether this contest can be rated." msgid "Whether this contest can be rated."
msgstr "Quyết định kỳ thi có được xếp hạng không." msgstr "Quyết định kỳ thi có được xếp hạng không."
#: judge/models/contest.py:169 #: judge/models/contest.py:170
msgid "scoreboard visibility" msgid "scoreboard visibility"
msgstr "khả năng hiển thị của bảng điểm" msgstr "khả năng hiển thị của bảng điểm"
#: judge/models/contest.py:172 #: judge/models/contest.py:173
msgid "Scoreboard visibility through the duration of the contest" msgid "Scoreboard visibility through the duration of the contest"
msgstr "Khả năng hiển thị của bảng điểm trong thời gian kỳ thi" msgstr "Khả năng hiển thị của bảng điểm trong thời gian kỳ thi"
#: judge/models/contest.py:177 #: judge/models/contest.py:178
msgid "view contest scoreboard" msgid "view contest scoreboard"
msgstr "xem bảng điểm kỳ thi" msgstr "xem bảng điểm kỳ thi"
#: judge/models/contest.py:180 #: judge/models/contest.py:181
msgid "These users will be able to view the scoreboard." msgid "These users will be able to view the scoreboard."
msgstr "Những người dùng này được phép xem bảng điểm." msgstr "Những người dùng này được phép xem bảng điểm."
#: judge/models/contest.py:183 #: judge/models/contest.py:184
msgid "public scoreboard" msgid "public scoreboard"
msgstr "công khai bảng điểm" msgstr "công khai bảng điểm"
#: judge/models/contest.py:184 #: judge/models/contest.py:185
msgid "Ranking page is public even for private contests." msgid "Ranking page is public even for private contests."
msgstr "Trang xếp hạng được công khai, kể cả cho kỳ thi riêng tư." msgstr "Trang xếp hạng được công khai, kể cả cho kỳ thi riêng tư."
#: judge/models/contest.py:188 #: judge/models/contest.py:189
msgid "no comments" msgid "no comments"
msgstr "không bình luận" msgstr "không bình luận"
#: judge/models/contest.py:189 #: judge/models/contest.py:190
msgid "Use clarification system instead of comments." msgid "Use clarification system instead of comments."
msgstr "Dùng hệ thống thông báo thay vì bình luận." msgstr "Dùng hệ thống thông báo thay vì bình luận."
#: judge/models/contest.py:194 #: judge/models/contest.py:195
msgid "Rating floor for contest" msgid "Rating floor for contest"
msgstr "Cận dưới rating được xếp hạng trong kỳ thi" msgstr "Cận dưới rating được xếp hạng trong kỳ thi"
#: judge/models/contest.py:200 #: judge/models/contest.py:201
msgid "Rating ceiling for contest" msgid "Rating ceiling for contest"
msgstr "Cận trên rating được xếp hạng trong kỳ thi" msgstr "Cận trên rating được xếp hạng trong kỳ thi"
#: judge/models/contest.py:205 #: judge/models/contest.py:206
msgid "rate all" msgid "rate all"
msgstr "xếp hạng tất cả" msgstr "xếp hạng tất cả"
#: judge/models/contest.py:206 #: judge/models/contest.py:207
msgid "Rate all users who joined." msgid "Rate all users who joined."
msgstr "Xếp hạng tất cả người dùng đã tham gia (kể cả không nộp)." msgstr "Xếp hạng tất cả người dùng đã tham gia (kể cả không nộp)."
#: judge/models/contest.py:211 #: judge/models/contest.py:212
msgid "exclude from ratings" msgid "exclude from ratings"
msgstr "không xếp hạng" msgstr "không xếp hạng"
#: judge/models/contest.py:216 #: judge/models/contest.py:217
msgid "private to specific users" msgid "private to specific users"
msgstr "riêng tư với các người dùng này" msgstr "riêng tư với các người dùng này"
#: judge/models/contest.py:221 #: judge/models/contest.py:222
msgid "private contestants" msgid "private contestants"
msgstr "thí sinh riêng tư" msgstr "thí sinh riêng tư"
#: judge/models/contest.py:222 #: judge/models/contest.py:223
msgid "If private, only these users may see the contest" msgid "If private, only these users may see the contest"
msgstr "Nếu riêng tư, chỉ những người dùng này mới thấy kỳ thi" msgstr "Nếu riêng tư, chỉ những người dùng này mới thấy kỳ thi"
#: judge/models/contest.py:226 #: judge/models/contest.py:227
msgid "hide problem tags" msgid "hide problem tags"
msgstr "ẩn nhãn kỳ thi" msgstr "ẩn nhãn kỳ thi"
#: judge/models/contest.py:227 #: judge/models/contest.py:228
msgid "Whether problem tags should be hidden by default." msgid "Whether problem tags should be hidden by default."
msgstr "" msgstr ""
"Quyết định việc nhãn bài tập (DP, Tham lam, ...) được ẩn trong kỳ thi không." "Quyết định việc nhãn bài tập (DP, Tham lam, ...) được ẩn trong kỳ thi không."
#: judge/models/contest.py:231 #: judge/models/contest.py:232
msgid "run pretests only" msgid "run pretests only"
msgstr "chỉ chạy pretests" msgstr "chỉ chạy pretests"
#: judge/models/contest.py:233 #: judge/models/contest.py:234
msgid "" msgid ""
"Whether judges should grade pretests only, versus all testcases. Commonly " "Whether judges should grade pretests only, versus all testcases. Commonly "
"set during a contest, then unset prior to rejudging user submissions when " "set during a contest, then unset prior to rejudging user submissions when "
@ -919,51 +923,51 @@ msgstr ""
"Quyết định việc các máy chấm chỉ chấm pretests thay vì tất cả các test. Sau " "Quyết định việc các máy chấm chỉ chấm pretests thay vì tất cả các test. Sau "
"kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài." "kỳ thi, hãy bỏ đánh dấu ô này và chấm lại tất cả các bài."
#: judge/models/contest.py:240 judge/models/interface.py:97 #: judge/models/contest.py:241 judge/models/interface.py:97
#: judge/models/problem.py:285 #: judge/models/problem.py:285
msgid "private to organizations" msgid "private to organizations"
msgstr "riêng tư với các tổ chức" msgstr "riêng tư với các tổ chức"
#: judge/models/contest.py:245 judge/models/course.py:33 #: judge/models/contest.py:246 judge/models/course.py:33
#: judge/models/interface.py:93 judge/models/problem.py:281 #: judge/models/interface.py:93 judge/models/problem.py:281
#: judge/models/profile.py:177 #: judge/models/profile.py:177
msgid "organizations" msgid "organizations"
msgstr "tổ chức" msgstr "tổ chức"
#: judge/models/contest.py:246 #: judge/models/contest.py:247
msgid "If private, only these organizations may see the contest" msgid "If private, only these organizations may see the contest"
msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi" msgstr "Nếu riêng tư, chỉ những tổ chức này thấy được kỳ thi"
#: judge/models/contest.py:249 judge/models/problem.py:256 #: judge/models/contest.py:250 judge/models/problem.py:256
msgid "OpenGraph image" msgid "OpenGraph image"
msgstr "Hình ảnh OpenGraph" msgstr "Hình ảnh OpenGraph"
#: judge/models/contest.py:252 judge/models/profile.py:115 #: judge/models/contest.py:253 judge/models/profile.py:115
msgid "Logo override image" msgid "Logo override image"
msgstr "Hình ảnh ghi đè logo" msgstr "Hình ảnh ghi đè logo"
#: judge/models/contest.py:257 #: judge/models/contest.py:258
msgid "" msgid ""
"This image will replace the default site logo for users inside the contest." "This image will replace the default site logo for users inside the contest."
msgstr "Ảnh này sẽ thay thế cho logo mặc định trong kỳ thi." msgstr "Ảnh này sẽ thay thế cho logo mặc định trong kỳ thi."
#: judge/models/contest.py:265 #: judge/models/contest.py:266
msgid "the amount of live participants" msgid "the amount of live participants"
msgstr "số lượng thí sinh thi trực tiếp" msgstr "số lượng thí sinh thi trực tiếp"
#: judge/models/contest.py:269 #: judge/models/contest.py:270
msgid "contest summary" msgid "contest summary"
msgstr "tổng kết kỳ thi" msgstr "tổng kết kỳ thi"
#: judge/models/contest.py:271 judge/models/problem.py:262 #: judge/models/contest.py:272 judge/models/problem.py:262
msgid "Plain-text, shown in meta description tag, e.g. for social media." msgid "Plain-text, shown in meta description tag, e.g. for social media."
msgstr "" msgstr ""
#: judge/models/contest.py:275 judge/models/profile.py:109 #: judge/models/contest.py:276 judge/models/profile.py:109
msgid "access code" msgid "access code"
msgstr "mật khẩu truy cập" msgstr "mật khẩu truy cập"
#: judge/models/contest.py:280 #: judge/models/contest.py:281
msgid "" msgid ""
"An optional code to prompt contestants before they are allowed to join the " "An optional code to prompt contestants before they are allowed to join the "
"contest. Leave it blank to disable." "contest. Leave it blank to disable."
@ -971,342 +975,346 @@ msgstr ""
"Mật khẩu truy cập cho các thí sinh muốn tham gia kỳ thi. Để trống nếu không " "Mật khẩu truy cập cho các thí sinh muốn tham gia kỳ thi. Để trống nếu không "
"dùng." "dùng."
#: judge/models/contest.py:286 judge/models/problem.py:244 #: judge/models/contest.py:287 judge/models/problem.py:244
msgid "personae non gratae" msgid "personae non gratae"
msgstr "Chặn tham gia" msgstr "Chặn tham gia"
#: judge/models/contest.py:288 #: judge/models/contest.py:289
msgid "Bans the selected users from joining this contest." msgid "Bans the selected users from joining this contest."
msgstr "Cấm những người dùng được chọn tham gia kỳ thi." msgstr "Cấm những người dùng được chọn tham gia kỳ thi."
#: judge/models/contest.py:291 #: judge/models/contest.py:292
msgid "contest format" msgid "contest format"
msgstr "format kỳ thi" msgstr "format kỳ thi"
#: judge/models/contest.py:295 #: judge/models/contest.py:296
msgid "The contest format module to use." msgid "The contest format module to use."
msgstr "Format kỳ thi sử dụng." msgstr "Format kỳ thi sử dụng."
#: judge/models/contest.py:298 #: judge/models/contest.py:299
msgid "contest format configuration" msgid "contest format configuration"
msgstr "Tùy chỉnh format kỳ thi" msgstr "Tùy chỉnh format kỳ thi"
#: judge/models/contest.py:302 #: judge/models/contest.py:303
msgid "" msgid ""
"A JSON object to serve as the configuration for the chosen contest format " "A JSON object to serve as the configuration for the chosen contest format "
"module. Leave empty to use None. Exact format depends on the contest format " "module. Leave empty to use None. Exact format depends on the contest format "
"selected." "selected."
msgstr "" msgstr ""
#: judge/models/contest.py:315 #: judge/models/contest.py:316
msgid "precision points" msgid "precision points"
msgstr "Hiển thị điểm" msgstr "Hiển thị điểm"
#: judge/models/contest.py:318 #: judge/models/contest.py:319
msgid "Number of digits to round points to." msgid "Number of digits to round points to."
msgstr "Số chữ số thập phân trên bảng điểm." msgstr "Số chữ số thập phân trên bảng điểm."
#: judge/models/contest.py:321 #: judge/models/contest.py:322
msgid "rate limit" msgid "rate limit"
msgstr "giới hạn bài nộp" msgstr "giới hạn bài nộp"
#: judge/models/contest.py:326 #: judge/models/contest.py:327
msgid "" msgid ""
"Maximum number of submissions per minute. Leave empty if you don't want rate " "Maximum number of submissions per minute. Leave empty if you don't want rate "
"limit." "limit."
msgstr "Số bài nộp tối đa mỗi phút. Để trống nếu không muốn giới hạn." msgstr "Số bài nộp tối đa mỗi phút. Để trống nếu không muốn giới hạn."
#: judge/models/contest.py:652 #: judge/models/contest.py:359
msgid "End time must be after start time"
msgstr "Thời gian kết thúc phải sau thời gian bắt đầu"
#: judge/models/contest.py:660
msgid "See private contests" msgid "See private contests"
msgstr "" msgstr ""
#: judge/models/contest.py:653 #: judge/models/contest.py:661
msgid "Edit own contests" msgid "Edit own contests"
msgstr "" msgstr ""
#: judge/models/contest.py:654 #: judge/models/contest.py:662
msgid "Edit all contests" msgid "Edit all contests"
msgstr "" msgstr ""
#: judge/models/contest.py:655 #: judge/models/contest.py:663
msgid "Clone contest" msgid "Clone contest"
msgstr "" msgstr ""
#: judge/models/contest.py:656 templates/contest/moss.html:72 #: judge/models/contest.py:664 templates/contest/moss.html:72
msgid "MOSS contest" msgid "MOSS contest"
msgstr "" msgstr ""
#: judge/models/contest.py:657 #: judge/models/contest.py:665
msgid "Rate contests" msgid "Rate contests"
msgstr "" msgstr ""
#: judge/models/contest.py:658 #: judge/models/contest.py:666
msgid "Contest access codes" msgid "Contest access codes"
msgstr "" msgstr ""
#: judge/models/contest.py:659 #: judge/models/contest.py:667
msgid "Create private contests" msgid "Create private contests"
msgstr "" msgstr ""
#: judge/models/contest.py:660 #: judge/models/contest.py:668
msgid "Change contest visibility" msgid "Change contest visibility"
msgstr "" msgstr ""
#: judge/models/contest.py:661 #: judge/models/contest.py:669
msgid "Edit contest problem label script" msgid "Edit contest problem label script"
msgstr "Cách hiển thị thứ tự bài tập" msgstr "Cách hiển thị thứ tự bài tập"
#: judge/models/contest.py:663 judge/models/contest.py:824 #: judge/models/contest.py:671 judge/models/contest.py:832
#: judge/models/contest.py:902 judge/models/contest.py:932 #: judge/models/contest.py:910 judge/models/contest.py:940
#: judge/models/contest.py:1011 judge/models/submission.py:116 #: judge/models/contest.py:1019 judge/models/submission.py:116
msgid "contest" msgid "contest"
msgstr "kỳ thi" msgstr "kỳ thi"
#: judge/models/contest.py:664 #: judge/models/contest.py:672
msgid "contests" msgid "contests"
msgstr "kỳ thi" msgstr "kỳ thi"
#: judge/models/contest.py:687 #: judge/models/contest.py:695
msgid "associated contest" msgid "associated contest"
msgstr "" msgstr ""
#: judge/models/contest.py:700 #: judge/models/contest.py:708
msgid "score" msgid "score"
msgstr "điểm" msgstr "điểm"
#: judge/models/contest.py:701 #: judge/models/contest.py:709
msgid "cumulative time" msgid "cumulative time"
msgstr "tổng thời gian" msgstr "tổng thời gian"
#: judge/models/contest.py:703 #: judge/models/contest.py:711
msgid "is disqualified" msgid "is disqualified"
msgstr "đã bị loại" msgstr "đã bị loại"
#: judge/models/contest.py:705 #: judge/models/contest.py:713
msgid "Whether this participation is disqualified." msgid "Whether this participation is disqualified."
msgstr "Quyết định thí sinh có bị loại không." msgstr "Quyết định thí sinh có bị loại không."
#: judge/models/contest.py:707 #: judge/models/contest.py:715
msgid "tie-breaking field" msgid "tie-breaking field"
msgstr "" msgstr ""
#: judge/models/contest.py:709 #: judge/models/contest.py:717
msgid "virtual participation id" msgid "virtual participation id"
msgstr "id lần tham gia ảo" msgstr "id lần tham gia ảo"
#: judge/models/contest.py:711 #: judge/models/contest.py:719
msgid "0 means non-virtual, otherwise the n-th virtual participation." msgid "0 means non-virtual, otherwise the n-th virtual participation."
msgstr "0 nghĩa là tham gia chính thức, ngược lại là lần tham gia ảo thứ n." msgstr "0 nghĩa là tham gia chính thức, ngược lại là lần tham gia ảo thứ n."
#: judge/models/contest.py:714 #: judge/models/contest.py:722
msgid "contest format specific data" msgid "contest format specific data"
msgstr "" msgstr ""
#: judge/models/contest.py:717 #: judge/models/contest.py:725
msgid "same as format_data, but including frozen results" msgid "same as format_data, but including frozen results"
msgstr "" msgstr ""
#: judge/models/contest.py:721 #: judge/models/contest.py:729
msgid "final score" msgid "final score"
msgstr "điểm" msgstr "điểm"
#: judge/models/contest.py:723 #: judge/models/contest.py:731
msgid "final cumulative time" msgid "final cumulative time"
msgstr "tổng thời gian" msgstr "tổng thời gian"
#: judge/models/contest.py:799 #: judge/models/contest.py:807
#, python-format #, python-format
msgid "%s spectating in %s" msgid "%s spectating in %s"
msgstr "%s đang theo dõi trong %s" msgstr "%s đang theo dõi trong %s"
#: judge/models/contest.py:804 #: judge/models/contest.py:812
#, python-format #, python-format
msgid "%s in %s, v%d" msgid "%s in %s, v%d"
msgstr "%s trong %s, v%d" msgstr "%s trong %s, v%d"
#: judge/models/contest.py:809 #: judge/models/contest.py:817
#, python-format #, python-format
msgid "%s in %s" msgid "%s in %s"
msgstr "%s trong %s" msgstr "%s trong %s"
#: judge/models/contest.py:812 #: judge/models/contest.py:820
msgid "contest participation" msgid "contest participation"
msgstr "lần tham gia kỳ thi" msgstr "lần tham gia kỳ thi"
#: judge/models/contest.py:813 #: judge/models/contest.py:821
msgid "contest participations" msgid "contest participations"
msgstr "lần tham gia kỳ thi" msgstr "lần tham gia kỳ thi"
#: judge/models/contest.py:820 judge/models/contest.py:873 #: judge/models/contest.py:828 judge/models/contest.py:881
#: judge/models/contest.py:935 judge/models/course.py:165 #: judge/models/contest.py:943 judge/models/course.py:165
#: judge/models/problem.py:609 judge/models/problem.py:616 #: judge/models/problem.py:609 judge/models/problem.py:616
#: judge/models/problem.py:637 judge/models/problem.py:668 #: judge/models/problem.py:637 judge/models/problem.py:668
#: judge/models/problem_data.py:50 #: judge/models/problem_data.py:50
msgid "problem" msgid "problem"
msgstr "bài tập" msgstr "bài tập"
#: judge/models/contest.py:828 judge/models/contest.py:885 #: judge/models/contest.py:836 judge/models/contest.py:893
#: judge/models/course.py:167 judge/models/problem.py:209 #: judge/models/course.py:167 judge/models/problem.py:209
msgid "points" msgid "points"
msgstr "điểm" msgstr "điểm"
#: judge/models/contest.py:829 #: judge/models/contest.py:837
msgid "partial" msgid "partial"
msgstr "thành phần" msgstr "thành phần"
#: judge/models/contest.py:830 judge/models/contest.py:887 #: judge/models/contest.py:838 judge/models/contest.py:895
msgid "is pretested" msgid "is pretested"
msgstr "dùng pretest" msgstr "dùng pretest"
#: judge/models/contest.py:831 judge/models/course.py:166 #: judge/models/contest.py:839 judge/models/course.py:166
#: judge/models/interface.py:48 #: judge/models/interface.py:48
msgid "order" msgid "order"
msgstr "thứ tự" msgstr "thứ tự"
#: judge/models/contest.py:833 #: judge/models/contest.py:841
msgid "visible testcases" msgid "visible testcases"
msgstr "hiển thị test" msgstr "hiển thị test"
#: judge/models/contest.py:838 #: judge/models/contest.py:846
msgid "Maximum number of submissions for this problem, or 0 for no limit." msgid "Maximum number of submissions for this problem, or 0 for no limit."
msgstr "Số lần nộp tối đa, đặt là 0 nếu không có giới hạn." msgstr "Số lần nộp tối đa, đặt là 0 nếu không có giới hạn."
#: judge/models/contest.py:840 #: judge/models/contest.py:848
msgid "max submissions" msgid "max submissions"
msgstr "số lần nộp tối đa" msgstr "số lần nộp tối đa"
#: judge/models/contest.py:843 #: judge/models/contest.py:851
msgid "Why include a problem you can't submit to?" msgid "Why include a problem you can't submit to?"
msgstr "" msgstr ""
#: judge/models/contest.py:847 #: judge/models/contest.py:855
#, fuzzy #, fuzzy
#| msgid "Only for format new IOI. Separated by commas, e.g: 2, 3" #| msgid "Only for format new IOI. Separated by commas, e.g: 2, 3"
msgid "Separated by commas, e.g: 2, 3" msgid "Separated by commas, e.g: 2, 3"
msgstr "" msgstr ""
"Chỉ dùng với format IOI mới. Các sub cách nhau bởi dấu phẩy. Ví dụ: 2, 3" "Chỉ dùng với format IOI mới. Các sub cách nhau bởi dấu phẩy. Ví dụ: 2, 3"
#: judge/models/contest.py:848 #: judge/models/contest.py:856
msgid "hidden subtasks" msgid "hidden subtasks"
msgstr "Đóng băng subtasks" msgstr "Đóng băng subtasks"
#: judge/models/contest.py:860 #: judge/models/contest.py:868
msgid "contest problem" msgid "contest problem"
msgstr "bài trong kỳ thi" msgstr "bài trong kỳ thi"
#: judge/models/contest.py:861 #: judge/models/contest.py:869
msgid "contest problems" msgid "contest problems"
msgstr "bài trong kỳ thi" msgstr "bài trong kỳ thi"
#: judge/models/contest.py:867 judge/models/submission.py:274 #: judge/models/contest.py:875 judge/models/submission.py:274
msgid "submission" msgid "submission"
msgstr "bài nộp" msgstr "bài nộp"
#: judge/models/contest.py:880 judge/models/contest.py:906 #: judge/models/contest.py:888 judge/models/contest.py:914
msgid "participation" msgid "participation"
msgstr "lần tham gia" msgstr "lần tham gia"
#: judge/models/contest.py:888 #: judge/models/contest.py:896
msgid "Whether this submission was ran only on pretests." msgid "Whether this submission was ran only on pretests."
msgstr "Quyết định bài nộp chỉ được chạy trên pretest không." msgstr "Quyết định bài nộp chỉ được chạy trên pretest không."
#: judge/models/contest.py:893 #: judge/models/contest.py:901
msgid "contest submission" msgid "contest submission"
msgstr "bài nộp kỳ thi" msgstr "bài nộp kỳ thi"
#: judge/models/contest.py:894 #: judge/models/contest.py:902
msgid "contest submissions" msgid "contest submissions"
msgstr "bài nộp kỳ thi" msgstr "bài nộp kỳ thi"
#: judge/models/contest.py:910 #: judge/models/contest.py:918
msgid "rank" msgid "rank"
msgstr "rank" msgstr "rank"
#: judge/models/contest.py:911 #: judge/models/contest.py:919
msgid "rating" msgid "rating"
msgstr "rating" msgstr "rating"
#: judge/models/contest.py:912 #: judge/models/contest.py:920
msgid "raw rating" msgid "raw rating"
msgstr "rating thật" msgstr "rating thật"
#: judge/models/contest.py:913 #: judge/models/contest.py:921
msgid "contest performance" msgid "contest performance"
msgstr "" msgstr ""
#: judge/models/contest.py:914 #: judge/models/contest.py:922
msgid "last rated" msgid "last rated"
msgstr "lần cuối được xếp hạng" msgstr "lần cuối được xếp hạng"
#: judge/models/contest.py:918 #: judge/models/contest.py:926
msgid "contest rating" msgid "contest rating"
msgstr "rating kỳ thi" msgstr "rating kỳ thi"
#: judge/models/contest.py:919 #: judge/models/contest.py:927
msgid "contest ratings" msgid "contest ratings"
msgstr "rating kỳ thi" msgstr "rating kỳ thi"
#: judge/models/contest.py:943 #: judge/models/contest.py:951
msgid "contest moss result" msgid "contest moss result"
msgstr "kết quả MOSS kỳ thi" msgstr "kết quả MOSS kỳ thi"
#: judge/models/contest.py:944 #: judge/models/contest.py:952
msgid "contest moss results" msgid "contest moss results"
msgstr "kết quả MOSS kỳ thi" msgstr "kết quả MOSS kỳ thi"
#: judge/models/contest.py:949 #: judge/models/contest.py:957
msgid "clarified problem" msgid "clarified problem"
msgstr "" msgstr ""
#: judge/models/contest.py:951 #: judge/models/contest.py:959
msgid "clarification body" msgid "clarification body"
msgstr "" msgstr ""
#: judge/models/contest.py:953 #: judge/models/contest.py:961
msgid "clarification timestamp" msgid "clarification timestamp"
msgstr "" msgstr ""
#: judge/models/contest.py:972 #: judge/models/contest.py:980
msgid "contests summary" msgid "contests summary"
msgstr "tổng kết kỳ thi" msgstr "tổng kết kỳ thi"
#: judge/models/contest.py:973 #: judge/models/contest.py:981
msgid "contests summaries" msgid "contests summaries"
msgstr "tổng kết kỳ thi" msgstr "tổng kết kỳ thi"
#: judge/models/contest.py:984 judge/models/contest.py:991 #: judge/models/contest.py:992 judge/models/contest.py:999
msgid "official contest category" msgid "official contest category"
msgstr "loại kỳ thi chính thức" msgstr "loại kỳ thi chính thức"
#: judge/models/contest.py:992 #: judge/models/contest.py:1000
msgid "official contest categories" msgid "official contest categories"
msgstr "các loại kỳ thi chính thức" msgstr "các loại kỳ thi chính thức"
#: judge/models/contest.py:997 judge/models/contest.py:1004 #: judge/models/contest.py:1005 judge/models/contest.py:1012
msgid "official contest location" msgid "official contest location"
msgstr "địa điểm kỳ thi chính thức" msgstr "địa điểm kỳ thi chính thức"
#: judge/models/contest.py:1005 #: judge/models/contest.py:1013
msgid "official contest locations" msgid "official contest locations"
msgstr "các địa điểm kỳ thi chính thức" msgstr "các địa điểm kỳ thi chính thức"
#: judge/models/contest.py:1017 #: judge/models/contest.py:1025
msgid "contest category" msgid "contest category"
msgstr "loại kỳ thi" msgstr "loại kỳ thi"
#: judge/models/contest.py:1020 #: judge/models/contest.py:1028
msgid "year" msgid "year"
msgstr "năm" msgstr "năm"
#: judge/models/contest.py:1023 #: judge/models/contest.py:1031
msgid "contest location" msgid "contest location"
msgstr "địa điểm kỳ thi" msgstr "địa điểm kỳ thi"
#: judge/models/contest.py:1028 #: judge/models/contest.py:1036
msgid "official contest" msgid "official contest"
msgstr "kỳ thi chính thức" msgstr "kỳ thi chính thức"
#: judge/models/contest.py:1029 #: judge/models/contest.py:1037
msgid "official contests" msgid "official contests"
msgstr "các kỳ thi chính thức" msgstr "các kỳ thi chính thức"
@ -1542,7 +1550,7 @@ msgstr "Bài tập riêng tư trong: "
msgid "The problem is public to everyone." msgid "The problem is public to everyone."
msgstr "Bài tập được công khai với mọi người." msgstr "Bài tập được công khai với mọi người."
#: judge/models/notification.py:60 #: judge/models/notification.py:61
msgid "The problem is private." msgid "The problem is private."
msgstr "Bài tập được đánh dấu riêng tư." msgstr "Bài tập được đánh dấu riêng tư."
@ -2850,8 +2858,8 @@ msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote."
msgid "You already voted." msgid "You already voted."
msgstr "Bạn đã vote." msgstr "Bạn đã vote."
#: judge/views/comment.py:267 judge/views/organization.py:883 #: judge/views/comment.py:267 judge/views/organization.py:881
#: judge/views/organization.py:1033 judge/views/organization.py:1228 #: judge/views/organization.py:1031 judge/views/organization.py:1226
msgid "Edited from site" msgid "Edited from site"
msgstr "Chỉnh sửa từ web" msgstr "Chỉnh sửa từ web"
@ -3266,77 +3274,77 @@ msgstr[0] "Đã từ chối %d người."
msgid "Add member for %s" msgid "Add member for %s"
msgstr "Thêm thành viên cho %s" msgstr "Thêm thành viên cho %s"
#: judge/views/organization.py:803 #: judge/views/organization.py:801
#, fuzzy #, fuzzy
#| msgid "Edited from site" #| msgid "Edited from site"
msgid "Added members from site" msgid "Added members from site"
msgstr "Chỉnh sửa từ web" msgstr "Chỉnh sửa từ web"
#: judge/views/organization.py:823 judge/views/organization.py:831 #: judge/views/organization.py:821 judge/views/organization.py:829
#: judge/views/organization.py:840 #: judge/views/organization.py:838
msgid "Can't kick user" msgid "Can't kick user"
msgstr "Không thể đuổi" msgstr "Không thể đuổi"
#: judge/views/organization.py:824 #: judge/views/organization.py:822
msgid "The user you are trying to kick does not exist!" msgid "The user you are trying to kick does not exist!"
msgstr "" msgstr ""
#: judge/views/organization.py:832 #: judge/views/organization.py:830
#, python-format #, python-format
msgid "The user you are trying to kick is not in organization: %s." msgid "The user you are trying to kick is not in organization: %s."
msgstr "" msgstr ""
#: judge/views/organization.py:841 #: judge/views/organization.py:839
#, fuzzy #, fuzzy
#| msgid "Are you sure you want to leave this organization?" #| msgid "Are you sure you want to leave this organization?"
msgid "The user you are trying to kick is an organization admin." msgid "The user you are trying to kick is an organization admin."
msgstr "Bạn có chắc muốn rời tổ chức?" msgstr "Bạn có chắc muốn rời tổ chức?"
#: judge/views/organization.py:846 #: judge/views/organization.py:844
#, fuzzy #, fuzzy
#| msgid "Add members" #| msgid "Add members"
msgid "Kicked member" msgid "Kicked member"
msgstr "Thêm thành viên" msgstr "Thêm thành viên"
#: judge/views/organization.py:866 judge/views/organization.py:1022 #: judge/views/organization.py:864 judge/views/organization.py:1020
#, python-format #, python-format
msgid "Edit %s" msgid "Edit %s"
msgstr "Chỉnh sửa %s" msgstr "Chỉnh sửa %s"
#: judge/views/organization.py:894 templates/organization/search-form.html:19 #: judge/views/organization.py:892 templates/organization/search-form.html:19
msgid "Create group" msgid "Create group"
msgstr "Tạo nhóm" msgstr "Tạo nhóm"
#: judge/views/organization.py:909 #: judge/views/organization.py:907
msgid "Exceeded limit" msgid "Exceeded limit"
msgstr "" msgstr ""
#: judge/views/organization.py:910 #: judge/views/organization.py:908
#, python-format #, python-format
msgid "You created too many groups. You can only create at most %d groups" msgid "You created too many groups. You can only create at most %d groups"
msgstr "" msgstr ""
#: judge/views/organization.py:915 judge/views/organization.py:940 #: judge/views/organization.py:913 judge/views/organization.py:938
#: judge/views/organization.py:1113 #: judge/views/organization.py:1111
msgid "Added from site" msgid "Added from site"
msgstr "Thêm từ web" msgstr "Thêm từ web"
#: judge/views/organization.py:931 #: judge/views/organization.py:929
#: templates/organization/org-right-sidebar.html:47 #: templates/organization/org-right-sidebar.html:47
msgid "Add contest" msgid "Add contest"
msgstr "Thêm kỳ thi" msgstr "Thêm kỳ thi"
#: judge/views/organization.py:974 judge/views/organization.py:1160 #: judge/views/organization.py:972 judge/views/organization.py:1158
msgid "Permission denied" msgid "Permission denied"
msgstr "Truy cập bị từ chối" msgstr "Truy cập bị từ chối"
#: judge/views/organization.py:975 #: judge/views/organization.py:973
#, fuzzy #, fuzzy
#| msgid "You are not allowed to edit this organization." #| msgid "You are not allowed to edit this organization."
msgid "You are not allowed to edit this contest" msgid "You are not allowed to edit this contest"
msgstr "Bạn không được phép chỉnh sửa tổ chức này." msgstr "Bạn không được phép chỉnh sửa tổ chức này."
#: judge/views/organization.py:1026 templates/blog/blog.html:31 #: judge/views/organization.py:1024 templates/blog/blog.html:31
#: templates/comments/content-list.html:53 #: templates/comments/content-list.html:53
#: templates/comments/content-list.html:66 #: templates/comments/content-list.html:66
#: templates/contest/contest-tabs.html:36 templates/contest/macros.html:14 #: templates/contest/contest-tabs.html:36 templates/contest/macros.html:14
@ -3347,27 +3355,27 @@ msgstr "Bạn không được phép chỉnh sửa tổ chức này."
msgid "Edit" msgid "Edit"
msgstr "Chỉnh sửa" msgstr "Chỉnh sửa"
#: judge/views/organization.py:1102 #: judge/views/organization.py:1100
#, python-format #, python-format
msgid "Add blog for %s" msgid "Add blog for %s"
msgstr "Thêm bài đăng cho %s" msgstr "Thêm bài đăng cho %s"
#: judge/views/organization.py:1154 #: judge/views/organization.py:1152
#, fuzzy #, fuzzy
#| msgid "Those who can edit this organization" #| msgid "Those who can edit this organization"
msgid "This blog does not belong to this organization" msgid "This blog does not belong to this organization"
msgstr "Những người có thể chỉnh sửa tổ chức" msgstr "Những người có thể chỉnh sửa tổ chức"
#: judge/views/organization.py:1156 #: judge/views/organization.py:1154
msgid "Not allowed to edit this blog" msgid "Not allowed to edit this blog"
msgstr "Bạn không được phép chỉnh sửa bài đăng này." msgstr "Bạn không được phép chỉnh sửa bài đăng này."
#: judge/views/organization.py:1213 #: judge/views/organization.py:1211
#, python-format #, python-format
msgid "Edit blog %s" msgid "Edit blog %s"
msgstr "Chỉnh sửa %s" msgstr "Chỉnh sửa %s"
#: judge/views/organization.py:1259 #: judge/views/organization.py:1257
#, python-format #, python-format
msgid "Pending blogs in %s" msgid "Pending blogs in %s"
msgstr "Bài đang đợi duyệt trong %s" msgstr "Bài đang đợi duyệt trong %s"
@ -3962,11 +3970,11 @@ msgstr "Thêm mới"
msgid "No clarifications have been made at this time." msgid "No clarifications have been made at this time."
msgstr "Không có thông báo nào." msgstr "Không có thông báo nào."
#: templates/chat/chat.html:5 templates/chat/chat_js.html:566 #: templates/chat/chat.html:5 templates/chat/chat_js.html:570
msgid "Chat Box" msgid "Chat Box"
msgstr "Chat Box" msgstr "Chat Box"
#: templates/chat/chat.html:68 templates/chat/chat_js.html:526 #: templates/chat/chat.html:68 templates/chat/chat_js.html:530
#: templates/user/base-users-js.html:10 #: templates/user/base-users-js.html:10
#: templates/user/base-users-two-col.html:19 #: templates/user/base-users-two-col.html:19
msgid "Search by handle..." msgid "Search by handle..."
@ -3984,7 +3992,7 @@ msgstr ""
msgid "New message(s)" msgid "New message(s)"
msgstr "Tin nhắn mới" msgstr "Tin nhắn mới"
#: templates/chat/chat_js.html:436 #: templates/chat/chat_js.html:440
msgid "Mute this user and delete all messages?" msgid "Mute this user and delete all messages?"
msgstr "Mute người dùng này và xóa tất cả tin nhắn chung?" msgstr "Mute người dùng này và xóa tất cả tin nhắn chung?"
@ -3993,7 +4001,7 @@ msgstr "Mute người dùng này và xóa tất cả tin nhắn chung?"
msgid "Delete" msgid "Delete"
msgstr "Xóa" msgstr "Xóa"
#: templates/chat/message.html:23 #: templates/chat/message.html:25
msgid "Mute" msgid "Mute"
msgstr "" msgstr ""
@ -4635,9 +4643,8 @@ msgstr "Vui lòng sửa các lỗi bên dưới"
#: templates/course/edit_lesson.html:56 #: templates/course/edit_lesson.html:56
#: templates/markdown_editor/markdown_editor.html:122 #: templates/markdown_editor/markdown_editor.html:122
#: templates/organization/blog/edit.html:36 #: templates/organization/blog/edit.html:36
#: templates/organization/contest/add.html:36
#: templates/organization/contest/edit.html:87 #: templates/organization/contest/edit.html:87
#: templates/organization/form.html:23 templates/pagedown.html:31 #: templates/organization/form.html:30 templates/pagedown.html:31
msgid "Save" msgid "Save"
msgstr "Lưu" msgstr "Lưu"

View file

@ -9,30 +9,5 @@
{% endblock %} {% endblock %}
{% block middle_content %} {% block middle_content %}
<form action="" method="post"> {% include "organization/form.html" %}
{% csrf_token %}
{% if form.errors %}
<div class="alert alert-danger alert-dismissable">
<a href="#" class="close">x</a>
{{ form.non_field_errors() }}
{{ form.errors }}
</div>
{% endif %}
{% for field in form %}
{% if not field.is_hidden %}
<div style="margin-bottom: 1em;">
{{ field.errors }}
<label for="{{field.id_for_label }}"><b>{{ field.label }}{% if field.field.required %}<span class="red"> * </span>{% endif %}:</b> </label>
<div class="org-field-wrapper" id="org-field-wrapper-{{field.html_name }}">
{{ field }}
</div>
{% if field.help_text %}
<small class="org-help-text"><i class="fa fa-exclamation-circle"></i> {{ field.help_text|safe }}</small>
{% endif %}
</div>
{% endif %}
{% endfor %}
<button type="submit">{{ _('Save') }}</button>
</form>
{% endblock %} {% endblock %}

View file

@ -4,6 +4,13 @@
<div class="alert alert-danger alert-dismissable"> <div class="alert alert-danger alert-dismissable">
<a href="#" class="close">x</a> <a href="#" class="close">x</a>
{{ _("Please fix below errors") }} {{ _("Please fix below errors") }}
{% if form.non_field_errors %}
<ul>
{% for error in form.non_field_errors() %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div> </div>
{% endif %} {% endif %}
{% for field in form %} {% for field in form %}