]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/node.py
put akismet inside of the forum dir.
[osqa.git] / forum / models / node.py
index 13749cd9872a5af40019e7154b96f7df12a9bff5..a92dee990b22d29123ba490440663191ce5ae554 100644 (file)
@@ -1,3 +1,4 @@
+from akismet import *\r
 from base import *\r
 from tag import Tag\r
 \r
@@ -77,24 +78,25 @@ class NodeMetaClass(models.Model.__metaclass__):
 \r
 \r
 node_create = django.dispatch.Signal(providing_args=['instance'])\r
+node_edit = django.dispatch.Signal(providing_args=['instance'])\r
 \r
 class Node(BaseModel, NodeContent, DeletableContent):\r
     __metaclass__ = NodeMetaClass\r
 \r
-    node_type            = models.CharField(max_length=16, default='node')\r
-    parent               = models.ForeignKey('Node', related_name='children', null=True)\r
-    abs_parent           = models.ForeignKey('Node', related_name='all_children', null=True)\r
+    node_type             = models.CharField(max_length=16, default='node')\r
+    parent                = models.ForeignKey('Node', related_name='children', null=True)\r
+    abs_parent            = models.ForeignKey('Node', related_name='all_children', null=True)\r
 \r
-    added_at             = models.DateTimeField(default=datetime.datetime.now)\r
+    added_at              = models.DateTimeField(default=datetime.datetime.now)\r
 \r
-    tags                 = models.ManyToManyField('Tag', related_name='%(class)ss')\r
+    tags                  = models.ManyToManyField('Tag', related_name='%(class)ss')\r
 \r
-    score                 = models.IntegerField(default=0)\r
-    vote_up_count         = models.IntegerField(default=0)\r
+    score                 = DenormalizedField(default=0)\r
+    vote_up_count         = DenormalizedField(default=0)\r
     vote_down_count       = models.IntegerField(default=0)\r
 \r
-    comment_count         = models.PositiveIntegerField(default=0)\r
-    offensive_flag_count  = models.SmallIntegerField(default=0)\r
+    comment_count         = DenormalizedField(default=0)\r
+    offensive_flag_count  = DenormalizedField(default=0)\r
 \r
     last_edited_at        = models.DateTimeField(null=True, blank=True)\r
     last_edited_by        = models.ForeignKey(User, null=True, blank=True, related_name='last_edited_%(class)ss')\r
@@ -136,14 +138,17 @@ class Node(BaseModel, NodeContent, DeletableContent):
         self.body = revision.body\r
 \r
         old_revision = self.active_revision\r
-\r
         self.active_revision = revision\r
-        self.save()\r
 \r
         if not old_revision:\r
+            signal = node_create\r
+        else:\r
             self.last_edited_at = datetime.datetime.now()\r
             self.last_edited_by = user\r
-            node_create.send(sender=self.__class__, instance=self)\r
+            signal = node_edit\r
+\r
+        self.save()\r
+        signal.send(sender=self.__class__, instance=self)\r
 \r
     def get_tag_list_if_changed(self):\r
         dirty = self.get_dirty_fields()\r
@@ -197,11 +202,23 @@ class Node(BaseModel, NodeContent, DeletableContent):
         super(Node, self).save(*args, **kwargs)\r
         if tags is not None: self.tags = tags\r
 \r
+    @staticmethod\r
+    def isSpam(comment, data):\r
+        api = Akismet()\r
+        if api.key is None:\r
+            print "problem" # raise APIKeyError\r
+        else:\r
+            if api.comment_check(comment, data):\r
+                return True\r
+            else:\r
+                return False\r
+        return data\r
+\r
     class Meta:\r
         app_label = 'forum'\r
 \r
 \r
-class NodeRevision(NodeContent):\r
+class NodeRevision(BaseModel, NodeContent):\r
     node       = models.ForeignKey(Node, related_name='revisions')\r
     summary    = models.CharField(max_length=300)\r
     revision   = models.PositiveIntegerField()\r