forked from mirrors/bookwyrm
complete group notifications
- notify group members when a new member accepts an invitation - notify all group members when a member leaves or is removed - notify ex-member when they are removed
This commit is contained in:
parent
f82af6382f
commit
21e6ed7388
4 changed files with 45 additions and 14 deletions
|
@ -133,21 +133,27 @@ class GroupMemberInvitation(models.Model):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
BookwyrmGroupMember.from_request(self)
|
BookwyrmGroupMember.from_request(self)
|
||||||
|
|
||||||
# let the other members know about it
|
|
||||||
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
||||||
|
# tell the group owner
|
||||||
|
model.objects.create(
|
||||||
|
user=self.group.user,
|
||||||
|
related_user=self.user,
|
||||||
|
related_group=self.group,
|
||||||
|
notification_type="ACCEPT",
|
||||||
|
)
|
||||||
|
|
||||||
|
# let the other members know about it
|
||||||
for membership in self.group.memberships.all():
|
for membership in self.group.memberships.all():
|
||||||
member = membership.user
|
member = membership.user
|
||||||
if member != self.user:
|
if member != self.user and member != self.group.user:
|
||||||
model.objects.create(
|
model.objects.create(
|
||||||
user=member,
|
user=member,
|
||||||
related_user=self.user,
|
related_user=self.user,
|
||||||
related_group=self.group,
|
related_group=self.group,
|
||||||
notification_type="ACCEPT",
|
notification_type="JOIN",
|
||||||
)
|
)
|
||||||
|
|
||||||
def reject(self):
|
def reject(self):
|
||||||
"""generate a Reject for this membership request"""
|
"""generate a Reject for this membership request"""
|
||||||
|
|
||||||
self.delete()
|
self.delete()
|
||||||
|
|
||||||
# TODO: send notification
|
|
|
@ -7,7 +7,7 @@ from . import Boost, Favorite, ImportJob, Report, Status, User
|
||||||
|
|
||||||
NotificationType = models.TextChoices(
|
NotificationType = models.TextChoices(
|
||||||
"NotificationType",
|
"NotificationType",
|
||||||
"FAVORITE REPLY MENTION TAG FOLLOW FOLLOW_REQUEST BOOST IMPORT ADD REPORT INVITE ACCEPT",
|
"FAVORITE REPLY MENTION TAG FOLLOW FOLLOW_REQUEST BOOST IMPORT ADD REPORT INVITE ACCEPT JOIN LEAVE REMOVE",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<span class="icon icon-comment"></span>
|
<span class="icon icon-comment"></span>
|
||||||
{% elif notification.notification_type == 'REPLY' %}
|
{% elif notification.notification_type == 'REPLY' %}
|
||||||
<span class="icon icon-comments"></span>
|
<span class="icon icon-comments"></span>
|
||||||
{% elif notification.notification_type == 'FOLLOW' or notification.notification_type == 'FOLLOW_REQUEST' or notification.notification_type == 'INVITE' or notification.notification_type == 'ACCEPT' %}
|
{% elif notification.notification_type == 'FOLLOW' or notification.notification_type == 'FOLLOW_REQUEST' or notification.notification_type == 'INVITE' or notification.notification_type == 'ACCEPT' or notification.notification_type == 'JOIN' or notification.notification_type == 'LEAVE' or notification.notification_type == 'REMOVE'%}
|
||||||
<span class="icon icon-local"></span>
|
<span class="icon icon-local"></span>
|
||||||
{% elif notification.notification_type == 'BOOST' %}
|
{% elif notification.notification_type == 'BOOST' %}
|
||||||
<span class="icon icon-boost"></span>
|
<span class="icon icon-boost"></span>
|
||||||
|
@ -131,9 +131,25 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif notification.notification_type == 'ACCEPT' %}
|
{% elif notification.notification_type == 'ACCEPT' %}
|
||||||
{% if notification.related_group %}
|
{% if notification.related_group %}
|
||||||
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %} accepted an invitation to join your group "<a href="{{ group_path }}">{{ group_name }}</a>"{% endblocktrans %}
|
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %} accepted your invitation to join group "<a href="{{ group_path }}">{{ group_name }}</a>"{% endblocktrans %}
|
||||||
|
{% endif %}
|
||||||
|
{% elif notification.notification_type == 'JOIN' %}
|
||||||
|
{% if notification.related_group %}
|
||||||
|
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %} has joined your group "<a href="{{ group_path }}">{{ group_name }}</a>"{% endblocktrans %}
|
||||||
|
{% endif %}
|
||||||
|
{% elif notification.notification_type == 'LEAVE' %}
|
||||||
|
{% if notification.related_group %}
|
||||||
|
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %} has left your group "<a href="{{ group_path }}">{{ group_name }}</a>"{% endblocktrans %}
|
||||||
|
{% endif %}
|
||||||
|
{% elif notification.notification_type == 'REMOVE' %}
|
||||||
|
{% if notification.related_group %}
|
||||||
|
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %} has been removed from your group "<a href="{{ group_path }}">{{ group_name }}</a>"{% endblocktrans %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% elif notification.notification_type == 'REMOVE' and notification.related_group %}
|
||||||
|
{% blocktrans with group_name=notification.related_group.name group_path=notification.related_group.local_path %}
|
||||||
|
You have been removed from the "<a href="{{ group_path }}">{{ group_name }}</a> group"
|
||||||
|
{% endblocktrans %}
|
||||||
{% elif notification.related_import %}
|
{% elif notification.related_import %}
|
||||||
{% url 'import-status' notification.related_import.id as url %}
|
{% url 'import-status' notification.related_import.id as url %}
|
||||||
{% blocktrans %}Your <a href="{{ url }}">import</a> completed.{% endblocktrans %}
|
{% blocktrans %}Your <a href="{{ url }}">import</a> completed.{% endblocktrans %}
|
||||||
|
|
|
@ -158,7 +158,7 @@ def invite_member(request):
|
||||||
@require_POST
|
@require_POST
|
||||||
@login_required
|
@login_required
|
||||||
def remove_member(request):
|
def remove_member(request):
|
||||||
"""invite a member to the group"""
|
"""remove a member from the group"""
|
||||||
|
|
||||||
group = get_object_or_404(models.BookwyrmGroup, id=request.POST.get("group"))
|
group = get_object_or_404(models.BookwyrmGroup, id=request.POST.get("group"))
|
||||||
if not group:
|
if not group:
|
||||||
|
@ -192,17 +192,26 @@ def remove_member(request):
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# let the other members know about it
|
memberships = models.BookwyrmGroupMember.objects.filter(group=group)
|
||||||
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
||||||
memberships = models.BookwyrmGroupMember.objects.get(group=group)
|
notification_type = "LEAVE" if "self_removal" in request.POST and request.POST["self_removal"] else "REMOVE"
|
||||||
|
# let the other members know about it
|
||||||
for membership in memberships:
|
for membership in memberships:
|
||||||
member = membership.user
|
member = membership.user
|
||||||
if member != request.user:
|
if member != request.user:
|
||||||
model.objects.create(
|
model.objects.create(
|
||||||
user=member,
|
user=member,
|
||||||
related_user=request.user,
|
related_user=user,
|
||||||
related_group=request.group,
|
related_group=group,
|
||||||
notification_type="REMOVE",
|
notification_type=notification_type,
|
||||||
|
)
|
||||||
|
|
||||||
|
# let the user (now ex-member) know as well, if they were removed
|
||||||
|
if notification_type == "REMOVE":
|
||||||
|
model.objects.create(
|
||||||
|
user=user,
|
||||||
|
related_group=group,
|
||||||
|
notification_type=notification_type,
|
||||||
)
|
)
|
||||||
|
|
||||||
return redirect(user.local_path)
|
return redirect(user.local_path)
|
||||||
|
|
Loading…
Reference in a new issue