From 933cb6440fa62fa7c1f763a987efa9da113c5df0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 5 Dec 2022 16:51:04 -0800 Subject: [PATCH] Creates admin views for owner and admin registration settings --- bookwyrm/forms/admin.py | 34 ++++++++ bookwyrm/templates/settings/layout.html | 9 ++ bookwyrm/templates/settings/registration.html | 83 +++++++++++++++++++ .../settings/registration_limited.html | 75 +++++++++++++++++ bookwyrm/urls.py | 10 +++ bookwyrm/views/__init__.py | 2 +- bookwyrm/views/admin/site.py | 54 ++++++++++++ 7 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 bookwyrm/templates/settings/registration.html create mode 100644 bookwyrm/templates/settings/registration_limited.html diff --git a/bookwyrm/forms/admin.py b/bookwyrm/forms/admin.py index 0678c6650..acff6cfaa 100644 --- a/bookwyrm/forms/admin.py +++ b/bookwyrm/forms/admin.py @@ -77,6 +77,23 @@ class SiteForm(CustomForm): "instance_short_description": forms.TextInput( attrs={"aria-describedby": "desc_instance_short_description"} ), + } + + +class RegistrationForm(CustomForm): + class Meta: + model = models.SiteSettings + fields = [ + "allow_registration", + "allow_invite_requests", + "registration_closed_text", + "invite_request_text", + "invite_request_question", + "invite_question_text", + "require_confirm_email", + ] + + widgets = { "require_confirm_email": forms.CheckboxInput( attrs={"aria-describedby": "desc_require_confirm_email"} ), @@ -86,6 +103,23 @@ class SiteForm(CustomForm): } +class RegistrationLimitedForm(CustomForm): + class Meta: + model = models.SiteSettings + fields = [ + "registration_closed_text", + "invite_request_text", + "invite_request_question", + "invite_question_text", + ] + + widgets = { + "invite_request_text": forms.Textarea( + attrs={"aria-describedby": "desc_invite_request_text"} + ), + } + + class ThemeForm(CustomForm): class Meta: model = models.Theme diff --git a/bookwyrm/templates/settings/layout.html b/bookwyrm/templates/settings/layout.html index f195bf754..274777b4c 100644 --- a/bookwyrm/templates/settings/layout.html +++ b/bookwyrm/templates/settings/layout.html @@ -101,6 +101,15 @@ {% trans "Site Settings" %} {% block site-subtabs %}{% endblock %} +
  • + {% if perms.bookwyrm.manage_registration %} + {% url 'settings-registration' as url %} + {% trans "Registration" %} + {% else %} + {% url 'settings-registration-limited' as url %} + {% trans "Registration" %} + {% endif %} +
  • {% url 'settings-themes' as url %} {% trans "Themes" %} diff --git a/bookwyrm/templates/settings/registration.html b/bookwyrm/templates/settings/registration.html new file mode 100644 index 000000000..5ec7004da --- /dev/null +++ b/bookwyrm/templates/settings/registration.html @@ -0,0 +1,83 @@ +{% extends 'settings/layout.html' %} +{% load i18n %} + +{% block title %}{% trans "Registration" %}{% endblock %} + +{% block header %}{% trans "Registration" %}{% endblock %} + +{% block panel %} +{% if success %} +
    + + + {% trans "Settings saved" %} + +
    +{% endif %} + +{% if form.errors %} +
    + + + {% trans "Unable to save settings" %} + +
    +{% endif %} + +
    + {% csrf_token %} +
    +
    + +
    +
    + +

    {% trans "(Recommended if registration is open)" %}

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + + {{ form.registration_closed_text }} +
    +
    + + {{ form.invite_request_text }} + + {% include 'snippets/form_errors.html' with errors_list=form.invite_request_text.errors id="desc_invite_request_text" %} +
    +
    + +
    + +
    +
    +{% endblock %} + diff --git a/bookwyrm/templates/settings/registration_limited.html b/bookwyrm/templates/settings/registration_limited.html new file mode 100644 index 000000000..1479e7d54 --- /dev/null +++ b/bookwyrm/templates/settings/registration_limited.html @@ -0,0 +1,75 @@ +{% extends 'settings/layout.html' %} +{% load i18n %} + +{% block title %}{% trans "Registration" %}{% endblock %} + +{% block header %}{% trans "Registration" %}{% endblock %} + +{% block panel %} +{% if success %} +
    + + + {% trans "Settings saved" %} + +
    +{% endif %} + +{% if form.errors %} +
    + + + {% trans "Unable to save settings" %} + +
    +{% endif %} + +{% if site.allow_registration %} +
    + {% trans "Registration is enabled on this instance" %} +
    +{% else %} +
    + {% csrf_token %} +
    + {% if site.allow_invite_requests %} +
    + + {{ form.invite_request_text }} + + {% include 'snippets/form_errors.html' with errors_list=form.invite_request_text.errors id="desc_invite_request_text" %} +
    +
    + +
    +
    + +
    + {% endif %} + + {% if not site.allow_invite_requests and not site.allow_registration %} +
    + + {{ form.registration_closed_text }} +
    + {% endif %} +
    + +
    + +
    +
    +{% endif %} +{% endblock %} + diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 90d0d0edc..adfa3f100 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -86,6 +86,16 @@ urlpatterns = [ r"^settings/dashboard/?$", views.Dashboard.as_view(), name="settings-dashboard" ), re_path(r"^settings/site-settings/?$", views.Site.as_view(), name="settings-site"), + re_path( + r"^settings/site-registration/?$", + views.RegistrationLimited.as_view(), + name="settings-registration-limited", + ), + re_path( + r"^settings/site-registration-admin/?$", + views.Registration.as_view(), + name="settings-registration", + ), re_path(r"^settings/themes/?$", views.Themes.as_view(), name="settings-themes"), re_path( r"^settings/themes/(?P\d+)/delete/?$", diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index bc70490c5..66e01524d 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -23,7 +23,7 @@ from .admin.reports import ( unsuspend_user, moderator_delete_user, ) -from .admin.site import Site +from .admin.site import Site, Registration, RegistrationLimited from .admin.themes import Themes, delete_theme from .admin.user_admin import UserAdmin, UserAdminList diff --git a/bookwyrm/views/admin/site.py b/bookwyrm/views/admin/site.py index df3b12aa0..5fe88a553 100644 --- a/bookwyrm/views/admin/site.py +++ b/bookwyrm/views/admin/site.py @@ -35,6 +35,60 @@ class Site(View): return TemplateResponse(request, "settings/site.html", data) +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.edit_instance_settings", raise_exception=True), + name="dispatch", +) +class RegistrationLimited(View): + """Things related to registering that non-admins owners can change""" + + def get(self, request): + """edit form""" + site = models.SiteSettings.objects.get() + data = {"form": forms.RegistrationLimitedForm(instance=site)} + return TemplateResponse(request, "settings/registration_limited.html", data) + + def post(self, request): + """edit the site settings""" + site = models.SiteSettings.objects.get() + form = forms.RegistrationLimitedForm(request.POST, request.FILES, instance=site) + if not form.is_valid(): + data = {"form": form} + return TemplateResponse(request, "settings/registration_limited.html", data) + site = form.save(request) + + data = {"form": forms.RegistrationLimitedForm(instance=site), "success": True} + return TemplateResponse(request, "settings/registration_limited.html", data) + + +@method_decorator(login_required, name="dispatch") +@method_decorator( + permission_required("bookwyrm.manage_registration", raise_exception=True), + name="dispatch", +) +class Registration(View): + """Control everything about registration""" + + def get(self, request): + """edit form""" + site = models.SiteSettings.objects.get() + data = {"form": forms.RegistrationForm(instance=site)} + return TemplateResponse(request, "settings/registration.html", data) + + def post(self, request): + """edit the site settings""" + site = models.SiteSettings.objects.get() + form = forms.RegistrationForm(request.POST, request.FILES, instance=site) + if not form.is_valid(): + data = {"form": form} + return TemplateResponse(request, "settings/registration.html", data) + site = form.save(request) + + data = {"form": forms.RegistrationForm(instance=site), "success": True} + return TemplateResponse(request, "settings/registration.html", data) + + @login_required @permission_required("bookwyrm.edit_instance_settings", raise_exception=True) def email_preview(request):