X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=influences%2Fmodels.py;h=78daa15992304ee33882f4da9922ee38a930f3c7;hb=682f6cde0a7bb2c822eb9ef69583259454a0d97b;hp=b3d023c4b30cc1944ff3ccb65d94b1c578ad14a2;hpb=6ae0167b390866b52721793750bb4ae6874c5110;p=matthijs%2Fprojects%2Fxerxes.git diff --git a/influences/models.py b/influences/models.py index b3d023c..78daa15 100644 --- a/influences/models.py +++ b/influences/models.py @@ -1,19 +1,28 @@ from django.db import models +from django.core.urlresolvers import reverse from django.contrib.auth.models import User +from django.utils.text import normalize_newlines from django.utils.translation import ugettext_lazy as _ +from threadedcomments.models import ThreadedComment +from xerxes.tools.text import rewrap # Create your models here. class Character(models.Model): + STATUS_CHOICES = ( + ('N', _('New')), + ('A', _('Approved')), + ) created = models.DateField(auto_now_add=1, verbose_name = _("Creation time")) modified = models.DateField(auto_now=1, verbose_name = _("Modification time")) name = models.CharField(max_length=255, verbose_name = _("Name")) + status = models.CharField(max_length=2, choices=STATUS_CHOICES, default='N', verbose_name = _("Status")) player = models.ForeignKey(User, verbose_name = _("Player")) def __str__(self): return self.name - class Admin: - pass + def get_absolute_url(self): + return reverse('influences_influence_detail', kwargs={'object_id' : self.pk}) class Meta: verbose_name = _("Character") @@ -21,29 +30,62 @@ class Character(models.Model): class Influence(models.Model): STATUS_CHOICES = ( - ('N', 'New'), - ('U', 'Under discussion'), - ('P', 'Processing'), - ('D', 'Done'), + ('N', _('New')), + ('U', _('Under discussion')), + ('P', _('Processing')), + ('D', _('Done')), ) created = models.DateField(auto_now_add=1, verbose_name = _("Creation time")) modified = models.DateField(auto_now=1, verbose_name = _("Modification time")) - character = models.ForeignKey(Character, edit_inline=models.TABULAR, num_in_admin=3, core=True, verbose_name = _("Character")) - contact = models.CharField(max_length=255, verbose_name = _("Contact")) + character = models.ForeignKey(Character, verbose_name = _("Character")) + contact = models.CharField(max_length=255, verbose_name = _("Contact Name")) summary = models.CharField(max_length=255, verbose_name = _("Summary")) description = models.TextField(verbose_name = _("Description")) status = models.TextField(max_length=1, choices=STATUS_CHOICES, default='N', verbose_name = _("Status")) longterm = models.BooleanField(default=False, verbose_name = _("Long term")) + result = models.TextField(blank=True,verbose_name = _("Result")) + def __str__(self): return self.summary - class Admin: - list_filter=('character', 'status', 'longterm') - search_fields=('character', 'description', 'contact') + def get_absolute_url(self): + return reverse('influences_influence_detail', kwargs={'object_id' : self.pk}) + + def get_comments(self, private): + """ + Gets the comments that have been made on this Influence. Each + comment gets its reply_form attribute set to a Form appropriate + for replying to the comment. + + If private is True, private comments are included in this list. + """ + def quote_reply(comment): + regex = "^([ >]*)(.*)$" + text = rewrap(normalize_newlines(comment.comment), 72, regex) + return "\n".join(["> " + l for l in text.split("\n")]) + + # Import here to prevent dependency loop, since forms depends on + # models as well + from forms import get_influence_comment_form + + if private: + comments = ThreadedComment.objects.get_tree(self) + else: + comments = ThreadedComment.public.get_tree(self) + + # Annotate each comment with a proper reply form + for comment in comments: + initial = { 'comment' : quote_reply(comment) } + prefix = "reply-to-%s" % (comment.pk) + FormClass = get_influence_comment_form(private, comment) + comment.reply_form = FormClass(initial=initial, + prefix=prefix) + return comments class Meta: verbose_name = _("Influence") verbose_name_plural = _("Influences") +# vim: set sts=4 sw=4 expandtab: