Notification emails #80
@ -1,16 +1,14 @@
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
from actstream.actions import follow
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
from django.db.models.signals import pre_save, post_save, post_delete
|
from django.db.models.signals import pre_save, post_save, post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
import django.dispatch
|
|
||||||
|
|
||||||
import extensions.models
|
import extensions.models
|
||||||
import extensions.tasks
|
import extensions.tasks
|
||||||
import files.models
|
import files.models
|
||||||
|
|
||||||
version_changed = django.dispatch.Signal()
|
|
||||||
version_uploaded = django.dispatch.Signal()
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_delete, sender=extensions.models.Preview)
|
@receiver(post_delete, sender=extensions.models.Preview)
|
||||||
def _delete_file(sender: object, instance: extensions.models.Preview, **kwargs: object) -> None:
|
def _delete_file(sender: object, instance: extensions.models.Preview, **kwargs: object) -> None:
|
||||||
@ -39,8 +37,20 @@ def _update_search_index(sender, instance, **kw):
|
|||||||
pass # TODO: update search index
|
pass # TODO: update search index
|
||||||
|
|
||||||
|
|
||||||
def send_notifications(sender=None, instance=None, signal=None, **kw):
|
@receiver(post_save, sender=extensions.models.Extension)
|
||||||
pass # TODO: send email notification about new version upload
|
def setup_initial_followers(
|
||||||
|
sender: object,
|
||||||
|
instance: extensions.models.Extension,
|
||||||
|
created: bool,
|
||||||
|
**kwargs: object,
|
||||||
|
) -> None:
|
||||||
|
if not created:
|
||||||
|
return
|
||||||
|
|
||||||
|
moderators = Group.objects.get(name='moderators').user_set.all()
|
||||||
|
audience = list(moderators) + list(instance.authors.all())
|
||||||
|
for recipient in audience:
|
||||||
|
follow(recipient, instance, send_action=False)
|
||||||
|
|
||||||
|
|
||||||
def extension_should_be_listed(extension):
|
def extension_should_be_listed(extension):
|
||||||
@ -84,6 +94,3 @@ def _set_is_listed(
|
|||||||
|
|
||||||
extension.is_listed = new_is_listed
|
extension.is_listed = new_is_listed
|
||||||
extension.save()
|
extension.save()
|
||||||
|
|
||||||
|
|
||||||
version_uploaded.connect(send_notifications, dispatch_uid='send_notifications')
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
"""Contains views allowing developers to manage their add-ons."""
|
"""Contains views allowing developers to manage their add-ons."""
|
||||||
|
from actstream import action
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
@ -394,6 +395,11 @@ class DraftExtensionView(
|
|||||||
extension_form.save()
|
extension_form.save()
|
||||||
add_preview_formset.save()
|
add_preview_formset.save()
|
||||||
form.save()
|
form.save()
|
||||||
|
action.send(
|
||||||
|
self.request.user,
|
||||||
|
verb='submitted for review', # FIXME map the type into a "registered" verb
|
||||||
|
target=extension_form.instance,
|
||||||
|
)
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
except forms.ValidationError as e:
|
except forms.ValidationError as e:
|
||||||
if 'hash' in e.error_dict:
|
if 'hash' in e.error_dict:
|
||||||
|
Loading…
Reference in New Issue
Block a user