def add_subscription(request, topic_id): topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=topic_id) if not perms.may_subscribe_topic(request.user, topic): raise PermissionDenied topic.subscribers.add(request.user) return HttpResponseRedirect(topic.get_absolute_url())
def add_subscription(request, topic_id): # VERIFIED topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=topic_id) if not perms.may_access_topic(request, topic): raise PermissionDenied if not perms.may_subscribe_topic(request.user, topic): raise PermissionDenied topic.subscribers.add(request.user) return HttpResponseRedirect(topic.get_absolute_url())
def add_subscription(request, topic_id): topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=topic_id) if not perms.may_subscribe_topic(request.user, topic): raise PermissionDenied topic.subscribers.add(request.user) msg = _('Subscription added. You will receive email notifications for replies to this topic.') messages.success(request, msg, fail_silently=True) return HttpResponseRedirect(topic.get_absolute_url())
def add_subscription(request, topic_id): topic = get_object_or_404(perms.filter_topics(request.user, Topic.objects.all()), pk=topic_id) if not perms.may_subscribe_topic(request.user, topic): raise PermissionDenied topic.subscribers.add(request.user) msg = _( 'Subscription added. You will receive email notifications for replies to this topic.' ) messages.success(request, msg, fail_silently=True) return HttpResponseRedirect(topic.get_absolute_url())
def post_saved(instance, **kwargs): if not defaults.PYBB_DISABLE_NOTIFICATIONS: notify_topic_subscribers(instance) if util.get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) if kwargs['created']: profile = util.get_pybb_profile(instance.user) profile.post_count = instance.user.posts.count() profile.save()
def post_saved(instance, **kwargs): if getattr(instance, '_post_saved_done', False): #Do not spam users when post is saved more than once in a same request. #For eg, when we parse attachments. return instance._post_saved_done = True if not defaults.PYBB_DISABLE_NOTIFICATIONS: notify_topic_subscribers(instance) if util.get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) if kwargs['created']: profile = util.get_pybb_profile(instance.user) profile.post_count = instance.user.posts.count() profile.save()
def forum_post_post_save(sender, instance, created, **kwargs): def notify_subscribers(mentions): # type: (List[str]) -> None recipients = list( instance.topic.subscribers.exclude(pk__in=list( set([instance.user.pk] + [ x.pk for x in MentionsService. get_mentioned_users_with_notification_enabled( mentions, 'new_forum_post_mention') ])))) if recipients: push_notification( recipients, instance.user, 'new_forum_reply', { 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user}), 'post_url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'topic_url': build_notification_url( settings.BASE_URL + instance.topic.get_absolute_url(), instance.user), 'topic_name': instance.topic.name, 'unsubscribe_url': build_notification_url( settings.BASE_URL + reverse_url('pybb:delete_subscription', args=[instance.topic.id]), instance.user) }) def notify_mentioned(mentions): # type: (List[str]) -> None for username in mentions: user = get_object_or_None(User, username=username) if user is None: try: profile = get_object_or_None(UserProfile, real_name=username) if profile: user = profile.user except MultipleObjectsReturned: user = None if user: push_notification( [user], instance.user, 'new_forum_post_mention', { 'url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user}), 'post': instance.topic.name, }) if created: if hasattr(instance.topic.forum, 'group'): instance.topic.forum.group.save() # trigger date_updated update if get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) mentions = MentionsService.get_mentions(instance.body) if not instance.on_moderation: notify_subscribers(mentions) notify_mentioned(mentions) else: NotificationsService.email_superusers( 'New forum post needs moderation', '%s%s' % (settings.BASE_URL, instance.get_absolute_url())) else: mentions = cache.get( "post.%d.forum_post_pre_save_mentions" % instance.pk, []) cache.delete("post.%d.forum_post_pre_save_mentions" % instance.pk) if cache.get("post.%d.forum_post_pre_save_approved" % instance.pk): push_notification( [instance.user], None, 'forum_post_approved', { 'url': build_notification_url(settings.BASE_URL + instance.get_absolute_url()) }) notify_subscribers(mentions) notify_mentioned(mentions) cache.delete("post.%d.forum_post_pre_save_approved" % instance.pk) cache_key = make_template_fragment_key( 'home_page_latest_from_forums', (instance.user.pk, instance.user.userprofile.language)) cache.delete(cache_key)
def forum_post_post_save(sender, instance, created, **kwargs): def notify_subscribers(): push_notification( list(instance.topic.subscribers.exclude(pk=instance.user.pk)), instance.user, 'new_forum_reply', { 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url('user_page', kwargs={'username': instance.user}), 'post_url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'topic_url': build_notification_url( settings.BASE_URL + instance.topic.get_absolute_url(), instance.user), 'topic_name': instance.topic.name, 'unsubscribe_url': build_notification_url( settings.BASE_URL + reverse_url('pybb:delete_subscription', args=[instance.topic.id]), instance.user) }) if created: mentions = MentionsService.get_mentions(instance.body) if hasattr(instance.topic.forum, 'group'): instance.topic.forum.group.save() # trigger date_updated update if get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) if not instance.on_moderation: notify_subscribers() else: NotificationsService.email_superusers( 'New forum post needs moderation', '%s%s' % (settings.BASE_URL, instance.get_absolute_url())) else: mentions = cache.get( "user.%d.forum_post_pre_save_mentions" % instance.user.pk, []) if cache.get("user.%d.forum_post_pre_save_approved" % instance.user.pk): notify_subscribers() for username in mentions: try: user = User.objects.get(username=username) push_notification( [user], instance.user, 'new_forum_post_mention', { 'url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user}), 'post': instance.topic.name, }) except User.DoesNotExist: pass cache_key = make_template_fragment_key( 'home_page_latest_from_forums', (instance.user.pk, instance.user.userprofile.language)) cache.delete(cache_key)