Mercurial > public > sg101
diff gpp/messages/models.py @ 1:dbd703f7d63a
Initial import of sg101 stuff from private repository.
author | gremmie |
---|---|
date | Mon, 06 Apr 2009 02:43:12 +0000 |
parents | |
children | 9c18250972d5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/messages/models.py Mon Apr 06 02:43:12 2009 +0000 @@ -0,0 +1,104 @@ +"""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 django.template.loader import render_to_string + + +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() + html = render_to_string('messages/markdown.html', {'data': self.message}) + self.html = html.strip() + 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