diff --git a/bookwyrm/templates/moderation/reports.html b/bookwyrm/templates/moderation/reports.html index ebf29a7a..f486711f 100644 --- a/bookwyrm/templates/moderation/reports.html +++ b/bookwyrm/templates/moderation/reports.html @@ -1,8 +1,21 @@ {% extends 'settings/admin_layout.html' %} {% load i18n %} -{% block title %}{% trans "Reports" %}{% endblock %} -{% block header %}{% trans "Reports" %}{% endblock %} +{% block title %} +{% if server %} +{% blocktrans with server_name=server.server_name %}Reports: {{ server_name }}{% endblocktrans %} +{% else %} +{% trans "Reports" %} +{% endif %} +{% endblock %} +{% block header %} +{% if server %} +{% blocktrans with server_name=server.server_name %}Reports: {{ server_name }}{% endblocktrans %} +Clear filters +{% else %} +{% trans "Reports" %} +{% endif %} +{% endblock %} {% block panel %}
@@ -17,6 +30,10 @@
+ {% if not reports %} + {% trans "No reports found." %} + {% endif %} + {% for report in reports %}
{% include 'moderation/report_preview.html' with report=report %} diff --git a/bookwyrm/templates/settings/federated_server.html b/bookwyrm/templates/settings/federated_server.html new file mode 100644 index 00000000..7d65309b --- /dev/null +++ b/bookwyrm/templates/settings/federated_server.html @@ -0,0 +1,68 @@ +{% extends 'settings/admin_layout.html' %} +{% block title %}{{ server.server_name }}{% endblock %} +{% load i18n %} + +{% block header %} +{{ server.server_name }} +{% trans "Back to server list" %} +{% endblock %} + +{% block panel %} +
+

{% trans "Details" %}

+
+
+
{% trans "Software:" %}
+
{{ server.application_type }}
+
+
+
{% trans "Version:" %}
+
{{ server.application_version }}
+
+
+
{% trans "Status:" %}
+
Federated
+
+
+
+ +
+

{% trans "Activity" %}

+
+
+
{% trans "Users:" %}
+
+ {{ users.count }} + {# {% if server.user_set.count %}({% trans "View all users" %}){% endif %} #} +
+
+
+
{% trans "Reports:" %}
+
+ {{ reports.count }} + {% if reports.count %}({% trans "View all" %}){% endif %} +
+
+
+
{% trans "Followed by us:" %}
+
+ {{ followed_by_us.count }} +
+
+
+
{% trans "Followed by them:" %}
+
+ {{ followed_by_them.count }} +
+
+
+
{% trans "Blocked by us:" %}
+
+ {{ blocked_by_us.count }} +
+
+
+
+ +{% endblock %} + diff --git a/bookwyrm/templates/settings/federation.html b/bookwyrm/templates/settings/federation.html index c08ba66c..696d7a20 100644 --- a/bookwyrm/templates/settings/federation.html +++ b/bookwyrm/templates/settings/federation.html @@ -1,5 +1,6 @@ {% extends 'settings/admin_layout.html' %} {% load i18n %} +{% block title %}{% trans "Federated Servers" %}{% endblock %} {% block header %}{% trans "Federated Servers" %}{% endblock %} @@ -7,17 +8,30 @@ - - + {% url 'settings-federation' as url %} + + + {% for server in servers %} - + + {% endfor %}
{% trans "Server name" %}{% trans "Software" %} + {% trans "Server name" as text %} + {% include 'snippets/table-sort-header.html' with field="server_name" sort=sort text=text %} + + {% trans "Date federated" as text %} + {% include 'snippets/table-sort-header.html' with field="created_date" sort=sort text=text %} + + {% trans "Software" as text %} + {% include 'snippets/table-sort-header.html' with field="application_type" sort=sort text=text %} + {% trans "Status" %}
{{ server.server_name }}{{ server.server_name }}{{ server.created_date }} {{ server.application_type }} ({{ server.application_version }}) {{ server.status }}
+{% include 'snippets/pagination.html' with page=servers path=request.path %} {% endblock %} diff --git a/bookwyrm/templates/snippets/table-sort-header.html b/bookwyrm/templates/snippets/table-sort-header.html new file mode 100644 index 00000000..bb34591d --- /dev/null +++ b/bookwyrm/templates/snippets/table-sort-header.html @@ -0,0 +1,13 @@ +{% load i18n %} + + {{ text }} + {% if sort == field %} + + {% trans "Sorted asccending" %} + + {% elif sort == "-"|add:field %} + + {% trans "Sorted descending" %} + + {% endif %} + diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 44db6892..a0d8d007 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -55,7 +55,14 @@ urlpatterns = [ name="settings-email-preview", ), re_path( - r"^settings/federation", views.Federation.as_view(), name="settings-federation" + r"^settings/federation/?$", + views.Federation.as_view(), + name="settings-federation", + ), + re_path( + r"^settings/federation/(?P\d+)/?$", + views.FederatedServer.as_view(), + name="settings-federated-server", ), re_path( r"^settings/invites/?$", views.ManageInvites.as_view(), name="settings-invites" diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 3439304f..94ac8f13 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -6,7 +6,7 @@ from .books import Book, EditBook, ConfirmEditBook, Editions from .books import upload_cover, add_description, switch_edition, resolve_book from .directory import Directory from .error import not_found_page, server_error_page -from .federation import Federation +from .federation import Federation, FederatedServer from .feed import DirectMessage, Feed, Replies, Status from .follow import follow, unfollow from .follow import accept_follow_request, delete_follow_request diff --git a/bookwyrm/views/federation.py b/bookwyrm/views/federation.py index e9c0466e..464a207c 100644 --- a/bookwyrm/views/federation.py +++ b/bookwyrm/views/federation.py @@ -1,10 +1,13 @@ """ manage federated servers """ from django.contrib.auth.decorators import login_required, permission_required +from django.core.paginator import Paginator +from django.shortcuts import get_object_or_404 from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View from bookwyrm import models +from bookwyrm.settings import PAGE_LENGTH # pylint: disable= no-self-use @@ -17,7 +20,44 @@ class Federation(View): """ what servers do we federate with """ def get(self, request): - """ edit form """ + """ list of servers """ + try: + page = int(request.GET.get("page", 1)) + except ValueError: + page = 1 + servers = models.FederatedServer.objects.all() - data = {"servers": servers} + + sort = request.GET.get("sort") + sort_fields = ["created_date", "application_type", "server_name"] + if sort in sort_fields + ["-{:s}".format(f) for f in sort_fields]: + servers = servers.order_by(sort) + + paginated = Paginator(servers, PAGE_LENGTH) + data = {"servers": paginated.page(page), "sort": sort} return TemplateResponse(request, "settings/federation.html", data) + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.control_federation", raise_exception=True), + name="dispatch", +) +class FederatedServer(View): + """ views for handling a specific federated server """ + + def get(self, request, server): + """ load a server """ + server = get_object_or_404(models.FederatedServer, id=server) + users = server.user_set + data = { + "server": server, + "users": users, + "reports": models.Report.objects.filter(user__in=users.all()), + "followed_by_us": users.filter(followers__local=True), + "followed_by_them": users.filter(following__local=True), + "blocked_by_us": models.UserBlocks.objects.filter( + user_subject__in=users.all() + ), + } + return TemplateResponse(request, "settings/federated_server.html", data) diff --git a/bookwyrm/views/reports.py b/bookwyrm/views/reports.py index 06909cf1..cb1a62ff 100644 --- a/bookwyrm/views/reports.py +++ b/bookwyrm/views/reports.py @@ -24,10 +24,18 @@ class Reports(View): def get(self, request): """ view current reports """ + filters = {} + resolved = request.GET.get("resolved") == "true" + server = request.GET.get("server") + if server: + server = get_object_or_404(models.FederatedServer, id=server) + filters["user__federated_server"] = server + filters["resolved"] = resolved data = { "resolved": resolved, - "reports": models.Report.objects.filter(resolved=resolved), + "server": server, + "reports": models.Report.objects.filter(**filters), } return TemplateResponse(request, "moderation/reports.html", data)