add group page

This commit is contained in:
Hugh Rundle 2021-09-24 20:34:11 +10:00
parent f32a2cc4d0
commit 9b6d2a9d88
11 changed files with 112 additions and 39 deletions

View file

@ -298,7 +298,7 @@ class ListForm(CustomForm):
class GroupForm(CustomForm):
class Meta:
model = models.Group
fields = ["name", "description", "privacy"]
fields = ["manager", "privacy", "name", "description"]
class ReportForm(CustomForm):
class Meta:

View file

@ -1,13 +0,0 @@
{% extends 'components/inline_form.html' %}
{% load i18n %}
{% block header %}
{% trans "Create Group" %}
{% endblock %}
{% block form %}
<form name="create-group" method="post" action="{% url 'groups' %}">
{% include 'group/form.html' %}
</form>
{% endblock %}

View file

@ -0,0 +1,6 @@
{% load i18n %}
{% spaceless %}
{% blocktrans with username=group.manager.display_name path=group.manager.local_path %}Managed by <a href="{{ path }}">{{ username }}</a>{% endblocktrans %}
{% endspaceless %}

View file

@ -0,0 +1,21 @@
{% extends 'components/modal.html' %}
{% load i18n %}
{% block modal-title %}{% trans "Delete this group?" %}{% endblock %}
{% block modal-body %}
{% trans "This action cannot be un-done" %}
{% endblock %}
{% block modal-footer %}
<div >
{% csrf_token %}
<input type="hidden" name="id" value="{{ group.id }}">
<button class="button is-danger" type="submit">
{% trans "Delete" %}
</button>
{% trans "Cancel" as button_text %}
{% include 'snippets/toggle/toggle_button.html' with text=button_text controls_text="delete_list" controls_uid=list.id %}
</div>
{% endblock %}

View file

@ -0,0 +1,13 @@
{% extends 'components/inline_form.html' %}
{% load i18n %}
{% block header %}
{% trans "Edit Group" %}
{% endblock %}
{% block form %}
<form name="edit-group" method="post" action="{% url 'group' group.id %}">
{% include 'groups/form.html' %}
</form>
{% include "groups/delete_group_modal.html" with controls_text="delete_group" controls_uid=group.id %}
{% endblock %}

View file

@ -1,9 +1,12 @@
{% load i18n %}
{% csrf_token %}
<input type="hidden" name="user" value="{{ request.user.id }}">
{{ group_form.non_field_errors }}
<div class="columns">
<div class="column is-two-thirds">
<input type="hidden" name="manager" value="{{ request.user.id }}" />
<input type="hidden" name="privacy" value="public" />
<div class="field">
<label class="label" for="id_name">{% trans "Group Name:" %}</label>
{{ group_form.name }}

View file

@ -0,0 +1,32 @@
{% extends 'layout.html' %}
{% load i18n %}
{% block title %}{{ group.name }}{% endblock %}
{% block content %}
<header class="columns content is-mobile">
<div class="column">
<h1 class="title">{{ group.name }} <span class="subtitle">{% include 'snippets/privacy-icons.html' with item=group %}</span></h1>
<p class="subtitle help">
{% include 'groups/created_text.html' with group=group %}
</p>
</div>
<div class="column is-narrow is-flex">
{% if request.user == group.manager %}
{% trans "Edit group" as button_text %}
{% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_group" focus="edit_group_header" %}
{% endif %}
</div>
</header>
<div class="block content">
{% include 'snippets/trimmed_text.html' with full=group.description %}
</div>
<div class="block">
{% include 'groups/edit_form.html' with controls_text="edit_group" %}
</div>
{% block panel %}{% endblock %}
{% endblock %}

View file

@ -24,7 +24,7 @@
{% block panel %}
<section class="block">
<form name="create-group" method="post" action="{% url 'groups' %}" class="box is-hidden" id="create_group">
<form name="create-group" method="post" action="{% url 'create-group' %}" class="box is-hidden" id="create_group">
<header class="columns">
<h3 class="title column">{% trans "Create group" %}</h3>
<div class="column is-narrow">

View file

@ -254,9 +254,8 @@ urlpatterns = [
# lists
re_path(rf"{USER_PATH}/lists/?$", views.UserLists.as_view(), name="user-lists"),
re_path(rf"{USER_PATH}/groups/?$", views.UserGroups.as_view(), name="user-groups"),
re_path(r"^groups/?$", views.UserGroups.as_view(), name="groups"),
# re_path(r"^group/?$", views.Group.as_view(), name="group"),
re_path(r"^create-shelf/?$", views.create_shelf, name="group-create"),
re_path(r"^create-group/?$", views.create_group, name="create-group"),
re_path(r"^group/(?P<group_id>\d+)(.json)?/?$", views.Group.as_view(), name="group"),
re_path(r"^list/?$", views.Lists.as_view(), name="lists"),
re_path(r"^list/saved/?$", views.SavedLists.as_view(), name="saved-lists"),
re_path(r"^list/(?P<list_id>\d+)(.json)?/?$", views.List.as_view(), name="list"),
@ -280,7 +279,7 @@ urlpatterns = [
# User books
re_path(rf"{USER_PATH}/books/?$", views.Shelf.as_view(), name="user-shelves"),
re_path(
rf"^{USER_PATH}/(helf|books)/(?P<shelf_identifier>[\w-]+)(.json)?/?$",
rf"^{USER_PATH}/( |books)/(?P<shelf_identifier>[\w-]+)(.json)?/?$",
views.Shelf.as_view(),
name="shelf",
),

View file

@ -32,7 +32,7 @@ from .follow import follow, unfollow
from .follow import accept_follow_request, delete_follow_request
from .get_started import GetStartedBooks, GetStartedProfile, GetStartedUsers
from .goal import Goal, hide_goal
from .group import Group, UserGroups
from .group import Group, UserGroups, create_group
from .import_data import Import, ImportStatus
from .inbox import Inbox
from .interaction import Favorite, Unfavorite, Boost, Unboost

View file

@ -25,32 +25,32 @@ from .helpers import get_user_from_username
class Group(View):
"""group page"""
def get(self, request):
def get(self, request, group_id):
"""display a group"""
groups = models.Group.objects.query(members__contains=request.user)
groups = privacy_filter(
request.user, groups, privacy_levels=["public", "followers"]
)
group = models.Group.objects.get(id=group_id)
# groups = privacy_filter(
# request.user, groups, privacy_levels=["public", "followers"]
# )
paginated = Paginator(groups, 12)
data = {
"lists": paginated.get_page(request.GET.get("page")),
"group": group,
"list_form": forms.GroupForm(),
"path": "/group",
}
return TemplateResponse(request, "groups/group.html", data)
@method_decorator(login_required, name="dispatch")
# pylint: disable=unused-argument
def post(self, request):
"""create a book_list"""
form = forms.ListForm(request.POST)
if not form.is_valid():
return redirect("lists")
book_list = form.save()
# @method_decorator(login_required, name="dispatch")
# # pylint: disable=unused-argument
# def post(self, request):
# """create a book_list"""
# form = forms.ListForm(request.POST)
# if not form.is_valid():
# return redirect("lists")
# book_list = form.save()
return redirect(book_list.local_path)
# return redirect(book_list.local_path)
@method_decorator(login_required, name="dispatch")
class UserGroups(View):
@ -60,7 +60,7 @@ class UserGroups(View):
"""display a group"""
user = get_user_from_username(request.user, username)
# groups = models.GroupMember.objects.filter(user=user)
groups = models.Group.objects.filter(members=request.user)
groups = models.Group.objects.filter(members=user)
# groups = privacy_filter(request.user, groups)
paginated = Paginator(groups, 12)
@ -69,6 +69,18 @@ class UserGroups(View):
"is_self": request.user.id == user.id,
"groups": paginated.get_page(request.GET.get("page")),
"group_form": forms.GroupForm(),
"path": user.local_path + "/groups",
"path": user.local_path + "/group",
}
return TemplateResponse(request, "user/groups.html", data)
@login_required
@require_POST
def create_group(request):
"""user groups"""
form = forms.GroupForm(request.POST)
if not form.is_valid():
print("invalid!")
return redirect(request.headers.get("Referer", "/"))
group = form.save()
return redirect(group.local_path)