Notification emails #80
@ -399,10 +399,12 @@ class DraftExtensionView(
|
||||
add_preview_formset.save()
|
||||
form.save()
|
||||
# setup initial followers
|
||||
authors = extension_form.instance.authors.all()
|
||||
moderators = Group.objects.get(name='moderators').user_set.all()
|
||||
audience = list(moderators) + list(extension_form.instance.authors.all())
|
||||
for recipient in audience:
|
||||
follow(recipient, extension_form.instance, send_action=False)
|
||||
for recipient in authors:
|
||||
follow(recipient, extension_form.instance, send_action=False, flag='author')
|
||||
for recipient in moderators:
|
||||
follow(recipient, extension_form.instance, send_action=False, flag='moderator')
|
||||
if 'submit_draft' in self.request.POST:
|
||||
action.send(
|
||||
self.request.user,
|
||||
|
@ -80,9 +80,10 @@ class ExtensionsApprovalFormView(LoginRequiredMixin, FormView):
|
||||
form.save()
|
||||
self.approve_if_allowed(form)
|
||||
|
||||
# automatically follow after ineraction
|
||||
# automatically follow after an interaction
|
||||
# if a user had unfollowed this extension before,
|
||||
# we unfortunately are making them a follower again
|
||||
# TODO? set a specific flag?
|
||||
follow(self.request.user, form.instance.extension, send_action=False)
|
||||
|
||||
activity_type2verb = {
|
||||
|
@ -4,7 +4,7 @@ import logging
|
||||
import time
|
||||
|
||||
from django.contrib.admin.utils import NestedObjects
|
||||
from django.contrib.auth.models import AbstractUser, Group
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.db import models, DEFAULT_DB_ALIAS, transaction
|
||||
from django.templatetags.static import static
|
||||
|
||||
|
@ -1,14 +1,17 @@
|
||||
from typing import Dict
|
||||
import logging
|
||||
|
||||
from actstream.actions import follow, unfollow
|
||||
from actstream.models import Action, followers
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.contrib.auth.models import Group
|
||||
from django.db.models.signals import m2m_changed, post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from blender_id_oauth_client import signals as bid_signals
|
||||
|
||||
from users.blender_id import BIDSession
|
||||
from extensions.models import Extension
|
||||
|
||||
User = get_user_model()
|
||||
bid = BIDSession()
|
||||
@ -61,3 +64,31 @@ def create_notification(
|
||||
f'create notification for {recipient}: ',
|
||||
f'{instance.actor} {instance.verb} {instance.target}',
|
||||
)
|
||||
|
||||
|
||||
@receiver(m2m_changed, sender=User.groups.through)
|
||||
def update_moderator_follows(instance, action, model, reverse, pk_set, **kwargs):
|
||||
"""Users becoming moderators should follow all extensions,
|
||||
and users that stop being moderators should no longer follow all extensions.
|
||||
The flag='moderator' is used to avoid deleting follow relations that were created in contexts
|
||||
other than moderator's duties.
|
||||
"""
|
||||
moderators = Group.objects.get(name='moderators')
|
||||
extensions = Extension.objects.all()
|
||||
users = []
|
||||
if model == Group and not reverse:
|
||||
if moderators.pk not in pk_set:
|
||||
return
|
||||
users = [instance]
|
||||
else:
|
||||
if instance != moderators:
|
||||
return
|
||||
users = User.objects.filter(pk__in=pk_set)
|
||||
|
||||
for user in users:
|
||||
if action == 'post_remove':
|
||||
for extension in extensions:
|
||||
unfollow(user, extension, send_action=False, flag='moderator')
|
||||
elif action == 'post_add':
|
||||
for extension in extensions:
|
||||
follow(user, extension, send_action=False, flag='moderator')
|
||||
|
Loading…
Reference in New Issue
Block a user