lib.itmens/journal/views/tag.py

87 lines
2.9 KiB
Python
Raw Permalink Normal View History

2023-08-10 14:56:38 -04:00
from django.contrib.auth.decorators import login_required
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import redirect, render
2023-08-10 14:56:38 -04:00
from django.urls import reverse
2024-06-07 22:29:10 -04:00
from django.utils.translation import gettext as _
2024-04-23 23:57:49 -04:00
from django.views.decorators.http import require_http_methods
2023-08-10 14:56:38 -04:00
from user_messages import api as msg
from catalog.models import *
2024-06-04 20:49:23 -04:00
from users.models import APIdentity
2023-08-10 14:56:38 -04:00
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):
2024-06-04 20:49:23 -04:00
target: APIdentity = request.target_identity
tags = target.tag_manager.get_tags(public_only=target.user != request.user)
2023-08-10 14:56:38 -04:00
return render(
request,
"user_tag_list.html",
{
2023-07-20 21:59:49 -04:00
"user": target.user,
2023-08-13 18:00:10 -04:00
"identity": target,
2023-08-10 14:56:38 -04:00
"tags": tags,
},
)
@login_required
2024-04-23 23:57:49 -04:00
@require_http_methods(["GET", "POST"])
2023-08-10 14:56:38 -04:00
def user_tag_edit(request):
if request.method == "GET":
tag_title = Tag.cleanup_title(request.GET.get("tag", ""), replace=False)
if not tag_title:
2024-04-23 23:57:49 -04:00
raise Http404(_("Invalid tag"))
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:
2024-04-23 23:57:49 -04:00
raise Http404(_("Tag not found"))
2023-08-10 14:56:38 -04:00
return render(request, "tag_edit.html", {"tag": tag})
2024-04-23 23:57:49 -04:00
else:
2023-08-10 14:56:38 -04:00
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:
2024-04-23 23:57:49 -04:00
msg.error(request.user, _("Invalid tag"))
2023-08-10 14:56:38 -04:00
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
if request.POST.get("delete"):
tag.delete()
2024-03-24 22:28:22 -04:00
msg.info(request.user, _("Tag deleted."))
2023-08-10 14:56:38 -04:00
return redirect(
2023-12-28 22:12:07 -05:00
reverse("journal:user_tag_list", args=[request.user.username])
2023-08-10 14:56:38 -04:00
)
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
):
2024-03-24 22:28:22 -04:00
msg.error(request.user, _("Duplicated tag."))
2023-08-10 14:56:38 -04:00
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
2024-06-04 16:51:51 -04:00
tag.update(
tag_title,
int(request.POST.get("visibility", 0)),
bool(request.POST.get("pinned", 0)),
)
2024-03-24 22:28:22 -04:00
msg.info(request.user, _("Tag updated."))
2023-08-10 14:56:38 -04:00
return redirect(
reverse(
"journal:user_tag_member_list",
2023-12-28 22:12:07 -05:00
args=[request.user.username, tag.title],
2023-08-10 14:56:38 -04:00
)
)
def user_tag_member_list(request, user_name, tag_title):
return render_list(request, user_name, "tagmember", tag_title=tag_title)