From c380220ab2ac64deaa0f8b336d78cfdb95d4001b Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 30 Oct 2023 00:59:54 -0400 Subject: [PATCH] filter marks by year --- common/templates/_sidebar.html | 3 +++ common/templates/common_libs.html | 4 ++-- journal/templates/user_item_list_base.html | 8 +++++--- journal/templates/user_mark_list.html | 3 +++ journal/templates/user_review_list.html | 3 +++ journal/urls.py | 16 ++++++++++++++++ journal/views/common.py | 18 ++++++++++++++++++ journal/views/mark.py | 11 +++++++++-- journal/views/review.py | 6 ++++-- requirements-dev.txt | 2 +- users/account.py | 1 + users/management/commands/import_tasks.py | 1 - 12 files changed, 65 insertions(+), 11 deletions(-) diff --git a/common/templates/_sidebar.html b/common/templates/_sidebar.html index 8c5e6075..d9453121 100644 --- a/common/templates/_sidebar.html +++ b/common/templates/_sidebar.html @@ -210,6 +210,9 @@ {% endif %} + {% if sidebar_template %} + {% include sidebar_template %} + {% endif %} - - + +
-
+
{% block head %}{{ identity.display_name }}{% endblock %}
{% for member in members %} {% include "_list_item.html" with item=member.item mark=member.mark hide_category=True %} {% empty %} -
{% trans '无结果' %}
+
{% trans '暂无匹配的条目' %}
{% endfor %}
{% include "_pagination.html" %}
- {% include "_sidebar.html" with show_profile=1 %} + {% block sidebar %} + {% include "_sidebar.html" with show_profile=1 %} + {% endblock %} {% include "_footer.html" %} diff --git a/journal/templates/user_mark_list.html b/journal/templates/user_mark_list.html index e94a43dd..0c54df54 100644 --- a/journal/templates/user_mark_list.html +++ b/journal/templates/user_mark_list.html @@ -6,3 +6,6 @@ {% block head %} {{ identity.display_name }} - {% trans '标记' %} {% endblock %} +{% block sidebar %} + {% include "_sidebar.html" with show_profile=1 sidebar_template="_sidebar_user_mark_list.html" %} +{% endblock %} diff --git a/journal/templates/user_review_list.html b/journal/templates/user_review_list.html index 2c27de16..69805649 100644 --- a/journal/templates/user_review_list.html +++ b/journal/templates/user_review_list.html @@ -6,3 +6,6 @@ {% block head %} {{ identity.display_name }} - {% trans '评论' %} {% endblock %} +{% block sidebar %} + {% include "_sidebar.html" with show_profile=1 sidebar_template="_sidebar_user_mark_list.html" %} +{% endblock %} diff --git a/journal/urls.py b/journal/urls.py index 215151c2..2fd0dc4d 100644 --- a/journal/urls.py +++ b/journal/urls.py @@ -97,6 +97,15 @@ urlpatterns = [ user_mark_list, name="user_mark_list", ), + re_path( + r"^users/(?P[~A-Za-z0-9_\-.@]+)/(?P" + + _get_all_shelf_types() + + ")/(?P" + + _get_all_categories() + + r")/(?P\d+)/$", + user_mark_list, + name="user_mark_list_year", + ), re_path( r"^users/(?P[~A-Za-z0-9_\-.@]+)/reviews/(?P" + _get_all_categories() @@ -104,6 +113,13 @@ urlpatterns = [ user_review_list, name="user_review_list", ), + re_path( + r"^users/(?P[~A-Za-z0-9_\-.@]+)/reviews/(?P" + + _get_all_categories() + + r")/(?P\d+)/$", + user_review_list, + name="user_review_list_year", + ), re_path( r"^users/(?P[~A-Za-z0-9_\-.@]+)/tags/(?P.+)/$", user_tag_member_list, diff --git a/journal/views/common.py b/journal/views/common.py index 10cc6dfe..c305f94d 100644 --- a/journal/views/common.py +++ b/journal/views/common.py @@ -1,6 +1,9 @@ +import datetime + from django.contrib.auth.decorators import login_required from django.core.exceptions import BadRequest, ObjectDoesNotExist, PermissionDenied from django.core.paginator import Paginator +from django.db.models import Min from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -53,6 +56,7 @@ def render_list( shelf_type=None, item_category=None, tag_title=None, + year=None, ): target = request.target_identity viewer = request.user.identity @@ -72,9 +76,19 @@ def render_list( queryset = Review.objects.filter(q_item_in_category(item_category)) else: raise BadRequest() + start_date = queryset.aggregate(Min("created_time"))["created_time__min"] + if start_date: + start_year = start_date.year + current_year = datetime.datetime.now().year + years = reversed(range(start_year, current_year + 1)) + else: + years = [] queryset = queryset.filter( q_owned_piece_visible_to_user(request.user, target) ).order_by("-created_time") + if year: + year = int(year) + queryset = queryset.filter(created_time__year=year) paginator = Paginator(queryset, PAGE_SIZE) page_number = int(request.GET.get("page", default=1)) members = paginator.get_page(page_number) @@ -88,6 +102,10 @@ def render_list( "members": members, "tag": tag, "pagination": pagination, + "years": years, + "year": year, + "shelf": shelf_type, + "category": item_category, }, ) diff --git a/journal/views/mark.py b/journal/views/mark.py index 758aa362..3a93bd8b 100644 --- a/journal/views/mark.py +++ b/journal/views/mark.py @@ -303,7 +303,14 @@ def comment(request: AuthedHttpRequest, item_uuid): raise BadRequest() -def user_mark_list(request: AuthedHttpRequest, user_name, shelf_type, item_category): +def user_mark_list( + request: AuthedHttpRequest, user_name, shelf_type, item_category, year=None +): return render_list( - request, user_name, "mark", shelf_type=shelf_type, item_category=item_category + request, + user_name, + "mark", + shelf_type=shelf_type, + item_category=item_category, + year=year, ) diff --git a/journal/views/review.py b/journal/views/review.py index adce1029..fa83fd76 100644 --- a/journal/views/review.py +++ b/journal/views/review.py @@ -96,8 +96,10 @@ def review_edit(request: AuthedHttpRequest, item_uuid, review_uuid=None): raise BadRequest() -def user_review_list(request, user_name, item_category): - return render_list(request, user_name, "review", item_category=item_category) +def user_review_list(request, user_name, item_category, year=None): + return render_list( + request, user_name, "review", item_category=item_category, year=None + ) MAX_ITEM_PER_TYPE = 10 diff --git a/requirements-dev.txt b/requirements-dev.txt index da3c30f8..599aa6fe 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,4 +6,4 @@ djlint~=1.32.1 isort~=5.12.0 lxml-stubs pre-commit -pyright==1.1.332 +pyright==1.1.333 diff --git a/users/account.py b/users/account.py index f3bdf2b9..cf68c7ee 100644 --- a/users/account.py +++ b/users/account.py @@ -306,6 +306,7 @@ def send_verification_link(user_id, action, email): raise ValueError("Invalid action") try: logger.info(f"Sending email to {email} with subject {subject}") + logger.debug(msg) send_mail( subject=subject, message=msg, diff --git a/users/management/commands/import_tasks.py b/users/management/commands/import_tasks.py index 913a1e3f..528e58c9 100644 --- a/users/management/commands/import_tasks.py +++ b/users/management/commands/import_tasks.py @@ -24,4 +24,3 @@ class Command(BaseCommand): user.preference.save(update_fields=["import_status"]) count += 1 self.stdout.write(self.style.SUCCESS(f"{count} users reset")) -