class ActiveObjectManager(models.Manager):
+ use_for_related_fields = True
def get_query_set(self):
return super(ActiveObjectManager, self).get_query_set().filter(canceled=False)
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
"""
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):
else:
return False
+mark_canceled = django.dispatch.Signal(providing_args=['instance'])
-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 CancelableContent(models.Model):
+ canceled = models.BooleanField(default=False)
-
-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)
+ def cancel(self):
+ if not self.canceled:
+ self.canceled = True
+ self.save()
+ mark_canceled.send(sender=self.__class__, instance=self)
+ return True
+
+ return False
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()
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
+