X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/0bf7a855000b99350fce021dc8fe1bf59ceece20..b97cf4924e1f43e7cf92bfc807a8e3dec1a2eec1:/forum/models/node.py diff --git a/forum/models/node.py b/forum/models/node.py index 552944e..a92dee9 100644 --- a/forum/models/node.py +++ b/forum/models/node.py @@ -1,3 +1,4 @@ +from akismet import * from base import * from tag import Tag @@ -77,24 +78,25 @@ class NodeMetaClass(models.Model.__metaclass__): node_create = django.dispatch.Signal(providing_args=['instance']) +node_edit = django.dispatch.Signal(providing_args=['instance']) class Node(BaseModel, NodeContent, DeletableContent): __metaclass__ = NodeMetaClass - node_type = models.CharField(max_length=16, default='node') - parent = models.ForeignKey('Node', related_name='children', null=True) - abs_parent = models.ForeignKey('Node', related_name='all_children', null=True) + node_type = models.CharField(max_length=16, default='node') + parent = models.ForeignKey('Node', related_name='children', null=True) + abs_parent = models.ForeignKey('Node', related_name='all_children', null=True) - added_at = models.DateTimeField(default=datetime.datetime.now) + added_at = models.DateTimeField(default=datetime.datetime.now) - tags = models.ManyToManyField('Tag', related_name='%(class)ss') + tags = models.ManyToManyField('Tag', related_name='%(class)ss') - score = models.IntegerField(default=0) - vote_up_count = models.IntegerField(default=0) + score = DenormalizedField(default=0) + vote_up_count = DenormalizedField(default=0) vote_down_count = models.IntegerField(default=0) - comment_count = models.PositiveIntegerField(default=0) - offensive_flag_count = models.SmallIntegerField(default=0) + comment_count = DenormalizedField(default=0) + offensive_flag_count = DenormalizedField(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') @@ -136,14 +138,17 @@ class Node(BaseModel, NodeContent, DeletableContent): self.body = revision.body old_revision = self.active_revision - self.active_revision = revision - self.save() if not old_revision: + signal = node_create + else: self.last_edited_at = datetime.datetime.now() self.last_edited_by = user - node_create.send(sender=self.__class__, instance=self) + signal = node_edit + + self.save() + signal.send(sender=self.__class__, instance=self) def get_tag_list_if_changed(self): dirty = self.get_dirty_fields() @@ -190,16 +195,30 @@ class Node(BaseModel, NodeContent, DeletableContent): if self.parent_id and not self.abs_parent_id: self.abs_parent = self.parent.absolute_parent + + self.__dict__['score'] = self.__dict__['vote_up_count'] - self.__dict__['vote_down_count'] tags = self.get_tag_list_if_changed() super(Node, self).save(*args, **kwargs) if tags is not None: self.tags = tags + @staticmethod + def isSpam(comment, data): + api = Akismet() + if api.key is None: + print "problem" # raise APIKeyError + else: + if api.comment_check(comment, data): + return True + else: + return False + return data + class Meta: app_label = 'forum' -class NodeRevision(NodeContent): +class NodeRevision(BaseModel, NodeContent): node = models.ForeignKey(Node, related_name='revisions') summary = models.CharField(max_length=300) revision = models.PositiveIntegerField()