bgneal@75: """ bgneal@75: Signal handlers for the forums application. bgneal@75: """ bgneal@75: from django.db.models.signals import post_save bgneal@75: from django.db.models.signals import post_delete bgneal@181: bgneal@348: from forums.models import Forum, Topic, Post bgneal@232: from forums.views.subscriptions import notify_topic_subscribers bgneal@390: from forums.tools import auto_favorite, auto_subscribe bgneal@75: bgneal@75: bgneal@75: def on_topic_save(sender, **kwargs): bgneal@75: if kwargs['created']: bgneal@75: topic = kwargs['instance'] bgneal@75: topic.forum.topic_count_update() bgneal@75: topic.forum.save() bgneal@75: bgneal@75: bgneal@75: def on_topic_delete(sender, **kwargs): bgneal@75: topic = kwargs['instance'] bgneal@75: topic.forum.topic_count_update() bgneal@75: topic.forum.save() bgneal@75: bgneal@75: bgneal@75: def on_post_save(sender, **kwargs): bgneal@75: if kwargs['created']: bgneal@75: post = kwargs['instance'] bgneal@75: bgneal@75: # update the topic bgneal@75: post.topic.post_count_update() bgneal@75: post.topic.save() bgneal@75: bgneal@75: # update the forum bgneal@75: post.topic.forum.post_count_update() bgneal@75: post.topic.forum.save() bgneal@75: bgneal@181: # send out any email notifications bgneal@181: notify_topic_subscribers(post) bgneal@181: bgneal@390: # perform any auto-favorite and auto-subscribe actions for the new post bgneal@390: auto_favorite(post) bgneal@390: auto_subscribe(post) bgneal@390: bgneal@75: bgneal@75: def on_post_delete(sender, **kwargs): bgneal@75: post = kwargs['instance'] bgneal@75: bgneal@75: # update the topic bgneal@348: try: bgneal@348: post.topic.post_count_update() bgneal@348: post.topic.save() bgneal@348: except Topic.DoesNotExist: bgneal@348: pass bgneal@348: else: bgneal@348: # update the forum bgneal@348: try: bgneal@348: post.topic.forum.post_count_update() bgneal@348: post.topic.forum.save() bgneal@348: except Forum.DoesNotExist: bgneal@348: pass bgneal@75: bgneal@75: bgneal@260: post_save.connect(on_topic_save, sender=Topic, dispatch_uid='forums.signals') bgneal@260: post_delete.connect(on_topic_delete, sender=Topic, dispatch_uid='forums.signals') bgneal@75: bgneal@260: post_save.connect(on_post_save, sender=Post, dispatch_uid='forums.signals') bgneal@260: post_delete.connect(on_post_delete, sender=Post, dispatch_uid='forums.signals')