+from akismet import *\r
from base import *\r
from tag import Tag\r
\r
\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
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
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