2023-08-10 14:56:38 -04:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2025-01-11 17:20:02 -05:00
|
|
|
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)
|