X-Git-Url: https://git.openstreetmap.org/osqa.git/blobdiff_plain/77c34a5005c5e159e7795c985888162b88609d5d..0f2d00f9d7d5d28149707f66c719b28edfe51aed:/forum/models/base.py diff --git a/forum/models/base.py b/forum/models/base.py index 63ab1eb..13eae22 100644 --- a/forum/models/base.py +++ b/forum/models/base.py @@ -86,7 +86,7 @@ class UndeletedObjectManager(models.Manager): def get_query_set(self): return super(UndeletedObjectManager, self).get_query_set().filter(deleted=False) -class MetaContent(BaseModel): +class GenericContent(BaseModel): """ Base class for Vote, Comment and FlaggedItem """ @@ -98,6 +98,24 @@ class MetaContent(BaseModel): abstract = True app_label = 'forum' +class MetaContent(BaseModel): + node = models.ForeignKey('Node', null=True, related_name='%(class)ss') + + def __init__(self, *args, **kwargs): + if 'content_object' in kwargs: + kwargs['node'] = kwargs['content_object'] + del kwargs['content_object'] + + super (MetaContent, self).__init__(*args, **kwargs) + + @property + def content_object(self): + return self.node.leaf + + class Meta: + abstract = True + app_label = 'forum' + from user import User class UserContent(models.Model): @@ -141,77 +159,26 @@ class DeletableContent(models.Model): return False -class ContentRevision(models.Model): - """ - Base class for QuestionRevision and AnswerRevision - """ - revision = models.PositiveIntegerField() - author = models.ForeignKey(User, related_name='%(class)ss') - revised_at = models.DateTimeField() - summary = models.CharField(max_length=300, blank=True) - text = models.TextField() - - class Meta: - abstract = True - app_label = 'forum' - - -class AnonymousContent(models.Model): - """ - Base class for AnonymousQuestion and AnonymousAnswer - """ - session_key = models.CharField(max_length=40) #session id for anonymous questions - wiki = models.BooleanField(default=False) - added_at = models.DateTimeField(default=datetime.datetime.now) - ip_addr = models.IPAddressField(max_length=21) #allow high port numbers - author = models.ForeignKey(User,null=True) - text = models.TextField() - summary = models.CharField(max_length=180) - - class Meta: - abstract = True - app_label = 'forum' - - from meta import Comment, Vote, FlaggedItem -from user import activity_record - -class Content(BaseModel, DeletableContent): - """ - Base class for Question and Answer - """ - author = models.ForeignKey(User, related_name='%(class)ss') - added_at = models.DateTimeField(default=datetime.datetime.now) +from node import Node, NodeRevision +class QandA(Node): wiki = models.BooleanField(default=False) wikified_at = models.DateTimeField(null=True, blank=True) - #locked = models.BooleanField(default=False) - #locked_by = models.ForeignKey(User, null=True, blank=True, related_name='locked_%(class)ss') - #locked_at = models.DateTimeField(null=True, blank=True) - - score = models.IntegerField(default=0) - vote_up_count = models.IntegerField(default=0) - vote_down_count = models.IntegerField(default=0) - - comment_count = models.PositiveIntegerField(default=0) - offensive_flag_count = models.SmallIntegerField(default=0) - - last_edited_at = models.DateTimeField(null=True, blank=True) - last_edited_by = models.ForeignKey(User, null=True, blank=True, related_name='last_edited_%(class)ss') - - html = models.TextField() - comments = generic.GenericRelation(Comment) - votes = generic.GenericRelation(Vote) - flagged_items = generic.GenericRelation(FlaggedItem) - class Meta: abstract = True app_label = 'forum' + def wikify(self): + if not self.wiki: + self.wiki = True + self.wikified_at = datetime.datetime.now() + self.save() + def save(self, *args, **kwargs): self.__dict__['score'] = self.__dict__['vote_up_count'] - self.__dict__['vote_down_count'] - super(Content,self).save(*args, **kwargs) + super(QandA,self).save(*args, **kwargs) try: ping_google() @@ -219,16 +186,4 @@ class Content(BaseModel, DeletableContent): logging.debug('problem pinging google did you register you sitemap with google?') - def post_get_last_update_info(self): - when = self.added_at - who = self.author - if self.last_edited_at and self.last_edited_at > when: - when = self.last_edited_at - who = self.last_edited_by - comments = self.comments.all() - if len(comments) > 0: - for c in comments: - if c.added_at > when: - when = c.added_at - who = c.user - return when, who \ No newline at end of file +