Add chat mute

This commit is contained in:
cuom1999 2023-03-15 23:08:13 -05:00
parent 533b5aa7c8
commit 03cd608b9d
5 changed files with 189 additions and 136 deletions

View file

@ -128,19 +128,41 @@ def delete_message(request):
ret = {"delete": "done"} ret = {"delete": "done"}
if request.method == "GET": if request.method == "GET":
return JsonResponse(ret) return HttpResponseBadRequest()
if request.user.is_staff: if not request.user.is_staff:
try: return HttpResponseBadRequest()
messid = int(request.POST.get("message"))
mess = Message.objects.get(id=messid)
except:
return HttpResponseBadRequest()
mess.hidden = True try:
mess.save() messid = int(request.POST.get("message"))
mess = Message.objects.get(id=messid)
except:
return HttpResponseBadRequest()
return JsonResponse(ret) mess.hidden = True
mess.save()
return JsonResponse(ret)
def mute_message(request):
ret = {"mute": "done"}
if request.method == "GET":
return HttpResponseBadRequest()
if not request.user.is_staff:
return HttpResponseBadRequest()
try:
messid = int(request.POST.get("message"))
mess = Message.objects.get(id=messid)
except:
return HttpResponseBadRequest()
mess.author.mute = True
mess.author.save()
Message.objects.filter(room=None, author=mess.author).update(hidden=True)
return JsonResponse(ret) return JsonResponse(ret)

View file

@ -1035,6 +1035,7 @@ urlpatterns = [
name="chat", name="chat",
), ),
url(r"^delete/$", chat.delete_message, name="delete_chat_message"), url(r"^delete/$", chat.delete_message, name="delete_chat_message"),
url(r"^mute/$", chat.mute_message, name="mute_chat_message"),
url(r"^post/$", chat.post_message, name="post_chat_message"), url(r"^post/$", chat.post_message, name="post_chat_message"),
url(r"^ajax$", chat.chat_message_ajax, name="chat_message_ajax"), url(r"^ajax$", chat.chat_message_ajax, name="chat_message_ajax"),
url( url(

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: 2023-03-10 11:29+0700\n" "POT-Creation-Date: 2023-03-16 11:07+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"
@ -473,57 +473,57 @@ msgstr "IOI mới"
msgid "You may not be part of more than {count} public groups." msgid "You may not be part of more than {count} public groups."
msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai." msgstr "Bạn không thể tham gia nhiều hơn {count} nhóm công khai."
#: judge/forms.py:144 #: judge/forms.py:146
msgid "Any judge" msgid "Any judge"
msgstr "" msgstr ""
#: judge/forms.py:332 #: judge/forms.py:340
msgid "Enter usernames separating by space" msgid "Enter usernames separating by space"
msgstr "Nhập các tên đăng nhập, cách nhau bởi dấu cách" msgstr "Nhập các tên đăng nhập, cách nhau bởi dấu cách"
#: judge/forms.py:333 judge/views/stats.py:166 templates/stats/site.html:27 #: judge/forms.py:341 judge/views/stats.py:166 templates/stats/site.html:27
msgid "New users" msgid "New users"
msgstr "Thành viên mới" msgstr "Thành viên mới"
#: judge/forms.py:350 #: judge/forms.py:358
#, python-brace-format #, python-brace-format
msgid "These usernames don't exist: {usernames}" msgid "These usernames don't exist: {usernames}"
msgstr "Các tên đăng nhập này không tồn tại: {usernames}" msgstr "Các tên đăng nhập này không tồn tại: {usernames}"
#: judge/forms.py:409 judge/views/register.py:30 #: judge/forms.py:417 judge/views/register.py:30
#: templates/registration/registration_form.html:34 #: templates/registration/registration_form.html:34
#: templates/user/base-users-table.html:5 #: templates/user/base-users-table.html:5
#: templates/user/import/table_csv.html:4 #: templates/user/import/table_csv.html:4
msgid "Username" msgid "Username"
msgstr "Tên đăng nhập" msgstr "Tên đăng nhập"
#: judge/forms.py:410 templates/registration/registration_form.html:46 #: judge/forms.py:418 templates/registration/registration_form.html:46
#: templates/registration/registration_form.html:60 #: templates/registration/registration_form.html:60
#: templates/user/import/table_csv.html:5 #: templates/user/import/table_csv.html:5
msgid "Password" msgid "Password"
msgstr "Mật khẩu" msgstr "Mật khẩu"
#: judge/forms.py:436 #: judge/forms.py:444
msgid "Two Factor Authentication tokens must be 6 decimal digits." msgid "Two Factor Authentication tokens must be 6 decimal digits."
msgstr "Two Factor Authentication phải chứa 6 chữ số." msgstr "Two Factor Authentication phải chứa 6 chữ số."
#: judge/forms.py:449 templates/registration/totp_auth.html:32 #: judge/forms.py:457 templates/registration/totp_auth.html:32
msgid "Invalid Two Factor Authentication token." msgid "Invalid Two Factor Authentication token."
msgstr "Token Two Factor Authentication không hợp lệ." msgstr "Token Two Factor Authentication không hợp lệ."
#: judge/forms.py:456 judge/models/problem.py:132 #: judge/forms.py:464 judge/models/problem.py:133
msgid "Problem code must be ^[a-z0-9]+$" msgid "Problem code must be ^[a-z0-9]+$"
msgstr "Mã bài phải có dạng ^[a-z0-9]+$" msgstr "Mã bài phải có dạng ^[a-z0-9]+$"
#: judge/forms.py:463 #: judge/forms.py:471
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:470 judge/models/contest.py:91 #: judge/forms.py:478 judge/models/contest.py:91
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]+$"
#: judge/forms.py:476 #: judge/forms.py:484
msgid "Contest with key already exists." msgid "Contest with key already exists."
msgstr "Mã kỳ thi đã tồn tại." msgstr "Mã kỳ thi đã tồn tại."
@ -608,7 +608,7 @@ msgid "commenter"
msgstr "người bình luận" msgstr "người bình luận"
#: judge/models/comment.py:48 judge/models/pagevote.py:16 #: judge/models/comment.py:48 judge/models/pagevote.py:16
#: judge/models/problem.py:718 #: judge/models/problem.py:721
msgid "votes" msgid "votes"
msgstr "bình chọn" msgstr "bình chọn"
@ -748,7 +748,7 @@ msgstr ""
msgid "description" msgid "description"
msgstr "mô tả" msgstr "mô tả"
#: judge/models/contest.py:120 judge/models/problem.py:590 #: judge/models/contest.py:120 judge/models/problem.py:593
#: judge/models/runtime.py:216 #: judge/models/runtime.py:216
msgid "problems" msgid "problems"
msgstr "bài tập" msgstr "bài tập"
@ -761,8 +761,8 @@ msgstr "thời gian bắt đầu"
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:125 judge/models/problem.py:185 #: judge/models/contest.py:125 judge/models/problem.py:186
#: judge/models/problem.py:625 #: judge/models/problem.py:628
msgid "time limit" msgid "time limit"
msgstr "giới hạn thời gian" msgstr "giới hạn thời gian"
@ -786,7 +786,7 @@ msgstr ""
"hãy nhập 02:00:00" "hãy nhập 02:00:00"
#: judge/models/contest.py:141 judge/models/course.py:28 #: judge/models/contest.py:141 judge/models/course.py:28
#: judge/models/course.py:164 judge/models/problem.py:224 #: judge/models/course.py:164 judge/models/problem.py:225
msgid "publicly visible" msgid "publicly visible"
msgstr "công khai" msgstr "công khai"
@ -885,12 +885,12 @@ msgstr ""
"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:221 judge/models/interface.py:96 #: judge/models/contest.py:221 judge/models/interface.py:96
#: judge/models/problem.py:282 #: judge/models/problem.py:283
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:226 judge/models/course.py:34 #: judge/models/contest.py:226 judge/models/course.py:34
#: judge/models/interface.py:92 judge/models/problem.py:278 #: judge/models/interface.py:92 judge/models/problem.py:279
#: judge/models/profile.py:130 #: judge/models/profile.py:130
msgid "organizations" msgid "organizations"
msgstr "tổ chức" msgstr "tổ chức"
@ -899,7 +899,7 @@ msgstr "tổ chức"
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:230 judge/models/problem.py:255 #: judge/models/contest.py:230 judge/models/problem.py:256
msgid "OpenGraph image" msgid "OpenGraph image"
msgstr "Hình ảnh OpenGraph" msgstr "Hình ảnh OpenGraph"
@ -920,7 +920,7 @@ msgstr "số lượng thí sinh thi trực tiếp"
msgid "contest summary" msgid "contest summary"
msgstr "tổng kết kỳ thi" msgstr "tổng kết kỳ thi"
#: judge/models/contest.py:252 judge/models/problem.py:261 #: judge/models/contest.py:252 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 ""
@ -936,7 +936,7 @@ 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:267 judge/models/problem.py:243 #: judge/models/contest.py:267 judge/models/problem.py:244
msgid "personae non gratae" msgid "personae non gratae"
msgstr "Chặn tham gia" msgstr "Chặn tham gia"
@ -1097,14 +1097,14 @@ msgid "contest participations"
msgstr "lần tham gia kỳ thi" msgstr "lần tham gia kỳ thi"
#: judge/models/contest.py:762 judge/models/contest.py:818 #: judge/models/contest.py:762 judge/models/contest.py:818
#: judge/models/contest.py:880 judge/models/problem.py:589 #: judge/models/contest.py:880 judge/models/problem.py:592
#: judge/models/problem.py:596 judge/models/problem.py:617 #: judge/models/problem.py:599 judge/models/problem.py:620
#: judge/models/problem.py:648 judge/models/problem_data.py:50 #: judge/models/problem.py:651 judge/models/problem_data.py:50
msgid "problem" msgid "problem"
msgstr "bài tập" msgstr "bài tập"
#: judge/models/contest.py:770 judge/models/contest.py:830 #: judge/models/contest.py:770 judge/models/contest.py:830
#: judge/models/course.py:182 judge/models/problem.py:208 #: judge/models/course.py:182 judge/models/problem.py:209
msgid "points" msgid "points"
msgstr "điểm" msgstr "điểm"
@ -1338,7 +1338,7 @@ msgstr "mục cha"
msgid "post title" msgid "post title"
msgstr "tiêu đề bài đăng" msgstr "tiêu đề bài đăng"
#: judge/models/interface.py:79 judge/models/problem.py:674 #: judge/models/interface.py:79 judge/models/problem.py:677
msgid "authors" msgid "authors"
msgstr "tác giả" msgstr "tác giả"
@ -1346,7 +1346,7 @@ msgstr "tác giả"
msgid "slug" msgid "slug"
msgstr "slug" msgstr "slug"
#: judge/models/interface.py:81 judge/models/problem.py:672 #: judge/models/interface.py:81 judge/models/problem.py:675
msgid "public visibility" msgid "public visibility"
msgstr "khả năng hiển thị công khai" msgstr "khả năng hiển thị công khai"
@ -1434,140 +1434,140 @@ msgstr "vote từ TNV"
msgid "pagevote votes" msgid "pagevote votes"
msgstr "vote từ TNV" msgstr "vote từ TNV"
#: judge/models/problem.py:43 #: judge/models/problem.py:44
msgid "problem category ID" msgid "problem category ID"
msgstr "mã của nhóm bài" msgstr "mã của nhóm bài"
#: judge/models/problem.py:46 #: judge/models/problem.py:47
msgid "problem category name" msgid "problem category name"
msgstr "tên nhóm bài" msgstr "tên nhóm bài"
#: judge/models/problem.py:54 #: judge/models/problem.py:55
msgid "problem type" msgid "problem type"
msgstr "dạng bài" msgstr "dạng bài"
#: judge/models/problem.py:55 judge/models/problem.py:175 #: judge/models/problem.py:56 judge/models/problem.py:176
#: judge/models/volunteer.py:28 #: judge/models/volunteer.py:28
msgid "problem types" msgid "problem types"
msgstr "dạng bài" msgstr "dạng bài"
#: judge/models/problem.py:60 #: judge/models/problem.py:61
msgid "problem group ID" msgid "problem group ID"
msgstr "mã của nhóm bài" msgstr "mã của nhóm bài"
#: judge/models/problem.py:62 #: judge/models/problem.py:63
msgid "problem group name" msgid "problem group name"
msgstr "tên nhóm bài" msgstr "tên nhóm bài"
#: judge/models/problem.py:69 judge/models/problem.py:180 #: judge/models/problem.py:70 judge/models/problem.py:181
msgid "problem group" msgid "problem group"
msgstr "nhóm bài" msgstr "nhóm bài"
#: judge/models/problem.py:70 #: judge/models/problem.py:71
msgid "problem groups" msgid "problem groups"
msgstr "nhóm bài" msgstr "nhóm bài"
#: judge/models/problem.py:77 #: judge/models/problem.py:78
msgid "key" msgid "key"
msgstr "" msgstr ""
#: judge/models/problem.py:80 #: judge/models/problem.py:81
msgid "link" msgid "link"
msgstr "đường dẫn" msgstr "đường dẫn"
#: judge/models/problem.py:81 #: judge/models/problem.py:82
msgid "full name" msgid "full name"
msgstr "tên đầy đủ" msgstr "tên đầy đủ"
#: judge/models/problem.py:85 judge/models/profile.py:43 #: judge/models/problem.py:86 judge/models/profile.py:43
#: judge/models/runtime.py:34 #: judge/models/runtime.py:34
msgid "short name" msgid "short name"
msgstr "tên ngắn" msgstr "tên ngắn"
#: judge/models/problem.py:86 #: judge/models/problem.py:87
msgid "Displayed on pages under this license" msgid "Displayed on pages under this license"
msgstr "Được hiển thị trên các trang theo giấy phép này" msgstr "Được hiển thị trên các trang theo giấy phép này"
#: judge/models/problem.py:91 #: judge/models/problem.py:92
msgid "icon" msgid "icon"
msgstr "icon" msgstr "icon"
#: judge/models/problem.py:92 #: judge/models/problem.py:93
msgid "URL to the icon" msgid "URL to the icon"
msgstr "Đường dẫn icon" msgstr "Đường dẫn icon"
#: judge/models/problem.py:94 #: judge/models/problem.py:95
msgid "license text" msgid "license text"
msgstr "văn bản giấy phép" msgstr "văn bản giấy phép"
#: judge/models/problem.py:103 #: judge/models/problem.py:104
msgid "license" msgid "license"
msgstr "" msgstr ""
#: judge/models/problem.py:104 #: judge/models/problem.py:105
msgid "licenses" msgid "licenses"
msgstr "" msgstr ""
#: judge/models/problem.py:129 #: judge/models/problem.py:130
msgid "problem code" msgid "problem code"
msgstr "mã bài" msgstr "mã bài"
#: judge/models/problem.py:135 #: judge/models/problem.py:136
msgid "A short, unique code for the problem, used in the url after /problem/" msgid "A short, unique code for the problem, used in the url after /problem/"
msgstr "Mã bài ngắn, độc nhất cho bài tập, được dùng trong url sau /problem/" msgstr "Mã bài ngắn, độc nhất cho bài tập, được dùng trong url sau /problem/"
#: judge/models/problem.py:140 #: judge/models/problem.py:141
msgid "problem name" msgid "problem name"
msgstr "Tên bài" msgstr "Tên bài"
#: judge/models/problem.py:142 #: judge/models/problem.py:143
msgid "The full name of the problem, as shown in the problem list." msgid "The full name of the problem, as shown in the problem list."
msgstr "Tên đầy đủ của bài, như được hiển thị trên danh sách bài tập" msgstr "Tên đầy đủ của bài, như được hiển thị trên danh sách bài tập"
#: judge/models/problem.py:144 #: judge/models/problem.py:145
msgid "problem body" msgid "problem body"
msgstr "Nội dung" msgstr "Nội dung"
#: judge/models/problem.py:147 #: judge/models/problem.py:148
msgid "creators" msgid "creators"
msgstr "" msgstr ""
#: judge/models/problem.py:151 #: judge/models/problem.py:152
msgid "These users will be able to edit the problem, and be listed as authors." msgid "These users will be able to edit the problem, and be listed as authors."
msgstr "" msgstr ""
"Những người dùng này sẽ có thể chỉnh sửa bài tập, và nằm trong danh sách các " "Những người dùng này sẽ có thể chỉnh sửa bài tập, và nằm trong danh sách các "
"tác giả" "tác giả"
#: judge/models/problem.py:156 #: judge/models/problem.py:157
msgid "curators" msgid "curators"
msgstr "" msgstr ""
#: judge/models/problem.py:160 #: judge/models/problem.py:161
msgid "" msgid ""
"These users will be able to edit the problem, but not be listed as authors." "These users will be able to edit the problem, but not be listed as authors."
msgstr "" msgstr ""
"Những người dùng này sẽ có thể chỉnh sửa bài tập, nhưng không nằm trong danh " "Những người dùng này sẽ có thể chỉnh sửa bài tập, nhưng không nằm trong danh "
"sách các tác giả" "sách các tác giả"
#: judge/models/problem.py:166 #: judge/models/problem.py:167
msgid "testers" msgid "testers"
msgstr "" msgstr ""
#: judge/models/problem.py:170 #: judge/models/problem.py:171
msgid "These users will be able to view the private problem, but not edit it." msgid "These users will be able to view the private problem, but not edit it."
msgstr "" msgstr ""
"Những người dùng này sẽ thấy được bài tập này (dù riêng tư), nhưng không " "Những người dùng này sẽ thấy được bài tập này (dù riêng tư), nhưng không "
"chỉnh sửa được" "chỉnh sửa được"
#: judge/models/problem.py:176 judge/models/volunteer.py:29 #: judge/models/problem.py:177 judge/models/volunteer.py:29
msgid "The type of problem, as shown on the problem's page." msgid "The type of problem, as shown on the problem's page."
msgstr "Dạng bài, giống như trên trang bài tập" msgstr "Dạng bài, giống như trên trang bài tập"
#: judge/models/problem.py:182 #: judge/models/problem.py:183
msgid "The group of problem, shown under Category in the problem list." msgid "The group of problem, shown under Category in the problem list."
msgstr "Nhóm bài, hiện ở mục Nhóm bài trong danh sách bài tập" msgstr "Nhóm bài, hiện ở mục Nhóm bài trong danh sách bài tập"
#: judge/models/problem.py:187 #: judge/models/problem.py:188
msgid "" msgid ""
"The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) " "The time limit for this problem, in seconds. Fractional seconds (e.g. 1.5) "
"are supported." "are supported."
@ -1575,11 +1575,11 @@ msgstr ""
"Giới hạn thời gian cho bài tập này, theo đơn vị giây. Có thể nhập số thực " "Giới hạn thời gian cho bài tập này, theo đơn vị giây. Có thể nhập số thực "
"(ví dụ 1.5)" "(ví dụ 1.5)"
#: judge/models/problem.py:196 judge/models/problem.py:632 #: judge/models/problem.py:197 judge/models/problem.py:635
msgid "memory limit" msgid "memory limit"
msgstr "Giới hạn bộ nhớ" msgstr "Giới hạn bộ nhớ"
#: judge/models/problem.py:198 #: judge/models/problem.py:199
msgid "" msgid ""
"The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 " "The memory limit for this problem, in kilobytes (e.g. 256mb = 262144 "
"kilobytes)." "kilobytes)."
@ -1587,7 +1587,7 @@ msgstr ""
"Giới hạn bộ nhớ cho bài này, theo đơn vị kilobytes (ví dụ 256mb = 262144 " "Giới hạn bộ nhớ cho bài này, theo đơn vị kilobytes (ví dụ 256mb = 262144 "
"kilobytes)" "kilobytes)"
#: judge/models/problem.py:210 #: judge/models/problem.py:211
msgid "" msgid ""
"Points awarded for problem completion. Points are displayed with a 'p' " "Points awarded for problem completion. Points are displayed with a 'p' "
"suffix if partial." "suffix if partial."
@ -1595,148 +1595,148 @@ msgstr ""
"Điểm thưởng khi hoàn thành bài tập. Điểm có thêm chữ 'p' ở sau cùng nếu như " "Điểm thưởng khi hoàn thành bài tập. Điểm có thêm chữ 'p' ở sau cùng nếu như "
"chấp nhận cho điểm thành phần (có điểm ngay khi không đúng toàn bộ test)" "chấp nhận cho điểm thành phần (có điểm ngay khi không đúng toàn bộ test)"
#: judge/models/problem.py:216 #: judge/models/problem.py:217
msgid "allows partial points" msgid "allows partial points"
msgstr "cho phép điểm thành phần" msgstr "cho phép điểm thành phần"
#: judge/models/problem.py:220 #: judge/models/problem.py:221
msgid "allowed languages" msgid "allowed languages"
msgstr "các ngôn ngữ được cho phép" msgstr "các ngôn ngữ được cho phép"
#: judge/models/problem.py:221 #: judge/models/problem.py:222
msgid "List of allowed submission languages." msgid "List of allowed submission languages."
msgstr "Danh sách các ngôn ngữ lập trình cho phép" msgstr "Danh sách các ngôn ngữ lập trình cho phép"
#: judge/models/problem.py:227 #: judge/models/problem.py:228
msgid "manually managed" msgid "manually managed"
msgstr "" msgstr ""
#: judge/models/problem.py:230 #: judge/models/problem.py:231
msgid "Whether judges should be allowed to manage data or not." msgid "Whether judges should be allowed to manage data or not."
msgstr "" msgstr ""
#: judge/models/problem.py:233 #: judge/models/problem.py:234
msgid "date of publishing" msgid "date of publishing"
msgstr "Ngày công bố" msgstr "Ngày công bố"
#: judge/models/problem.py:238 #: judge/models/problem.py:239
msgid "" msgid ""
"Doesn't have magic ability to auto-publish due to backward compatibility" "Doesn't have magic ability to auto-publish due to backward compatibility"
msgstr "" msgstr ""
#: judge/models/problem.py:245 #: judge/models/problem.py:246
msgid "Bans the selected users from submitting to this problem." msgid "Bans the selected users from submitting to this problem."
msgstr "Cấm những người dùng được chọn nộp bài tập này." msgstr "Cấm những người dùng được chọn nộp bài tập này."
#: judge/models/problem.py:252 #: judge/models/problem.py:253
msgid "The license under which this problem is published." msgid "The license under which this problem is published."
msgstr "Giấy phép xuất bản bài tập" msgstr "Giấy phép xuất bản bài tập"
#: judge/models/problem.py:259 #: judge/models/problem.py:260
msgid "problem summary" msgid "problem summary"
msgstr "Tóm tắt bài tập" msgstr "Tóm tắt bài tập"
#: judge/models/problem.py:265 #: judge/models/problem.py:266
msgid "number of users" msgid "number of users"
msgstr "" msgstr ""
#: judge/models/problem.py:267 #: judge/models/problem.py:268
msgid "The number of users who solved the problem." msgid "The number of users who solved the problem."
msgstr "Số lượng người dùng đã giải được bài" msgstr "Số lượng người dùng đã giải được bài"
#: judge/models/problem.py:269 #: judge/models/problem.py:270
msgid "solve rate" msgid "solve rate"
msgstr "Tỉ lệ giải đúng" msgstr "Tỉ lệ giải đúng"
#: judge/models/problem.py:279 #: judge/models/problem.py:280
msgid "If private, only these organizations may see the problem." msgid "If private, only these organizations may see the problem."
msgstr "Nếu bài riêng tư, chỉ những tổ chức này thấy được" msgstr "Nếu bài riêng tư, chỉ những tổ chức này thấy được"
#: judge/models/problem.py:285 #: judge/models/problem.py:286
msgid "pdf statement" msgid "pdf statement"
msgstr "Đề bài bằng file pdf" msgstr "Đề bài bằng file pdf"
#: judge/models/problem.py:601 judge/models/problem.py:622 #: judge/models/problem.py:604 judge/models/problem.py:625
#: judge/models/problem.py:653 judge/models/runtime.py:161 #: judge/models/problem.py:656 judge/models/runtime.py:161
msgid "language" msgid "language"
msgstr "" msgstr ""
#: judge/models/problem.py:604 #: judge/models/problem.py:607
msgid "translated name" msgid "translated name"
msgstr "" msgstr ""
#: judge/models/problem.py:606 #: judge/models/problem.py:609
msgid "translated description" msgid "translated description"
msgstr "" msgstr ""
#: judge/models/problem.py:610 #: judge/models/problem.py:613
msgid "problem translation" msgid "problem translation"
msgstr "" msgstr ""
#: judge/models/problem.py:611 #: judge/models/problem.py:614
msgid "problem translations" msgid "problem translations"
msgstr "" msgstr ""
#: judge/models/problem.py:641 #: judge/models/problem.py:644
msgid "language-specific resource limit" msgid "language-specific resource limit"
msgstr "" msgstr ""
#: judge/models/problem.py:642 #: judge/models/problem.py:645
msgid "language-specific resource limits" msgid "language-specific resource limits"
msgstr "" msgstr ""
#: judge/models/problem.py:655 judge/models/submission.py:249 #: judge/models/problem.py:658 judge/models/submission.py:249
msgid "source code" msgid "source code"
msgstr "mã nguồn" msgstr "mã nguồn"
#: judge/models/problem.py:659 #: judge/models/problem.py:662
msgid "language-specific template" msgid "language-specific template"
msgstr "" msgstr ""
#: judge/models/problem.py:660 #: judge/models/problem.py:663
msgid "language-specific templates" msgid "language-specific templates"
msgstr "" msgstr ""
#: judge/models/problem.py:667 #: judge/models/problem.py:670
msgid "associated problem" msgid "associated problem"
msgstr "" msgstr ""
#: judge/models/problem.py:673 #: judge/models/problem.py:676
msgid "publish date" msgid "publish date"
msgstr "" msgstr ""
#: judge/models/problem.py:675 #: judge/models/problem.py:678
msgid "editorial content" msgid "editorial content"
msgstr "nội dung lời giải" msgstr "nội dung lời giải"
#: judge/models/problem.py:686 #: judge/models/problem.py:689
#, python-format #, python-format
msgid "Editorial for %s" msgid "Editorial for %s"
msgstr "" msgstr ""
#: judge/models/problem.py:690 #: judge/models/problem.py:693
msgid "solution" msgid "solution"
msgstr "lời giải" msgstr "lời giải"
#: judge/models/problem.py:691 #: judge/models/problem.py:694
msgid "solutions" msgid "solutions"
msgstr "lời giải" msgstr "lời giải"
#: judge/models/problem.py:696 #: judge/models/problem.py:699
#, fuzzy #, fuzzy
#| msgid "point value" #| msgid "point value"
msgid "proposed point value" msgid "proposed point value"
msgstr "điểm" msgstr "điểm"
#: judge/models/problem.py:697 #: judge/models/problem.py:700
msgid "The amount of points you think this problem deserves." msgid "The amount of points you think this problem deserves."
msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?" msgstr "Bạn nghĩ bài này đáng bao nhiêu điểm?"
#: judge/models/problem.py:711 #: judge/models/problem.py:714
msgid "The time this vote was cast" msgid "The time this vote was cast"
msgstr "" msgstr ""
#: judge/models/problem.py:717 #: judge/models/problem.py:720
msgid "vote" msgid "vote"
msgstr "" msgstr ""
@ -1796,11 +1796,11 @@ msgstr "file zip chứa test"
msgid "generator file" msgid "generator file"
msgstr "file tạo test" msgstr "file tạo test"
#: judge/models/problem_data.py:69 judge/models/problem_data.py:210 #: judge/models/problem_data.py:69 judge/models/problem_data.py:205
msgid "output prefix length" msgid "output prefix length"
msgstr "độ dài hiển thị output" msgstr "độ dài hiển thị output"
#: judge/models/problem_data.py:72 judge/models/problem_data.py:213 #: judge/models/problem_data.py:72 judge/models/problem_data.py:208
msgid "output limit length" msgid "output limit length"
msgstr "giới hạn hiển thị output" msgstr "giới hạn hiển thị output"
@ -1808,15 +1808,15 @@ msgstr "giới hạn hiển thị output"
msgid "init.yml generation feedback" msgid "init.yml generation feedback"
msgstr "phản hồi của quá trình tạo file init.yml" msgstr "phản hồi của quá trình tạo file init.yml"
#: judge/models/problem_data.py:78 judge/models/problem_data.py:216 #: judge/models/problem_data.py:78 judge/models/problem_data.py:211
msgid "checker" msgid "checker"
msgstr "trình chấm" msgstr "trình chấm"
#: judge/models/problem_data.py:81 judge/models/problem_data.py:219 #: judge/models/problem_data.py:81 judge/models/problem_data.py:214
msgid "checker arguments" msgid "checker arguments"
msgstr "các biến trong trình chấm" msgstr "các biến trong trình chấm"
#: judge/models/problem_data.py:83 judge/models/problem_data.py:221 #: judge/models/problem_data.py:83 judge/models/problem_data.py:216
msgid "checker arguments as a JSON object" msgid "checker arguments as a JSON object"
msgstr "các biến trong trình chấm theo dạng JSON" msgstr "các biến trong trình chấm theo dạng JSON"
@ -1832,7 +1832,7 @@ msgstr "file trình chấm"
msgid "interactive judge" msgid "interactive judge"
msgstr "" msgstr ""
#: judge/models/problem_data.py:110 judge/models/problem_data.py:201 #: judge/models/problem_data.py:110 judge/models/problem_data.py:196
msgid "input file name" msgid "input file name"
msgstr "tên file input" msgstr "tên file input"
@ -1840,7 +1840,7 @@ msgstr "tên file input"
msgid "Leave empty for stdin" msgid "Leave empty for stdin"
msgstr "Để trống nếu nhập từ bàn phím" msgstr "Để trống nếu nhập từ bàn phím"
#: judge/models/problem_data.py:116 judge/models/problem_data.py:204 #: judge/models/problem_data.py:116 judge/models/problem_data.py:199
msgid "output file name" msgid "output file name"
msgstr "tên file output" msgstr "tên file output"
@ -1856,39 +1856,39 @@ msgstr "Output-only?"
msgid "Support output-only problem" msgid "Support output-only problem"
msgstr "Dùng cho các bài output-only (nộp bằng file zip)" msgstr "Dùng cho các bài output-only (nộp bằng file zip)"
#: judge/models/problem_data.py:185 #: judge/models/problem_data.py:180
msgid "problem data set" msgid "problem data set"
msgstr "tập hợp dữ liệu bài" msgstr "tập hợp dữ liệu bài"
#: judge/models/problem_data.py:189 #: judge/models/problem_data.py:184
msgid "case position" msgid "case position"
msgstr "vị trí test" msgstr "vị trí test"
#: judge/models/problem_data.py:192 #: judge/models/problem_data.py:187
msgid "case type" msgid "case type"
msgstr "loại test" msgstr "loại test"
#: judge/models/problem_data.py:194 #: judge/models/problem_data.py:189
msgid "Normal case" msgid "Normal case"
msgstr "Test bình thường" msgstr "Test bình thường"
#: judge/models/problem_data.py:195 #: judge/models/problem_data.py:190
msgid "Batch start" msgid "Batch start"
msgstr "Bắt đầu nhóm" msgstr "Bắt đầu nhóm"
#: judge/models/problem_data.py:196 #: judge/models/problem_data.py:191
msgid "Batch end" msgid "Batch end"
msgstr "Kết thúc nhóm" msgstr "Kết thúc nhóm"
#: judge/models/problem_data.py:206 #: judge/models/problem_data.py:201
msgid "generator arguments" msgid "generator arguments"
msgstr "biến trong file sinh test" msgstr "biến trong file sinh test"
#: judge/models/problem_data.py:207 #: judge/models/problem_data.py:202
msgid "point value" msgid "point value"
msgstr "điểm" msgstr "điểm"
#: judge/models/problem_data.py:208 #: judge/models/problem_data.py:203
msgid "case is pretest?" msgid "case is pretest?"
msgstr "test là pretest?" msgstr "test là pretest?"
@ -3092,12 +3092,12 @@ msgstr "Quá nhiều lần nộp"
msgid "You have exceeded the submission limit for this problem." msgid "You have exceeded the submission limit for this problem."
msgstr "Bạn đã vượt quá số lần nộp cho bài này." msgstr "Bạn đã vượt quá số lần nộp cho bài này."
#: judge/views/problem.py:1177 judge/views/problem.py:1182 #: judge/views/problem.py:1176 judge/views/problem.py:1181
#, python-format #, python-format
msgid "Submit to %(problem)s" msgid "Submit to %(problem)s"
msgstr "Nộp bài cho %(problem)s" msgstr "Nộp bài cho %(problem)s"
#: judge/views/problem.py:1205 #: judge/views/problem.py:1204
msgid "Clone Problem" msgid "Clone Problem"
msgstr "Nhân bản bài tập" msgstr "Nhân bản bài tập"
@ -3635,7 +3635,7 @@ msgstr "Chỉnh sửa thông tin"
msgid "Rejudge" msgid "Rejudge"
msgstr "Chấm lại" msgstr "Chấm lại"
#: templates/base.html:227 templates/chat/chat.html:577 #: templates/base.html:227 templates/chat/chat.html:596
msgid "Chat" msgid "Chat"
msgstr "Chat" msgstr "Chat"
@ -3770,7 +3770,7 @@ 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.html:551 #: templates/chat/chat.html:5 templates/chat/chat.html:570
msgid "Chat Box" msgid "Chat Box"
msgstr "Chat Box" msgstr "Chat Box"
@ -3790,21 +3790,25 @@ msgstr "Thành viên khác"
msgid "New message(s)" msgid "New message(s)"
msgstr "Tin nhắn mới" msgstr "Tin nhắn mới"
#: templates/chat/chat.html:517 templates/chat/chat.html:594 #: templates/chat/chat.html:435
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?"
#: templates/chat/chat.html:536 templates/chat/chat.html:613
#: 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..."
msgstr "Tìm kiếm theo tên..." msgstr "Tìm kiếm theo tên..."
#: templates/chat/chat.html:579 templates/chat/chat.html:586 #: templates/chat/chat.html:598 templates/chat/chat.html:605
msgid "Online Users" msgid "Online Users"
msgstr "Trực tuyến" msgstr "Trực tuyến"
#: templates/chat/chat.html:615 #: templates/chat/chat.html:634
msgid "Emoji" msgid "Emoji"
msgstr "" msgstr ""
#: templates/chat/chat.html:616 #: templates/chat/chat.html:635
msgid "Enter your message" msgid "Enter your message"
msgstr "Nhập tin nhắn" msgstr "Nhập tin nhắn"
@ -3813,6 +3817,10 @@ msgstr "Nhập tin nhắn"
msgid "Delete" msgid "Delete"
msgstr "Xóa" msgstr "Xóa"
#: templates/chat/message.html:23
msgid "Mute"
msgstr ""
#: templates/chat/message_list.html:8 #: templates/chat/message_list.html:8
msgid "You are connect now. Say something to start the conversation." msgid "You are connect now. Say something to start the conversation."
msgstr "Các bạn đã kết nối. Nhắn gì đó để bắt đầu cuộc trò chuyện." msgstr "Các bạn đã kết nối. Nhắn gì đó để bắt đầu cuộc trò chuyện."

View file

@ -408,7 +408,7 @@
scrollContainer($('#chat-box'), $('#loader')) scrollContainer($('#chat-box'), $('#loader'))
{% if request.user.is_staff %} {% if request.user.is_staff %}
$(document).on("click", ".chatbtn_remove_mess", function() { $(".chat_remove").on("click", function() {
var elt = $(this); var elt = $(this);
$.ajax({ $.ajax({
url: "{{ url('delete_chat_message') }}", url: "{{ url('delete_chat_message') }}",
@ -431,6 +431,25 @@
}, },
}); });
}); });
$(".chat_mute").on("click", function() {
if (confirm("{{_('Mute this user and delete all messages?')}}")) {
var elt = $(this);
$.ajax({
url: "{{ url('mute_chat_message') }}",
type: 'post',
data: {
message: elt.attr('value'),
},
dataType: 'json',
success: function(data){
window.location.reload();
},
fail: function(data) {
console.log('Fail to delete');
},
});
}
});
{% endif %} {% endif %}
$("#chat-log").show(); $("#chat-log").show();

View file

@ -16,9 +16,12 @@
<span class="content-message"> <span class="content-message">
<div class="body-block" id="body-block-{{ message.id }}" title="{{ message.time|date('g:i a') }}"> <div class="body-block" id="body-block-{{ message.id }}" title="{{ message.time|date('g:i a') }}">
{% if request.user.is_staff %} {% if request.user.is_staff %}
<a class="red chatbtn_remove_mess" value="{{message.id}}" style="cursor: pointer;"> <a class="red chatbtn_remove_mess chat_remove" value="{{message.id}}" style="cursor: pointer;">
{{_('Delete')}} {{_('Delete')}}
</a> </a>
<a class="red chatbtn_remove_mess chat_mute" value="{{message.id}}" style="cursor: pointer;">
{{_('Mute')}}
</a>
{% endif %} {% endif %}
<div class="message-text message-text-other"> <div class="message-text message-text-other">
{{message.body|markdown(lazy_load=False)|reference|str|safe }} {{message.body|markdown(lazy_load=False)|reference|str|safe }}