Fix recently visited organization

This commit is contained in:
Zhao-Linux 2022-10-18 05:08:12 +07:00
parent 512bc92116
commit 87eb082a18
6 changed files with 104 additions and 85 deletions

View file

@ -39,7 +39,7 @@ from judge.models.problem_data import (
problem_data_storage,
problem_directory_file,
)
from judge.models.profile import Organization, OrganizationRequest, Profile, Friend
from judge.models.profile import Organization, OrganizationRequest, Profile, Friend, OrganizationProfile
from judge.models.runtime import Judge, Language, RuntimeVersion
from judge.models.submission import (
SUBMISSION_RESULT,

View file

@ -9,7 +9,6 @@ from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from requests import delete
from fernet_fields import EncryptedCharField
from sortedm2m.fields import SortedManyToManyField
@ -438,35 +437,24 @@ class OrganizationProfile(models.Model):
verbose_name=_("organization"),
related_name="last_vist",
on_delete=models.CASCADE,
db_index=True,
)
last_visit = models.AutoField(
verbose_name=_("last visit"),
primary_key=True,
)
@classmethod
def is_organization(self, users, organization):
return (
self.objects.filter(users=users)
.filter(organization=organization)
.exists()
)
@classmethod
def remove_organization(self, users, organization):
organizationprofile = self.objects.filter(users=users).filter(
organization=organization
)
organizationprofile.delete()
organizationprofile = self.objects.filter(users=users, organization=organization)
if organizationprofile.exists():
organizationprofile.delete()
@classmethod
def add_organization(self, users, organization):
if self.is_organization(users, organization):
self.remove_organization(users, organization)
self.remove_organization(users, organization)
new_organization = OrganizationProfile(users=users, organization=organization)
new_organization.save()
@classmethod
def get_organization(self, users):
def get_most_recent_organizations(self, users):
return self.objects.filter(users=users).order_by("-last_visit")[:5]

View file

@ -80,7 +80,7 @@ class FeedView(ListView):
start_time__lte=now, end_time__gt=now
)
context["future_contests"] = visible_contests.filter(start_time__gt=now)
context["recent_organizations"] = OrganizationProfile.get_organization(self.request.profile)
context["recent_organizations"] = OrganizationProfile.get_most_recent_organizations(self.request.profile)
context["top_rated"] = Profile.objects.filter(is_unlisted=False).order_by(
"-rating"
)[:10]

View file

@ -35,7 +35,6 @@ from django.views.generic.detail import (
SingleObjectTemplateResponseMixin,
)
from django.core.paginator import Paginator
from judge.models.profile import OrganizationProfile
from reversion import revisions
from judge.forms import (
@ -58,6 +57,7 @@ from judge.models import (
Contest,
Notification,
ContestProblem,
OrganizationProfile,
)
from judge import event_poster as event
from judge.utils.ranker import ranker

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lqdoj2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-16 00:26+0700\n"
"POT-Creation-Date: 2022-10-18 05:05+0700\n"
"PO-Revision-Date: 2021-07-20 03:44\n"
"Last-Translator: Icyene\n"
"Language-Team: Vietnamese\n"
@ -21,6 +21,7 @@ msgstr ""
#: chat_box/models.py:31 chat_box/models.py:52 chat_box/models.py:63
#: judge/admin/interface.py:150 judge/models/contest.py:622
#: judge/models/contest.py:815 judge/models/profile.py:354
#: judge/models/profile.py:430
msgid "user"
msgstr "người dùng"
@ -474,7 +475,7 @@ msgstr "Đăng ký để nhận thông báo về các kỳ thi"
msgid "Enable experimental features"
msgstr "Sử dụng các tính năng thử nghiệm"
#: judge/forms.py:108 judge/views/organization.py:513
#: judge/forms.py:108 judge/views/organization.py:514
#: judge/views/register.py:68
#, python-brace-format
msgid "You may not be part of more than {count} public groups."
@ -1765,7 +1766,7 @@ msgid ""
msgstr "Ảnh này sẽ thay thế logo mặc định khi ở trong tổ chức."
#: judge/models/profile.py:125 judge/models/profile.py:154
#: judge/models/profile.py:360
#: judge/models/profile.py:360 judge/models/profile.py:437
msgid "organization"
msgstr ""
@ -1899,6 +1900,12 @@ msgstr "đơn đăng ký tham gia"
msgid "organization join requests"
msgstr "đơn đăng ký tham gia"
#: judge/models/profile.py:442
#, fuzzy
#| msgid "last seen"
msgid "last visit"
msgstr "xem lần cuối"
#: judge/models/runtime.py:21
msgid "short identifier"
msgstr "tên ngắn"
@ -2448,16 +2455,16 @@ msgstr "Giới thiệu"
msgid "Custom Checker Sample"
msgstr "Hướng dẫn viết trình chấm"
#: judge/views/blog.py:111
#: judge/views/blog.py:114
#, python-format
msgid "Page %d of Posts"
msgstr "Trang %d"
#: judge/views/blog.py:166
#: judge/views/blog.py:169
msgid "Ticket feed"
msgstr "Báo cáo"
#: judge/views/blog.py:184
#: judge/views/blog.py:187
msgid "Comment feed"
msgstr "Bình luận"
@ -2473,8 +2480,8 @@ msgstr "Bạn phải giải ít nhất 1 bài trước khi được vote."
msgid "You already voted."
msgstr "Bạn đã vote."
#: judge/views/comment.py:155 judge/views/organization.py:813
#: judge/views/organization.py:959 judge/views/organization.py:1124
#: judge/views/comment.py:155 judge/views/organization.py:814
#: judge/views/organization.py:960 judge/views/organization.py:1125
msgid "Edited from site"
msgstr "Chỉnh sửa từ web"
@ -2652,91 +2659,91 @@ msgstr "Runtimes"
msgid "Notifications (%d unseen)"
msgstr "Thông báo (%d chưa xem)"
#: judge/views/organization.py:140 judge/views/organization.py:146
#: judge/views/organization.py:142 judge/views/organization.py:148
msgid "No such organization"
msgstr "Không có tổ chức như vậy"
#: judge/views/organization.py:141
#: judge/views/organization.py:143
#, python-format
msgid "Could not find an organization with the key \"%s\"."
msgstr "Không tìm thấy tổ chức với mã \"%s\"."
#: judge/views/organization.py:147
#: judge/views/organization.py:149
msgid "Could not find such organization."
msgstr ""
#: judge/views/organization.py:165
#: judge/views/organization.py:167
msgid "Can't edit organization"
msgstr "Không thể chỉnh sửa tổ chức"
#: judge/views/organization.py:166
#: judge/views/organization.py:168
msgid "You are not allowed to edit this organization."
msgstr "Bạn không được phép chỉnh sửa tổ chức này."
#: judge/views/organization.py:178 judge/views/organization.py:323
#: judge/views/organization.py:180 judge/views/organization.py:324
#, fuzzy
#| msgid "Can't edit organization"
msgid "Can't access organization"
msgstr "Không thể chỉnh sửa tổ chức"
#: judge/views/organization.py:179 judge/views/organization.py:324
#: judge/views/organization.py:181 judge/views/organization.py:325
msgid "You are not allowed to access this organization."
msgstr "Bạn không được phép chỉnh sửa tổ chức này."
#: judge/views/organization.py:237 judge/views/register.py:49
#: judge/views/organization.py:239 judge/views/register.py:49
#: judge/views/stats.py:184 templates/contest/list.html:87
#: templates/problem/list-base.html:104 templates/stats/site.html:33
#: templates/user/user-left-sidebar.html:4 templates/user/user-list-tabs.html:6
msgid "Groups"
msgstr "Nhóm"
#: judge/views/organization.py:330
#: judge/views/organization.py:331
#, python-format
msgid "%s Members"
msgstr "%s Thành viên"
#: judge/views/organization.py:469
#: judge/views/organization.py:470
#, python-brace-format
msgid "All submissions in <a href=\"{1}\">{0}</a>"
msgstr "Bài nộp trong <a href=\"{1}\">{0}</a>"
#: judge/views/organization.py:499 judge/views/organization.py:505
#: judge/views/organization.py:512
#: judge/views/organization.py:500 judge/views/organization.py:506
#: judge/views/organization.py:513
msgid "Joining group"
msgstr "Tham gia nhóm"
#: judge/views/organization.py:500
#: judge/views/organization.py:501
msgid "You are already in the group."
msgstr "Bạn đã ở trong nhóm."
#: judge/views/organization.py:505
#: judge/views/organization.py:506
msgid "This group is not open."
msgstr "Nhóm này là nhóm kín."
#: judge/views/organization.py:528
#: judge/views/organization.py:529
msgid "Leaving group"
msgstr "Rời nhóm"
#: judge/views/organization.py:529
#: judge/views/organization.py:530
#, python-format
msgid "You are not in \"%s\"."
msgstr "Bạn không ở trong \"%s\"."
#: judge/views/organization.py:554
#: judge/views/organization.py:555
#, python-format
msgid "Request to join %s"
msgstr "Đăng ký tham gia %s"
#: judge/views/organization.py:585
#: judge/views/organization.py:586
msgid "Join request detail"
msgstr "Chi tiết đơn đăng ký"
#: judge/views/organization.py:633
#: judge/views/organization.py:634
#, python-format
msgid "Managing join requests for %s"
msgstr "Quản lý đơn đăng ký cho %s"
#: judge/views/organization.py:673
#: judge/views/organization.py:674
#, python-format
msgid ""
"Your organization can only receive %d more members. You cannot approve %d "
@ -2745,96 +2752,96 @@ msgstr ""
"Tổ chức chỉ có thể chứa %d thành viên. Bạn không thể chấp thuận nhiều hơn %d "
"người."
#: judge/views/organization.py:691
#: judge/views/organization.py:692
#, python-format
msgid "Approved %d user."
msgid_plural "Approved %d users."
msgstr[0] "Đã chấp thuận %d người."
#: judge/views/organization.py:694
#: judge/views/organization.py:695
#, python-format
msgid "Rejected %d user."
msgid_plural "Rejected %d users."
msgstr[0] "Đã từ chối %d người."
#: judge/views/organization.py:734
#: judge/views/organization.py:735
#, python-format
msgid "Add member for %s"
msgstr "Thêm thành viên cho %s"
#: judge/views/organization.py:746
#: judge/views/organization.py:747
#, fuzzy
#| msgid "Edited from site"
msgid "Added members from site"
msgstr "Chỉnh sửa từ web"
#: judge/views/organization.py:766 judge/views/organization.py:774
#: judge/views/organization.py:767 judge/views/organization.py:775
msgid "Can't kick user"
msgstr "Không thể đuổi"
#: judge/views/organization.py:767
#: judge/views/organization.py:768
msgid "The user you are trying to kick does not exist!"
msgstr ""
#: judge/views/organization.py:775
#: judge/views/organization.py:776
#, python-format
msgid "The user you are trying to kick is not in organization: %s."
msgstr ""
#: judge/views/organization.py:796 judge/views/organization.py:948
#: judge/views/organization.py:797 judge/views/organization.py:949
#, fuzzy, python-format
#| msgid "Editing %s"
msgid "Edit %s"
msgstr "Đang chỉnh sửa %s"
#: judge/views/organization.py:824 templates/organization/list.html:59
#: judge/views/organization.py:825 templates/organization/list.html:59
msgid "Create group"
msgstr "Tạo nhóm"
#: judge/views/organization.py:839
#: judge/views/organization.py:840
msgid "Exceeded limit"
msgstr ""
#: judge/views/organization.py:840
#: judge/views/organization.py:841
#, python-format
msgid "You created too many groups. You can only create at most %d groups"
msgstr ""
#: judge/views/organization.py:845 judge/views/organization.py:870
#: judge/views/organization.py:1014
#: judge/views/organization.py:846 judge/views/organization.py:871
#: judge/views/organization.py:1015
msgid "Added from site"
msgstr "Thêm từ web"
#: judge/views/organization.py:861
#: judge/views/organization.py:862
#: templates/organization/org-right-sidebar.html:55
msgid "Add contest"
msgstr "Thêm kỳ thi"
#: judge/views/organization.py:904 judge/views/organization.py:1066
#: judge/views/organization.py:905 judge/views/organization.py:1067
msgid "Permission denied"
msgstr "Truy cập bị từ chối"
#: judge/views/organization.py:905
#: judge/views/organization.py:906
#, fuzzy
#| msgid "You are not allowed to edit this organization."
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."
#: judge/views/organization.py:1003
#: judge/views/organization.py:1004
#, python-format
msgid "Add blog for %s"
msgstr "Thêm bài đăng cho %s"
#: judge/views/organization.py:1067
#: judge/views/organization.py:1068
msgid "Not allowed to edit this blog"
msgstr "Bạn không được phép chỉnh sửa bài đăng này."
#: judge/views/organization.py:1099
#: judge/views/organization.py:1100
#, python-format
msgid "Edit blog %s"
msgstr "Chỉnh sửa %s"
#: judge/views/organization.py:1150
#: judge/views/organization.py:1151
#, python-format
msgid "Pending blogs in %s"
msgstr "Bài đang đợi duyệt trong %s"
@ -4738,6 +4745,10 @@ msgstr "Không có máy chấm có thể chấm bài này."
msgid "Submit!"
msgstr "Nộp bài!"
#: templates/recent-organization.html:30
msgid "Recently visited organizations"
msgstr "Các nhóm thăm gần đây"
#: templates/registration/activate.html:3
#, python-format
msgid "%(key)s is an invalid activation key."

View file

@ -1,20 +1,40 @@
{% block two_col_media %}
<style>
.organization-row {
display: block;
padding: 0.5em;
border-bottom: 1px gray solid;
border-top: none;
color: black;
font-weight: bold;
}
.organization-row:hover {
background-color: #f3f3f3;
}
.org-logo {
vertical-align: middle;
height: 2em;
width: 2em;
display: inline-block;
margin-right: 0.5em;
margin-left: 0.5em;
}
.toggle {
cursor: pointer;
}
</style>
{% endblock %}
{% if recent_organizations %}
<div class="blog-sidebox sidebox">
<h3>{{ _('Recent Organization') }} <i class="fa fa-trophy"></i></h3>
<div class="sidebox-content" style="padding: 0; border: 0">
<table class="table feed-table">
<tbody>
{% for organization in recent_organizations %}
<tr>
<td style="padding: 7px 2px">
<a href="{{ url('organization_home', organization.organization.pk, organization.organization.slug) }}">
<b> {{organization.organization}} </b>
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<h3>{{ _('Recently visited organizations') }} <i class="fa fa-users"></i></h3>
<div class="organization-container toggled">
{% for organization in recent_organizations %}
<a href="{{ url('organization_home', organization.organization.pk, organization.organization.slug) }}" class="sidebox-content organization-row" title="{{organization.organization.about}}">
<img class="org-logo" src="{{ organization.organization.logo_override_image or static('icons/icon.png') }}">
<span>{{ organization.organization }}</span>
</a>
{% endfor %}
</div>
</div>
{% endif %}