2023-01-01 23:50:57 -05:00
|
|
|
|
from django.shortcuts import redirect, render, get_object_or_404
|
|
|
|
|
from django.urls import reverse
|
2020-05-05 23:50:48 +08:00
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
2021-02-17 15:08:16 +01:00
|
|
|
|
from .models import User, Report, Preference
|
2020-05-05 23:50:48 +08:00
|
|
|
|
from .forms import ReportForm
|
2020-10-22 21:45:05 +02:00
|
|
|
|
from mastodon.api import *
|
2021-02-25 19:43:43 +01:00
|
|
|
|
from common.config import *
|
2022-05-07 17:00:52 -04:00
|
|
|
|
from .account import *
|
|
|
|
|
from .data import *
|
2021-12-15 21:54:24 -05:00
|
|
|
|
import json
|
2023-02-04 08:11:47 -05:00
|
|
|
|
from django.core.exceptions import BadRequest, PermissionDenied
|
2023-05-20 11:01:18 -04:00
|
|
|
|
from django.http import HttpResponseRedirect
|
|
|
|
|
from discord import SyncWebhook
|
2021-12-11 09:43:31 -05:00
|
|
|
|
|
2020-05-01 22:46:15 +08:00
|
|
|
|
|
2022-05-12 08:14:05 -04:00
|
|
|
|
def render_user_not_found(request):
|
|
|
|
|
msg = _("😖哎呀,这位用户还没有加入本站,快去联邦宇宙呼唤TA来注册吧!")
|
|
|
|
|
sec_msg = _("")
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"common/error.html",
|
2022-05-12 08:14:05 -04:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"msg": msg,
|
|
|
|
|
"secondary_msg": sec_msg,
|
|
|
|
|
},
|
2022-05-12 08:14:05 -04:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2022-12-27 14:52:03 -05:00
|
|
|
|
def render_user_blocked(request):
|
|
|
|
|
msg = _("你没有访问TA主页的权限😥")
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"common/error.html",
|
2022-12-27 14:52:03 -05:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"msg": msg,
|
|
|
|
|
},
|
2022-12-27 14:52:03 -05:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-05-05 23:50:48 +08:00
|
|
|
|
@login_required
|
2021-12-16 08:59:06 -05:00
|
|
|
|
def followers(request, id):
|
2023-01-01 23:50:57 -05:00
|
|
|
|
if request.method == "GET":
|
2022-05-13 00:11:59 -04:00
|
|
|
|
user = User.get(id)
|
2022-07-31 20:54:30 -04:00
|
|
|
|
if user is None or user != request.user:
|
2022-05-12 08:14:05 -04:00
|
|
|
|
return render_user_not_found(request)
|
2020-05-05 23:50:48 +08:00
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"users/relation_list.html",
|
2020-05-05 23:50:48 +08:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"user": user,
|
|
|
|
|
"is_followers_page": True,
|
|
|
|
|
},
|
2020-05-05 23:50:48 +08:00
|
|
|
|
)
|
|
|
|
|
else:
|
2023-02-04 00:45:17 -05:00
|
|
|
|
raise BadRequest()
|
2020-05-05 23:50:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def following(request, id):
|
2023-01-01 23:50:57 -05:00
|
|
|
|
if request.method == "GET":
|
2022-05-13 00:11:59 -04:00
|
|
|
|
user = User.get(id)
|
2022-07-31 20:54:30 -04:00
|
|
|
|
if user is None or user != request.user:
|
2022-05-12 08:14:05 -04:00
|
|
|
|
return render_user_not_found(request)
|
2020-05-05 23:50:48 +08:00
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"users/relation_list.html",
|
2020-05-05 23:50:48 +08:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"user": user,
|
|
|
|
|
"page_type": "followers",
|
|
|
|
|
},
|
2021-02-15 21:27:50 +01:00
|
|
|
|
)
|
|
|
|
|
else:
|
2023-02-04 00:45:17 -05:00
|
|
|
|
raise BadRequest()
|
2021-02-17 15:08:16 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def set_layout(request):
|
2023-01-01 23:50:57 -05:00
|
|
|
|
if request.method == "POST":
|
|
|
|
|
layout = json.loads(request.POST.get("layout"))
|
2023-04-19 22:31:27 -04:00
|
|
|
|
if request.POST.get("name") == "profile":
|
|
|
|
|
request.user.preference.profile_layout = layout
|
|
|
|
|
request.user.preference.save(update_fields=["profile_layout"])
|
|
|
|
|
return redirect(
|
|
|
|
|
reverse("journal:user_profile", args=[request.user.mastodon_username])
|
|
|
|
|
)
|
|
|
|
|
elif request.POST.get("name") == "discover":
|
|
|
|
|
request.user.preference.discover_layout = layout
|
|
|
|
|
request.user.preference.save(update_fields=["discover_layout"])
|
|
|
|
|
return redirect(reverse("catalog:discover"))
|
2021-02-17 15:08:16 +01:00
|
|
|
|
else:
|
2023-02-04 00:45:17 -05:00
|
|
|
|
raise BadRequest()
|
2021-02-17 15:08:16 +01:00
|
|
|
|
|
2021-02-15 21:27:50 +01:00
|
|
|
|
|
2020-05-05 23:50:48 +08:00
|
|
|
|
@login_required
|
|
|
|
|
def report(request):
|
2023-01-01 23:50:57 -05:00
|
|
|
|
if request.method == "GET":
|
|
|
|
|
user_id = request.GET.get("user_id")
|
2020-05-07 18:00:39 +08:00
|
|
|
|
if user_id:
|
|
|
|
|
user = get_object_or_404(User, pk=user_id)
|
2023-01-01 23:50:57 -05:00
|
|
|
|
form = ReportForm(initial={"reported_user": user})
|
2020-05-07 18:00:39 +08:00
|
|
|
|
else:
|
|
|
|
|
form = ReportForm()
|
2020-05-05 23:50:48 +08:00
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"users/report.html",
|
2020-05-05 23:50:48 +08:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"form": form,
|
|
|
|
|
},
|
2020-05-05 23:50:48 +08:00
|
|
|
|
)
|
2023-01-01 23:50:57 -05:00
|
|
|
|
elif request.method == "POST":
|
2023-02-04 08:11:47 -05:00
|
|
|
|
form = ReportForm(request.POST, request.FILES)
|
2020-05-05 23:50:48 +08:00
|
|
|
|
if form.is_valid():
|
|
|
|
|
form.instance.is_read = False
|
|
|
|
|
form.instance.submit_user = request.user
|
|
|
|
|
form.save()
|
2023-05-20 11:01:18 -04:00
|
|
|
|
dw = settings.DISCORD_WEBHOOKS.get("user-report")
|
|
|
|
|
if dw:
|
|
|
|
|
webhook = SyncWebhook.from_url(dw)
|
|
|
|
|
webhook.send(
|
|
|
|
|
f"New report from {request.user} about {form.instance.reported_user} : {form.instance.message}"
|
2023-01-01 23:50:57 -05:00
|
|
|
|
)
|
2023-05-20 11:01:18 -04:00
|
|
|
|
return redirect(reverse("common:home"))
|
2020-05-05 23:50:48 +08:00
|
|
|
|
else:
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"users/report.html",
|
2020-05-05 23:50:48 +08:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"form": form,
|
|
|
|
|
},
|
2020-05-05 23:50:48 +08:00
|
|
|
|
)
|
|
|
|
|
else:
|
2023-02-04 00:45:17 -05:00
|
|
|
|
raise BadRequest()
|
2020-05-05 23:50:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def manage_report(request):
|
2023-02-04 08:11:47 -05:00
|
|
|
|
if not request.user.is_staff:
|
|
|
|
|
raise PermissionDenied()
|
2023-01-01 23:50:57 -05:00
|
|
|
|
if request.method == "GET":
|
2020-05-05 23:50:48 +08:00
|
|
|
|
reports = Report.objects.all()
|
|
|
|
|
for r in reports.filter(is_read=False):
|
2020-07-03 15:36:23 +08:00
|
|
|
|
r.is_read = True
|
2020-05-05 23:50:48 +08:00
|
|
|
|
r.save()
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"users/manage_report.html",
|
2020-05-05 23:50:48 +08:00
|
|
|
|
{
|
2023-01-01 23:50:57 -05:00
|
|
|
|
"reports": reports,
|
|
|
|
|
},
|
2020-05-05 23:50:48 +08:00
|
|
|
|
)
|
|
|
|
|
else:
|
2023-02-04 00:45:17 -05:00
|
|
|
|
raise BadRequest()
|
2023-05-20 11:01:18 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
|
def mark_announcements_read(request):
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
try:
|
|
|
|
|
request.user.read_announcement_index = Announcement.objects.latest("pk").pk
|
|
|
|
|
request.user.save(update_fields=["read_announcement_index"])
|
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
|
# when there is no annoucenment
|
|
|
|
|
pass
|
|
|
|
|
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
|