]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/base.py
ALteration of the schema to a single content model. As a bonus there is a complete...
[osqa.git] / forum / models / base.py
index 63ab1eb16b1d8761781bf513e5b458d357f46c15..13eae2279e13bebe4774f01c8c88c4696fb7efa6 100644 (file)
@@ -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
+