annotate gpp/forums/signals.py @ 348:d1b11096595b

Fix #168; when nailing a spammer, clear their profile text fields. Guard against topics and forums that don't exist when deleting posts in the signal handler. Make the forum stats template tag only display the latest active users.
author Brian Neal <bgneal@gmail.com>
date Wed, 02 Mar 2011 02:18:28 +0000
parents 3a4bbf9c2cce
children e0523e17ea43
rev   line source
bgneal@75 1 """
bgneal@75 2 Signal handlers for the forums application.
bgneal@75 3 """
bgneal@75 4 from django.db.models.signals import post_save
bgneal@75 5 from django.db.models.signals import post_delete
bgneal@181 6
bgneal@348 7 from forums.models import Forum, Topic, Post
bgneal@232 8 from forums.views.subscriptions import notify_topic_subscribers
bgneal@75 9
bgneal@75 10
bgneal@75 11 def on_topic_save(sender, **kwargs):
bgneal@75 12 if kwargs['created']:
bgneal@75 13 topic = kwargs['instance']
bgneal@75 14 topic.forum.topic_count_update()
bgneal@75 15 topic.forum.save()
bgneal@75 16
bgneal@75 17
bgneal@75 18 def on_topic_delete(sender, **kwargs):
bgneal@75 19 topic = kwargs['instance']
bgneal@75 20 topic.forum.topic_count_update()
bgneal@75 21 topic.forum.save()
bgneal@75 22
bgneal@75 23
bgneal@75 24 def on_post_save(sender, **kwargs):
bgneal@75 25 if kwargs['created']:
bgneal@75 26 post = kwargs['instance']
bgneal@75 27
bgneal@75 28 # update the topic
bgneal@75 29 post.topic.post_count_update()
bgneal@75 30 post.topic.save()
bgneal@75 31
bgneal@75 32 # update the forum
bgneal@75 33 post.topic.forum.post_count_update()
bgneal@75 34 post.topic.forum.save()
bgneal@75 35
bgneal@181 36 # send out any email notifications
bgneal@181 37 notify_topic_subscribers(post)
bgneal@181 38
bgneal@75 39
bgneal@75 40 def on_post_delete(sender, **kwargs):
bgneal@75 41 post = kwargs['instance']
bgneal@75 42
bgneal@75 43 # update the topic
bgneal@348 44 try:
bgneal@348 45 post.topic.post_count_update()
bgneal@348 46 post.topic.save()
bgneal@348 47 except Topic.DoesNotExist:
bgneal@348 48 pass
bgneal@348 49 else:
bgneal@348 50 # update the forum
bgneal@348 51 try:
bgneal@348 52 post.topic.forum.post_count_update()
bgneal@348 53 post.topic.forum.save()
bgneal@348 54 except Forum.DoesNotExist:
bgneal@348 55 pass
bgneal@75 56
bgneal@75 57
bgneal@260 58 post_save.connect(on_topic_save, sender=Topic, dispatch_uid='forums.signals')
bgneal@260 59 post_delete.connect(on_topic_delete, sender=Topic, dispatch_uid='forums.signals')
bgneal@75 60
bgneal@260 61 post_save.connect(on_post_save, sender=Post, dispatch_uid='forums.signals')
bgneal@260 62 post_delete.connect(on_post_delete, sender=Post, dispatch_uid='forums.signals')