mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-11 10:46:37 +00:00
fix group references in templates
Let's do this the sensible way huh, by using backwards references to memberships etc Also adds filters for is_member and is_invited so we don't have to do weird things in group Views
This commit is contained in:
parent
2f42161dda
commit
0f3be40957
8 changed files with 35 additions and 21 deletions
|
@ -11,7 +11,7 @@
|
||||||
{% block searchresults %}
|
{% block searchresults %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% include "groups/members.html" %}
|
{% include "groups/members.html" with group=group %}
|
||||||
|
|
||||||
<h2 class="title is-5">Lists</h2>
|
<h2 class="title is-5">Lists</h2>
|
||||||
{% if not lists %}
|
{% if not lists %}
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
<p class="subtitle is-6">{% trans "Members can add and remove books on your group's book lists" %}</p>
|
<p class="subtitle is-6">{% trans "Members can add and remove books on your group's book lists" %}</p>
|
||||||
|
|
||||||
<div class="column is-flex is-flex-grow-0">
|
<div class="column is-flex is-flex-grow-0">
|
||||||
{% for member in group.members.all %}
|
{% for membership in group.memberships.all %}
|
||||||
|
{% with member=membership.user %}
|
||||||
<div class="box has-text-centered is-shadowless has-background-white-bis my-0 mx-2">
|
<div class="box has-text-centered is-shadowless has-background-white-bis my-0 mx-2">
|
||||||
<a href="{{ member.local_path }}" class="has-text-black">
|
<a href="{{ member.local_path }}" class="has-text-black">
|
||||||
{% include 'snippets/avatar.html' with user=member large=True %}
|
{% include 'snippets/avatar.html' with user=member large=True %}
|
||||||
|
@ -19,7 +20,7 @@
|
||||||
<span class="is-sr-only">Manager</span>
|
<span class="is-sr-only">Manager</span>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% include 'snippets/add_to_group_button.html' with user=member minimal=True %}
|
{% include 'snippets/add_to_group_button.html' with user=member group=group minimal=True %}
|
||||||
{% if member.mutuals %}
|
{% if member.mutuals %}
|
||||||
<p class="help">
|
<p class="help">
|
||||||
{% blocktrans trimmed with mutuals=member.mutuals|intcomma count counter=member.mutuals %}
|
{% blocktrans trimmed with mutuals=member.mutuals|intcomma count counter=member.mutuals %}
|
||||||
|
@ -41,5 +42,6 @@
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
{% endwith %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
|
@ -12,7 +12,7 @@
|
||||||
<span title="{{ user.display_name }}" class="is-block is-6 has-text-weight-bold">{{ user.display_name|truncatechars:10 }}</span>
|
<span title="{{ user.display_name }}" class="is-block is-6 has-text-weight-bold">{{ user.display_name|truncatechars:10 }}</span>
|
||||||
<span title="@{{ user|username }}" class="is-block pb-3">@{{ user|username|truncatechars:8 }}</span>
|
<span title="@{{ user|username }}" class="is-block pb-3">@{{ user|username|truncatechars:8 }}</span>
|
||||||
</a>
|
</a>
|
||||||
{% include 'snippets/add_to_group_button.html' with user=user minimal=True %}
|
{% include 'snippets/add_to_group_button.html' with user=user group=group minimal=True %}
|
||||||
{% if user.mutuals %}
|
{% if user.mutuals %}
|
||||||
<p class="help">
|
<p class="help">
|
||||||
{% blocktrans trimmed with mutuals=user.mutuals|intcomma count counter=user.mutuals %}
|
{% blocktrans trimmed with mutuals=user.mutuals|intcomma count counter=user.mutuals %}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{% load interaction %}
|
{% load interaction %}
|
||||||
|
|
||||||
<div class="columns is-multiline">
|
<div class="columns is-multiline">
|
||||||
{% for group in user.bookwyrm_groups.all %}
|
{% for group in groups %}
|
||||||
<div class="column is-one-quarter">
|
<div class="column is-one-quarter">
|
||||||
<div class="card is-stretchable">
|
<div class="card is-stretchable">
|
||||||
<header class="card-header">
|
<header class="card-header">
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load bookwyrm_group_tags %}
|
||||||
{% if request.user == user or not request.user == group.user or not request.user.is_authenticated %}
|
{% if request.user == user or not request.user == group.user or not request.user.is_authenticated %}
|
||||||
{% elif user in request.user.blocks.all %}
|
{% elif user in request.user.blocks.all %}
|
||||||
{% include 'snippets/block_button.html' with blocks=True %}
|
{% include 'snippets/block_button.html' with blocks=True %}
|
||||||
|
@ -6,30 +7,30 @@
|
||||||
|
|
||||||
<div class="field{% if not minimal %} has-addons{% else %} mb-0{% endif %}">
|
<div class="field{% if not minimal %} has-addons{% else %} mb-0{% endif %}">
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<form action="{% url 'add-group-member' %}" method="POST" class="interaction add_{{ user.id }} {% if user in group.members.all %}is-hidden{%endif %}" data-id="add_{{ user.id }}">
|
<form action="{% url 'invite-group-member' %}" method="POST" class="interaction add_{{ user.id }} {% if group|is_member:user or group|is_invited:user %}is-hidden{%endif %}" data-id="add_{{ user.id }}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="group" value="{{ group.id }}">
|
<input type="hidden" name="group" value="{{ group.id }}">
|
||||||
<input type="hidden" name="user" value="{{ user.username }}">
|
<input type="hidden" name="user" value="{{ user.username }}">
|
||||||
{% if user.local %}
|
{% if user.local %}
|
||||||
<button class="button is-small{% if not minimal %} is-link{% endif %}" type="submit">
|
<button class="button is-small{% if not minimal %} is-link{% endif %}" type="submit">
|
||||||
{% if show_username %}
|
{% if show_username %}
|
||||||
{% blocktrans with username=user.localname %}Add @{{ username }}{% endblocktrans %}
|
{% blocktrans with username=user.localname %}Invite @{{ username }}{% endblocktrans %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% trans "Add" %}
|
{% trans "Invite" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<!-- TODO: This is an incredibly ugly hack until group are AP enabled -->
|
<!-- TODO: This is an incredibly ugly hack until groups are AP enabled -->
|
||||||
<span><em>Remote User</em></span>
|
<span><em>Remote User</em></span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
<form action="{% url 'remove-group-member' %}" method="POST" class="interaction add_{{ user.id }} {% if user not in group.members.all %}is-hidden{%endif %}" data-id="add_{{ user.id }}">
|
<form action="{% url 'uninvite-group-member' %}" method="POST" class="interaction add_{{ user.id }} {% if not group|is_member:user or not group|is_invited:user %}is-hidden{% endif %}" data-id="add_{{ user.id }}">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="group" value="{{ group.id }}">
|
<input type="hidden" name="group" value="{{ group.id }}">
|
||||||
<input type="hidden" name="user" value="{{ user.username }}">
|
<input type="hidden" name="user" value="{{ user.username }}">
|
||||||
{% if user.manually_approves_followers and request.user not in user.followers.all %}
|
{% if group|is_invited:user %}
|
||||||
<button class="button is-small is-danger is-light" type="submit">
|
<button class="button is-small is-danger is-light" type="submit">
|
||||||
{% trans "Undo follow request" %}
|
{% trans "Undo Invitation" %}
|
||||||
</button>
|
</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="button is-small is-danger is-light" type="submit">
|
<button class="button is-small is-danger is-light" type="submit">
|
||||||
|
@ -42,10 +43,5 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% if not minimal %}
|
|
||||||
<div class="control">
|
|
||||||
{% include 'snippets/user_options.html' with user=user class="is-small" %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
{% block panel %}
|
{% block panel %}
|
||||||
<section class="block">
|
<section class="block">
|
||||||
<form name="create-group" method="post" action="{% url 'user-groups' 'empty_arg' %}" class="box is-hidden" id="create_group">
|
<form name="create-group" method="post" action="{% url 'user-groups' request.user.name %}" class="box is-hidden" id="create_group">
|
||||||
<header class="columns">
|
<header class="columns">
|
||||||
<h3 class="title column">{% trans "Create group" %}</h3>
|
<h3 class="title column">{% trans "Create group" %}</h3>
|
||||||
<div class="column is-narrow">
|
<div class="column is-narrow">
|
||||||
|
|
|
@ -22,9 +22,6 @@
|
||||||
|
|
||||||
{% block panel %}
|
{% block panel %}
|
||||||
{% if user.bookwyrm_user %}
|
{% if user.bookwyrm_user %}
|
||||||
{% for group in user.bookwyrm_groups.all %}
|
|
||||||
<div>{{ group.name }}</div>
|
|
||||||
{% endfor %}
|
|
||||||
<div class="block">
|
<div class="block">
|
||||||
<h2 class="title">
|
<h2 class="title">
|
||||||
{% include 'user/shelf/books_header.html' %}
|
{% include 'user/shelf/books_header.html' %}
|
||||||
|
|
19
bookwyrm/templatetags/bookwyrm_group_tags.py
Normal file
19
bookwyrm/templatetags/bookwyrm_group_tags.py
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
""" template filters """
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
from bookwyrm import models
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name="is_member")
|
||||||
|
def is_member(group, user):
|
||||||
|
"""whether or not the user is a member of this group"""
|
||||||
|
|
||||||
|
return models.BookwyrmGroupMember.objects.filter(group=group,user=user).exists()
|
||||||
|
|
||||||
|
@register.filter(name="is_invited")
|
||||||
|
def is_invited(group, user):
|
||||||
|
"""whether or not the user has a pending invitation to join this group"""
|
||||||
|
|
||||||
|
return models.GroupMemberInvitation.objects.filter(group=group,user=user).exists()
|
Loading…
Reference in a new issue