Mercurial > public > sg101
view gpp/messages/models.py @ 181:500e5875a306
Implementing #61: adding a forum topic subscription feature.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 28 Mar 2010 01:07:47 +0000 |
parents | 48621ba5c385 |
children | 5c889b587416 |
line wrap: on
line source
"""Models for the messages application.""" import datetime from django.db import models from django.db.models import Q from django.contrib.auth.models import User from core.markup import site_markup class MessageManager(models.Manager): """The manager for the Message model. Provides convenience functions.""" def inbox(self, user): return self.filter(receiver=user, receiver_delete_date__isnull=True) def outbox(self, user): return self.filter(sender=user, sender_delete_date__isnull=True) def trash(self, user): return self.filter( Q(sender=user, sender_delete_date__isnull=False) | Q(receiver=user, receiver_delete_date__isnull=False) ) def unread_count(self, user): return self.filter(receiver=user, read_date__isnull=True).count() class Message(models.Model): """The Message is a model for a private message between users.""" sender = models.ForeignKey(User, related_name='sender') receiver = models.ForeignKey(User, related_name='receiver') send_date = models.DateTimeField('Date Sent', null=True, blank=True) read_date = models.DateTimeField('Date Received', null=True, blank=True) reply_date = models.DateTimeField('Date Replied', null=True, blank=True) subject = models.CharField(max_length=120) message = models.TextField() html = models.TextField() sender_delete_date = models.DateTimeField(null=True, blank=True) receiver_delete_date = models.DateTimeField(null=True, blank=True) signature_attached = models.BooleanField(default=False) objects = MessageManager() def unread(self): """returns True if the message has not been read yet""" return self.read_date is None def replied_to(self): """returns True if the message has been replied to""" return self.reply_date is not None def is_deleted(self, user): """returns True if the message has been deleted by the user""" if (user == self.sender and self.sender_delete_date is not None) or ( user == self.receiver and self.receiver_delete_date is not None): return True return False def save(self, force_insert = False, force_update = False): if not self.id: self.send_date = datetime.datetime.now() self.html = site_markup(self.message) super(Message, self).save(force_insert, force_update) @models.permalink def get_absolute_url(self): return ('messages.views.view', [str(self.id)]) def __unicode__(self): return self.subject class Meta: ordering = ('-send_date', ) class OptionsManager(models.Manager): """Manager class for Options model.""" def for_user(self, user): try: opts = self.get(user=user) except Options.DoesNotExist: opts = Options(user=user) opts.save() return opts class Options(models.Model): """Options is a model for user private message options.""" user = models.ForeignKey(User, editable=False) attach_signature = models.BooleanField("Always attach signature?", default=True) notify_email = models.BooleanField("Notify me of new messages via email?", default=False) objects = OptionsManager() def __unicode__(self): return self.user.username # vim: ts=4 sw=4