lib.itmens/journal/views/tag.py

90 lines
3.1 KiB
Python
Raw Normal View History

2023-08-10 14:56:38 -04:00
from django.contrib.auth.decorators import login_required
from django.core.exceptions import BadRequest, ObjectDoesNotExist, PermissionDenied
from django.db.models import Count
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from user_messages import api as msg
from catalog.models import *
from users.models import User
from users.views import render_user_blocked, render_user_not_found
from ..forms import *
from ..models import *
2023-07-20 21:59:49 -04:00
from .common import render_list, target_identity_required
2023-08-10 14:56:38 -04:00
PAGE_SIZE = 10
@login_required
2023-07-20 21:59:49 -04:00
@target_identity_required
2023-08-10 14:56:38 -04:00
def user_tag_list(request, user_name):
2023-07-20 21:59:49 -04:00
target = request.target
tags = Tag.objects.filter(owner=target)
if target.user != request.user:
2023-08-10 14:56:38 -04:00
tags = tags.filter(visibility=0)
tags = tags.values("title").annotate(total=Count("members")).order_by("-total")
return render(
request,
"user_tag_list.html",
{
2023-07-20 21:59:49 -04:00
"user": target.user,
2023-08-10 14:56:38 -04:00
"tags": tags,
},
)
@login_required
def user_tag_edit(request):
if request.method == "GET":
tag_title = Tag.cleanup_title(request.GET.get("tag", ""), replace=False)
if not tag_title:
raise Http404()
2023-07-20 21:59:49 -04:00
tag = Tag.objects.filter(owner=request.user.identity, title=tag_title).first()
2023-08-10 14:56:38 -04:00
if not tag:
raise Http404()
return render(request, "tag_edit.html", {"tag": tag})
elif request.method == "POST":
tag_title = Tag.cleanup_title(request.POST.get("title", ""), replace=False)
tag_id = request.POST.get("id")
tag = (
2023-07-20 21:59:49 -04:00
Tag.objects.filter(owner=request.user.identity, id=tag_id).first()
2023-08-10 14:56:38 -04:00
if tag_id
else None
)
if not tag or not tag_title:
msg.error(request.user, _("无效标签"))
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
if request.POST.get("delete"):
tag.delete()
msg.info(request.user, _("标签已删除"))
return redirect(
reverse("journal:user_tag_list", args=[request.user.mastodon_acct])
)
elif (
tag_title != tag.title
2023-07-20 21:59:49 -04:00
and Tag.objects.filter(
owner=request.user.identity, title=tag_title
).exists()
2023-08-10 14:56:38 -04:00
):
msg.error(request.user, _("标签已存在"))
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
tag.title = tag_title
tag.visibility = int(request.POST.get("visibility", 0))
tag.visibility = 0 if tag.visibility == 0 else 2
tag.save()
msg.info(request.user, _("标签已修改"))
return redirect(
reverse(
"journal:user_tag_member_list",
args=[request.user.mastodon_acct, tag.title],
)
)
raise BadRequest()
def user_tag_member_list(request, user_name, tag_title):
return render_list(request, user_name, "tagmember", tag_title=tag_title)