event.company.followers.values_list("follower__id", flat=True)), )) return result def get_activity(self, event): return Activity( actor=event.company, verb=EventCreateVerb, object=event, time=event.created_at, extra_context={"title": event.title}, ) register_handler(EventHandler) class RegistrationHandler(Handler): model = Registration manager = feed_manager def handle_create(self, instance, **kwargs): activity = self.get_activity(instance) for feeds, recipients in self.get_feeds_and_recipients(instance): self.manager.add_activity(activity, recipients, feeds) def handle_update(self, instance, **kwargs): registered = instance.unregistration_date is not None if registered:
activity = Activity( actor=instance.created_by, verb=RestrictedMailSent, object=instance, time=instance.used, extra_context={}, ) self.manager.add_activity(activity, [instance.created_by.pk], [NotificationFeed]) # Send notification notification = RestrictedMailSentNotification(instance.created_by) notification.notify() def handle_failure(self, sender, reason): """ Notify about restricted mail failure. This action is not connected to a specific user. We sends a message to the sender instead of a user. We use the send_mail task directly because of this. """ send_email.delay( to_email=sender, context={"reason": reason}, subject=f"Kunne ikke sende ut begrenset epost", plain_template="restricted/email/process_failure.txt", html_template="restricted/email/process_failure.html", ) registry.register_handler(RestrictedHandler)
def get_activity(self, meeting_invitation): return Activity( actor=meeting_invitation.created_by, verb=MeetingInvitationVerb, object=meeting_invitation, target=meeting_invitation.user, time=meeting_invitation.created_at, ) def handle_create(self, instance, **kwargs): activity = self.get_activity(instance) self.manager.add_activity(activity, [instance.user.pk], [NotificationFeed]) # Send notification notification = MeetingInvitationNotification( instance.user, meeting_invitation=instance ) notification.notify() def handle_update(self, instance, **kwargs): activity = self.get_activity(instance) self.manager.add_activity(activity, [instance.user.pk], [NotificationFeed]) def handle_delete(self, instance, **kwargs): activity = self.get_activity(instance) self.manager.remove_activity(activity, [instance.user.pk], [NotificationFeed]) register_handler(MeetingInvitationHandler)
verb=CompanyInterestVerb, object=instance, time=instance.created_at, extra_context={}, ) recipients = [ member.user for member in AbakusGroup.objects.get( name="Bedkom").memberships.all() ] self.manager.add_activity(activity, [recipient.pk for recipient in recipients], [NotificationFeed]) for recipient in recipients: notification = CompanyInterestNotification( recipient, company_interest=instance) notification.notify() send_email.delay( to_email=f"bedriftskontakt@{settings.GSUITE_DOMAIN}", context=instance.generate_mail_context(), subject="En ny bedrift har meldt sin interesse", plain_template="companies/email/company_interest.txt", html_template="companies/email/company_interest.html", ) register_handler(CompanyInterestHandler)
author=author) reply_notification.notify() def handle_delete(self, instance, **kwargs): if not (isinstance(instance.parent, ObjectPermissionsModel) and not instance.parent.require_auth): return activity = self.get_activity(instance) for feeds, recipients in self.get_feeds_and_recipients(instance): self.manager.remove_activity( activity, [recipient.pk for recipient in recipients], feeds) def get_feeds_and_recipients(self, comment): result = [] if hasattr(comment.content_object, 'followers'): author = comment.created_by followers = comment.content_object.followers.all().select_related( 'follower') result.append(([PersonalFeed, NotificationFeed], [ follow.follower for follow in followers if not follow.follower == author ])) if comment.created_by: result.append(([UserFeed], [comment.created_by])) return result register_handler(CommentHandler)
followers = instance.user.followers\ .exclude(follower_id=instance.user_id)\ .values_list('follower_id', flat=True) self.manager.add_activity(activity, followers, [PersonalFeed]) def get_activity(self, membership): return Activity(verb=GroupJoinVerb, actor=membership.user, target=membership.abakus_group, object=membership, time=membership.created_at, extra_context={}) register_handler(MembershipHandler) class PenaltyHandler(Handler): model = Penalty manager = feed_manager def get_activity(self, penalty): return Activity(actor=penalty.source_event, verb=PenaltyVerb, object=penalty, target=penalty.user, time=penalty.created_at, extra_context={ 'reason': penalty.reason, 'weight': penalty.weight,
from lego.apps.notifications.notifications import AnnouncementNotification class AnnouncementHandler(Handler): model = Announcement manager = feed_manager def handle_send(self, announcement): if not announcement.created_by: return activity = Activity(actor=announcement.created_by, verb=AnnouncementVerb, object=announcement, time=announcement.created_at, extra_context={}) recipients = announcement.lookup_recipients() self.manager.add_activity(activity, [recipient.pk for recipient in recipients], [NotificationFeed, PersonalFeed]) # Send notifications for recipient in recipients: notification = AnnouncementNotification(recipient, announcement=announcement) notification.notify() register_handler(AnnouncementHandler)