From 21aadf2920af349c672b796b70a71148cfb3a5e9 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 29 Jan 2021 15:38:42 -0800 Subject: [PATCH] Adds site settings view --- bookwyrm/forms.py | 7 ++ bookwyrm/templates/layout.html | 2 +- bookwyrm/templates/settings/admin_layout.html | 42 ++++++++++ .../{ => settings}/manage_invites.html | 16 ++-- bookwyrm/templates/settings/site.html | 84 +++++++++++++++++++ bookwyrm/tests/views/test_invite.py | 2 +- bookwyrm/urls.py | 6 +- bookwyrm/views/__init__.py | 1 + bookwyrm/views/invite.py | 4 +- bookwyrm/views/site.py | 31 +++++++ 10 files changed, 182 insertions(+), 13 deletions(-) create mode 100644 bookwyrm/templates/settings/admin_layout.html rename bookwyrm/templates/{ => settings}/manage_invites.html (83%) create mode 100644 bookwyrm/templates/settings/site.html create mode 100644 bookwyrm/views/site.py diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index e92bc180..c8212794 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -195,7 +195,14 @@ class ShelfForm(CustomForm): model = models.Shelf fields = ['user', 'name', 'privacy'] + class GoalForm(CustomForm): class Meta: model = models.AnnualGoal fields = ['user', 'year', 'goal', 'privacy'] + + +class SiteForm(CustomForm): + class Meta: + model = models.SiteSettings + exclude = [] diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index a696e287..3a33196c 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -92,7 +92,7 @@ {% if perms.bookwyrm.create_invites %}
  • - + Invites
  • diff --git a/bookwyrm/templates/settings/admin_layout.html b/bookwyrm/templates/settings/admin_layout.html new file mode 100644 index 00000000..f66da658 --- /dev/null +++ b/bookwyrm/templates/settings/admin_layout.html @@ -0,0 +1,42 @@ +{% extends 'layout.html' %} +{% block content %} + +
    +

    {% block header %}{% endblock %}

    +
    + +
    + +
    + {% block panel %}{% endblock %} +
    +
    + +{% endblock %} diff --git a/bookwyrm/templates/manage_invites.html b/bookwyrm/templates/settings/manage_invites.html similarity index 83% rename from bookwyrm/templates/manage_invites.html rename to bookwyrm/templates/settings/manage_invites.html index a29ee5e4..03b68b20 100644 --- a/bookwyrm/templates/manage_invites.html +++ b/bookwyrm/templates/settings/manage_invites.html @@ -1,8 +1,8 @@ -{% extends 'layout.html' %} +{% extends 'settings/admin_layout.html' %} +{% block header %}Invites{% endblock %} {% load humanize %} -{% block content %} -
    -

    Invites

    +{% block panel %} +
    @@ -22,12 +22,12 @@ {% endfor %}
    Link
    -
    + -
    +

    Generate New Invite

    -
    + {% csrf_token %}
    @@ -46,5 +46,5 @@ -
    +
    {% endblock %} diff --git a/bookwyrm/templates/settings/site.html b/bookwyrm/templates/settings/site.html new file mode 100644 index 00000000..830a7dc5 --- /dev/null +++ b/bookwyrm/templates/settings/site.html @@ -0,0 +1,84 @@ +{% extends 'settings/admin_layout.html' %} +{% block header %}Site Configuration{% endblock %} + +{% block panel %} + +
    + {% csrf_token %} +
    +

    Instance Info

    +
    + + {{ site_form.name }} +
    +
    + + {{ site_form.instance_tagline }} +
    +
    + + {{ site_form.instance_description }} +
    +
    + + {{ site_form.code_of_conduct }} +
    +
    + + + +
    +

    Images

    +
    +
    + + {{ site_form.logo }} +
    +
    + + {{ site_form.logo_small }} +
    +
    + + {{ site_form.favicon }} +
    +
    +
    + + + + + + + +
    +

    Registration

    +
    +
    +
    + + {{ site_form.registration_closed_text }} +
    +
    + +
    + +
    +
    +{% endblock %} diff --git a/bookwyrm/tests/views/test_invite.py b/bookwyrm/tests/views/test_invite.py index 57b7a34a..eaffba72 100644 --- a/bookwyrm/tests/views/test_invite.py +++ b/bookwyrm/tests/views/test_invite.py @@ -44,5 +44,5 @@ class InviteViews(TestCase): request.user.is_superuser = True result = view(request) self.assertIsInstance(result, TemplateResponse) - self.assertEqual(result.template_name, 'manage_invites.html') + self.assertEqual(result.template_name, 'admin/manage_invites.html') self.assertEqual(result.status_code, 200) diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 6d759ac2..e79324a3 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -49,8 +49,12 @@ urlpatterns = [ re_path(r'^password-reset/(?P[A-Za-z0-9]+)/?$', views.PasswordReset.as_view()), + # admin + re_path(r'^settings/site-settings', + views.Site.as_view(), name='settings-site'), # invites - re_path(r'^invite/?$', views.ManageInvites.as_view()), + re_path(r'^settings/invites/?$', + views.ManageInvites.as_view(), name='settings-invites'), re_path(r'^invite/(?P[A-Za-z0-9]+)/?$', views.Invite.as_view()), # landing pages diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 80520eb3..62c4110f 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -24,6 +24,7 @@ from .search import Search from .shelf import Shelf from .shelf import user_shelves_page, create_shelf, delete_shelf from .shelf import shelve, unshelve +from .site import Site from .status import CreateStatus, DeleteStatus from .updates import Updates from .user import User, EditUser, Followers, Following diff --git a/bookwyrm/views/invite.py b/bookwyrm/views/invite.py index 56485861..bd0715a0 100644 --- a/bookwyrm/views/invite.py +++ b/bookwyrm/views/invite.py @@ -24,7 +24,7 @@ class ManageInvites(View): user=request.user).order_by('-created_date'), 'form': forms.CreateInviteForm(), } - return TemplateResponse(request, 'manage_invites.html', data) + return TemplateResponse(request, 'settings/manage_invites.html', data) def post(self, request): ''' creates an invite database entry ''' @@ -36,7 +36,7 @@ class ManageInvites(View): invite.user = request.user invite.save() - return redirect('/invite') + return redirect('/settings/invites') class Invite(View): diff --git a/bookwyrm/views/site.py b/bookwyrm/views/site.py new file mode 100644 index 00000000..85c1751d --- /dev/null +++ b/bookwyrm/views/site.py @@ -0,0 +1,31 @@ +''' manage site settings ''' +from django.contrib.auth.decorators import login_required, permission_required +from django.shortcuts import redirect +from django.template.response import TemplateResponse +from django.utils.decorators import method_decorator +from django.views import View + +from bookwyrm import forms, models + + +# pylint: disable= no-self-use +@method_decorator(login_required, name='dispatch') +@method_decorator( + permission_required( + 'bookwyrm.edit_instance_settings', raise_exception=True), + name='dispatch') +class Site(View): + ''' manage things like the instance name ''' + def get(self, request): + ''' edit form ''' + site = models.SiteSettings.objects.get() + data = { + 'title': 'Site Settings', + 'site_form': forms.SiteForm(instance=site) + } + return TemplateResponse(request, 'settings/site.html', data) + + def post(self, request): + ''' edit the site settings ''' + + return redirect('/settings/site-settings')