From 96ea2b4477a064acd815bc7521001b5d2ff4e35d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Mar 2021 12:34:55 -0700 Subject: [PATCH 1/5] Adds detail page for federated servers --- .../templates/settings/federated_server.html | 68 +++++++++++++++++++ bookwyrm/templates/settings/federation.html | 3 +- bookwyrm/urls.py | 9 ++- bookwyrm/views/__init__.py | 2 +- bookwyrm/views/federation.py | 26 +++++++ 5 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 bookwyrm/templates/settings/federated_server.html diff --git a/bookwyrm/templates/settings/federated_server.html b/bookwyrm/templates/settings/federated_server.html new file mode 100644 index 000000000..dfeb6b3a3 --- /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 server.user_set.count %}({% trans "View all users" %}){% 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 c08ba66cd..8c87eda2c 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 %} @@ -13,7 +14,7 @@ {% for server in servers %} - {{ server.server_name }} + {{ server.server_name }} {{ server.application_type }} ({{ server.application_version }}) {{ server.status }} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 44db68928..a0d8d0079 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 3439304f0..94ac8f136 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 e9c0466e4..c7d7a2e7a 100644 --- a/bookwyrm/views/federation.py +++ b/bookwyrm/views/federation.py @@ -1,5 +1,6 @@ """ manage federated servers """ from django.contrib.auth.decorators import login_required, permission_required +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 @@ -21,3 +22,28 @@ class Federation(View): servers = models.FederatedServer.objects.all() data = {"servers": servers} 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) From 62cbfe0fac3be7c50e1bdf89e17490dacac8fbaf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Mar 2021 13:03:24 -0700 Subject: [PATCH 2/5] Filter reports by server --- bookwyrm/templates/moderation/reports.html | 21 +++++++++++++++++-- .../templates/settings/federated_server.html | 2 +- bookwyrm/views/reports.py | 10 ++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/moderation/reports.html b/bookwyrm/templates/moderation/reports.html index ebf29a7a7..f486711f4 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 index dfeb6b3a3..7d65309b7 100644 --- a/bookwyrm/templates/settings/federated_server.html +++ b/bookwyrm/templates/settings/federated_server.html @@ -40,7 +40,7 @@
{% trans "Reports:" %}
{{ reports.count }} - {# {% if server.user_set.count %}({% trans "View all users" %}){% endif %} #} + {% if reports.count %}({% trans "View all" %}){% endif %}
diff --git a/bookwyrm/views/reports.py b/bookwyrm/views/reports.py index 06909cf11..cb1a62ffb 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) From 158d2c52315617792a4eb9fe00ea3e038abcebab Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Mar 2021 13:08:24 -0700 Subject: [PATCH 3/5] Paginates federated server list --- bookwyrm/templates/settings/federation.html | 1 + bookwyrm/views/federation.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/settings/federation.html b/bookwyrm/templates/settings/federation.html index 8c87eda2c..cfcf4d9c8 100644 --- a/bookwyrm/templates/settings/federation.html +++ b/bookwyrm/templates/settings/federation.html @@ -21,4 +21,5 @@ {% endfor %} +{% include 'snippets/pagination.html' with page=servers path=request.path %} {% endblock %} diff --git a/bookwyrm/views/federation.py b/bookwyrm/views/federation.py index c7d7a2e7a..92f590bcb 100644 --- a/bookwyrm/views/federation.py +++ b/bookwyrm/views/federation.py @@ -1,11 +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 @@ -18,9 +20,15 @@ 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} + paginated = Paginator(servers, PAGE_LENGTH) + data = {"servers": paginated.page(page)} return TemplateResponse(request, "settings/federation.html", data) From 7373a7e8c4ba3426925457ad4d9dc4e4b5773ec5 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Mar 2021 13:36:05 -0700 Subject: [PATCH 4/5] Sort federated servers list --- bookwyrm/templates/settings/federation.html | 16 ++++++++++++++-- .../templates/snippets/table-sort-header.html | 13 +++++++++++++ bookwyrm/views/federation.py | 8 +++++++- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 bookwyrm/templates/snippets/table-sort-header.html diff --git a/bookwyrm/templates/settings/federation.html b/bookwyrm/templates/settings/federation.html index cfcf4d9c8..696d7a205 100644 --- a/bookwyrm/templates/settings/federation.html +++ b/bookwyrm/templates/settings/federation.html @@ -8,13 +8,25 @@ - - + {% url 'settings-federation' as url %} + + + {% for server in servers %} + diff --git a/bookwyrm/templates/snippets/table-sort-header.html b/bookwyrm/templates/snippets/table-sort-header.html new file mode 100644 index 000000000..bb34591d4 --- /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/views/federation.py b/bookwyrm/views/federation.py index 92f590bcb..8a246e28c 100644 --- a/bookwyrm/views/federation.py +++ b/bookwyrm/views/federation.py @@ -27,8 +27,14 @@ class Federation(View): page = 1 servers = models.FederatedServer.objects.all() + + 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)} + data = {"servers": paginated.page(page), "sort": sort} return TemplateResponse(request, "settings/federation.html", data) From 5416bb10fdafe0857f9a7ca36cac550e0191b968 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sun, 28 Mar 2021 13:41:25 -0700 Subject: [PATCH 5/5] Python formatting --- bookwyrm/views/federation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/views/federation.py b/bookwyrm/views/federation.py index 8a246e28c..464a207ca 100644 --- a/bookwyrm/views/federation.py +++ b/bookwyrm/views/federation.py @@ -28,8 +28,8 @@ class Federation(View): servers = models.FederatedServer.objects.all() - sort = request.GET.get('sort') - sort_fields = ['created_date', 'application_type', 'server_name'] + 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)
{% 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.created_date }} {{ server.application_type }} ({{ server.application_version }}) {{ server.status }}