lib.itmens/users/views.py

145 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import redirect, render, get_object_or_404
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.utils.translation import gettext_lazy as _
from .models import User, Report, Preference
from .forms import ReportForm
from mastodon.api import *
from common.config import *
from .account import *
from .data import *
import json
from django.core.exceptions import BadRequest, PermissionDenied
def render_user_not_found(request):
msg = _("😖哎呀这位用户还没有加入本站快去联邦宇宙呼唤TA来注册吧")
sec_msg = _("")
return render(
request,
"common/error.html",
{
"msg": msg,
"secondary_msg": sec_msg,
},
)
def render_user_blocked(request):
msg = _("你没有访问TA主页的权限😥")
return render(
request,
"common/error.html",
{
"msg": msg,
},
)
@login_required
def followers(request, id):
if request.method == "GET":
user = User.get(id)
if user is None or user != request.user:
return render_user_not_found(request)
return render(
request,
"users/relation_list.html",
{
"user": user,
"is_followers_page": True,
},
)
else:
raise BadRequest()
@login_required
def following(request, id):
if request.method == "GET":
user = User.get(id)
if user is None or user != request.user:
return render_user_not_found(request)
return render(
request,
"users/relation_list.html",
{
"user": user,
"page_type": "followers",
},
)
else:
raise BadRequest()
@login_required
def set_layout(request):
if request.method == "POST":
layout = json.loads(request.POST.get("layout"))
request.user.preference.profile_layout = layout
request.user.preference.save()
return redirect(
reverse("journal:user_profile", args=[request.user.mastodon_username])
)
else:
raise BadRequest()
@login_required
def report(request):
if request.method == "GET":
user_id = request.GET.get("user_id")
if user_id:
user = get_object_or_404(User, pk=user_id)
form = ReportForm(initial={"reported_user": user})
else:
form = ReportForm()
return render(
request,
"users/report.html",
{
"form": form,
},
)
elif request.method == "POST":
form = ReportForm(request.POST, request.FILES)
if form.is_valid():
form.instance.is_read = False
form.instance.submit_user = request.user
form.save()
return redirect(
reverse(
"journal:user_profile",
args=[form.instance.reported_user.mastodon_username],
)
)
else:
return render(
request,
"users/report.html",
{
"form": form,
},
)
else:
raise BadRequest()
@login_required
def manage_report(request):
if not request.user.is_staff:
raise PermissionDenied()
if request.method == "GET":
reports = Report.objects.all()
for r in reports.filter(is_read=False):
r.is_read = True
r.save()
return render(
request,
"users/manage_report.html",
{
"reports": reports,
},
)
else:
raise BadRequest()