mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-29 21:11:16 +00:00
Allow admins to suspend pending users
This commit is contained in:
parent
d9090e723d
commit
658e12eb86
6 changed files with 88 additions and 6 deletions
45
bookwyrm/migrations/0090_auto_20210908_2346.py
Normal file
45
bookwyrm/migrations/0090_auto_20210908_2346.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# Generated by Django 3.2.4 on 2021-09-08 23:46
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("bookwyrm", "0089_user_show_suggested_users"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="connector",
|
||||||
|
name="deactivation_reason",
|
||||||
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
choices=[
|
||||||
|
("pending", "Pending"),
|
||||||
|
("self_deletion", "Self Deletion"),
|
||||||
|
("moderator_suspension", "Moderator Suspension"),
|
||||||
|
("moderator_deletion", "Moderator Deletion"),
|
||||||
|
("domain_block", "Domain Block"),
|
||||||
|
],
|
||||||
|
max_length=255,
|
||||||
|
null=True,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="user",
|
||||||
|
name="deactivation_reason",
|
||||||
|
field=models.CharField(
|
||||||
|
blank=True,
|
||||||
|
choices=[
|
||||||
|
("pending", "Pending"),
|
||||||
|
("self_deletion", "Self Deletion"),
|
||||||
|
("moderator_suspension", "Moderator Suspension"),
|
||||||
|
("moderator_deletion", "Moderator Deletion"),
|
||||||
|
("domain_block", "Domain Block"),
|
||||||
|
],
|
||||||
|
max_length=255,
|
||||||
|
null=True,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -13,6 +13,7 @@ DeactivationReason = models.TextChoices(
|
||||||
[
|
[
|
||||||
"pending",
|
"pending",
|
||||||
"self_deletion",
|
"self_deletion",
|
||||||
|
"moderator_suspension",
|
||||||
"moderator_deletion",
|
"moderator_deletion",
|
||||||
"domain_block",
|
"domain_block",
|
||||||
],
|
],
|
||||||
|
|
|
@ -8,17 +8,28 @@
|
||||||
<h3>{% trans "Actions" %}</h3>
|
<h3>{% trans "Actions" %}</h3>
|
||||||
|
|
||||||
<div class="is-flex">
|
<div class="is-flex">
|
||||||
|
{% if user.is_active %}
|
||||||
<p class="mr-1">
|
<p class="mr-1">
|
||||||
<a class="button" href="{% url 'direct-messages-user' user.username %}">{% trans "Send direct message" %}</a>
|
<a class="button" href="{% url 'direct-messages-user' user.username %}">{% trans "Send direct message" %}</a>
|
||||||
</p>
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if user.is_active or user.deactivation_reason == "pending" %}
|
||||||
|
|
||||||
<form name="suspend" method="post" action="{% url 'settings-report-suspend' user.id %}">
|
<form name="suspend" method="post" action="{% url 'settings-report-suspend' user.id %}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% if user.is_active %}
|
|
||||||
<button type="submit" class="button is-danger is-light">{% trans "Suspend user" %}</button>
|
<button type="submit" class="button is-danger is-light">{% trans "Suspend user" %}</button>
|
||||||
{% else %}
|
|
||||||
<button class="button">{% trans "Un-suspend user" %}</button>
|
|
||||||
{% endif %}
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
<form name="unsuspend" method="post" action="{% url 'settings-report-unsuspend' user.id %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<button class="button">{% trans "Un-suspend user" %}</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if user.local %}
|
{% if user.local %}
|
||||||
|
|
|
@ -153,6 +153,11 @@ urlpatterns = [
|
||||||
views.suspend_user,
|
views.suspend_user,
|
||||||
name="settings-report-suspend",
|
name="settings-report-suspend",
|
||||||
),
|
),
|
||||||
|
re_path(
|
||||||
|
r"^settings/reports/(?P<user_id>\d+)/unsuspend/?$",
|
||||||
|
views.unsuspend_user,
|
||||||
|
name="settings-report-unsuspend",
|
||||||
|
),
|
||||||
re_path(
|
re_path(
|
||||||
r"^settings/reports/(?P<report_id>\d+)/resolve/?$",
|
r"^settings/reports/(?P<report_id>\d+)/resolve/?$",
|
||||||
views.resolve_report,
|
views.resolve_report,
|
||||||
|
|
|
@ -33,7 +33,14 @@ from .reading import edit_readthrough, create_readthrough
|
||||||
from .reading import delete_readthrough, delete_progressupdate
|
from .reading import delete_readthrough, delete_progressupdate
|
||||||
from .reading import ReadingStatus
|
from .reading import ReadingStatus
|
||||||
from .register import Register, ConfirmEmail, ConfirmEmailCode, resend_link
|
from .register import Register, ConfirmEmail, ConfirmEmailCode, resend_link
|
||||||
from .reports import Report, Reports, make_report, resolve_report, suspend_user
|
from .reports import (
|
||||||
|
Report,
|
||||||
|
Reports,
|
||||||
|
make_report,
|
||||||
|
resolve_report,
|
||||||
|
suspend_user,
|
||||||
|
unsuspend_user,
|
||||||
|
)
|
||||||
from .rss_feed import RssFeed
|
from .rss_feed import RssFeed
|
||||||
from .password import PasswordResetRequest, PasswordReset, ChangePassword
|
from .password import PasswordResetRequest, PasswordReset, ChangePassword
|
||||||
from .search import Search
|
from .search import Search
|
||||||
|
|
|
@ -77,7 +77,20 @@ class Report(View):
|
||||||
def suspend_user(_, user_id):
|
def suspend_user(_, user_id):
|
||||||
"""mark an account as inactive"""
|
"""mark an account as inactive"""
|
||||||
user = get_object_or_404(models.User, id=user_id)
|
user = get_object_or_404(models.User, id=user_id)
|
||||||
user.is_active = not user.is_active
|
user.is_active = False
|
||||||
|
user.deactivation_reason = "moderator_suspension"
|
||||||
|
# this isn't a full deletion, so we don't want to tell the world
|
||||||
|
user.save(broadcast=False)
|
||||||
|
return redirect("settings-user", user.id)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@permission_required("bookwyrm_moderate_user")
|
||||||
|
def unsuspend_user(_, user_id):
|
||||||
|
"""mark an account as inactive"""
|
||||||
|
user = get_object_or_404(models.User, id=user_id)
|
||||||
|
user.is_active = True
|
||||||
|
user.deactivation_reason = None
|
||||||
# this isn't a full deletion, so we don't want to tell the world
|
# this isn't a full deletion, so we don't want to tell the world
|
||||||
user.save(broadcast=False)
|
user.save(broadcast=False)
|
||||||
return redirect("settings-user", user.id)
|
return redirect("settings-user", user.id)
|
||||||
|
|
Loading…
Reference in a new issue