summaryrefslogtreecommitdiffstats
path: root/askbot/models/post.py
diff options
context:
space:
mode:
Diffstat (limited to 'askbot/models/post.py')
-rw-r--r--askbot/models/post.py132
1 files changed, 76 insertions, 56 deletions
diff --git a/askbot/models/post.py b/askbot/models/post.py
index b4d8bfca..d155667a 100644
--- a/askbot/models/post.py
+++ b/askbot/models/post.py
@@ -235,7 +235,7 @@ class PostManager(BaseQuerySetManager):
parse_results = post.parse_and_save(author=author, is_private=is_private)
- post.add_revision(
+ revision = post.add_revision(
author=author,
revised_at=added_at,
text=text,
@@ -244,16 +244,17 @@ class PostManager(BaseQuerySetManager):
ip_addr=ip_addr
)
- from askbot.models import signals
- signals.post_updated.send(
- post=post,
- updated_by=author,
- newly_mentioned_users=parse_results['newly_mentioned_users'],
- timestamp=added_at,
- created=True,
- diff=parse_results['diff'],
- sender=post.__class__
- )
+ if revision.revision > 0:
+ from askbot.models import signals
+ signals.post_updated.send(
+ post=post,
+ updated_by=author,
+ newly_mentioned_users=parse_results['newly_mentioned_users'],
+ timestamp=added_at,
+ created=True,
+ diff=parse_results['diff'],
+ sender=post.__class__
+ )
return post
@@ -510,7 +511,7 @@ class Post(models.Model):
'html': post_html,
'newly_mentioned_users': mentioned_authors,
'removed_mentions': removed_mentions,
- }
+ }
return data
#todo: when models are merged, it would be great to remove author parameter
@@ -864,7 +865,7 @@ class Post(models.Model):
is_multilingual = getattr(django_settings, 'ASKBOT_MULTILINGUAL', False)
if is_multilingual:
request_language = get_language()
- activate_language(self.thread.language_code)
+ activate_language(self.language_code)
if self.is_answer():
if not question_post:
@@ -1853,7 +1854,7 @@ class Post(models.Model):
latest_rev.save()
else:
#otherwise we create a new revision
- self.add_revision(
+ latest_rev = self.add_revision(
author=edited_by,
revised_at=edited_at,
text=text,
@@ -1863,19 +1864,22 @@ class Post(models.Model):
is_anonymous=edit_anonymously
)
- parse_results = self.parse_and_save(author=edited_by, is_private=is_private)
+ if latest_rev.revision > 0:
+ parse_results = self.parse_and_save(author=edited_by, is_private=is_private)
- from askbot.models import signals
- signals.post_updated.send(
- post=self,
- updated_by=edited_by,
- newly_mentioned_users=parse_results['newly_mentioned_users'],
- suppress_email=suppress_email,
- timestamp=edited_at,
- created=False,
- diff=parse_results['diff'],
- sender=self.__class__
- )
+ from askbot.models import signals
+ signals.post_updated.send(
+ post=self,
+ updated_by=edited_by,
+ newly_mentioned_users=parse_results['newly_mentioned_users'],
+ suppress_email=suppress_email,
+ timestamp=edited_at,
+ created=False,
+ diff=parse_results['diff'],
+ sender=self.__class__
+ )
+
+ return latest_rev
def _answer__apply_edit(
@@ -1899,7 +1903,7 @@ class Post(models.Model):
else:
self.make_public()
- self.__apply_edit(
+ revision = self.__apply_edit(
edited_at=edited_at,
edited_by=edited_by,
text=text,
@@ -1917,6 +1921,7 @@ class Post(models.Model):
last_activity_at=edited_at,
last_activity_by=edited_by
)
+ return revision
def _question__apply_edit(
self,
@@ -1963,7 +1968,7 @@ class Post(models.Model):
else:
self.thread.make_public(recursive=False)
- self.__apply_edit(
+ revision = self.__apply_edit(
edited_at=edited_at,
edited_by=edited_by,
text=text,
@@ -1980,6 +1985,7 @@ class Post(models.Model):
last_activity_at=edited_at,
last_activity_by=edited_by
)
+ return revision
def apply_edit(self, *args, **kwargs):
#todo: unify this, here we have unnecessary indirection
@@ -2204,13 +2210,15 @@ class PostRevisionManager(models.Manager):
kwargs['summary'] = ''
author = kwargs['author']
+ post = kwargs['post']
moderate_email = False
if kwargs.get('email'):
from askbot.models.reply_by_email import emailed_content_needs_moderation
moderate_email = emailed_content_needs_moderation(kwargs['email'])
- needs_moderation = author.needs_moderation() or moderate_email
+ is_content = post.is_question() or post.is_answer() or post.is_comment()
+ needs_moderation = is_content and (author.needs_moderation() or moderate_email)
#0 revision is not shown to the users
if askbot_settings.CONTENT_MODERATION_MODE == 'premoderation' and needs_moderation:
@@ -2221,9 +2229,16 @@ class PostRevisionManager(models.Manager):
'revision': 0,
'summary': kwargs['summary'] or _('Suggested edit')
})
- revision = super(PostRevisionManager, self).create(*args, **kwargs)
+
+ #see if we have earlier revision with number 0
+ try:
+ pending_revs = post.revisions.filter(revision=0)
+ assert(len(pending_revs) == 1)
+ pending_revs.update(**kwargs)
+ revision = pending_revs[0]
+ except AssertionError:
+ revision = super(PostRevisionManager, self).create(*args, **kwargs)
else:
- post = kwargs['post']
kwargs['revision'] = post.get_latest_revision_number() + 1
revision = super(PostRevisionManager, self).create(*args, **kwargs)
@@ -2344,33 +2359,39 @@ class PostRevision(models.Model):
#Activity instance is the actual queue item
from askbot.models import Activity
- activity = Activity(
- user = self.author,
- content_object = self,
- activity_type = activity_type,
- question = self.get_origin_post()
- )
- activity.save()
- activity.add_recipients(self.post.get_moderators())
+ content_type = ContentType.objects.get_for_model(self)
+ #try
+ try:
+ activity = Activity.objects.get(
+ activity_type=activity_type,
+ object_id=self.id,
+ content_type=content_type
+ )
+ except Activity.DoesNotExist:
+ activity = Activity(
+ user = self.author,
+ content_object = self,
+ activity_type = activity_type,
+ question = self.get_origin_post()
+ )
+ activity.save()
+ activity.add_recipients(self.post.get_moderators())
- def should_notify_author_about_publishing(self, was_approved = False):
+ def should_notify_author_about_publishing(self, was_approved=False):
"""True if author should get email about making own post"""
- if self.by_email:
- schedule = askbot_settings.SELF_NOTIFY_EMAILED_POST_AUTHOR_WHEN
- if schedule == const.NEVER:
- return False
- elif schedule == const.FOR_FIRST_REVISION:
- return self.revision == 1
- elif schedule == const.FOR_ANY_REVISION:
- return True
- else:
- raise ValueError()
- else:
- #logic not implemented yet
- #the ``was_approved`` argument will be used here
- #schedule = askbot_settings.SELF_NOTIFY_WEB_POST_AUTHOR_WHEN
+ if was_approved and self.by_email == False:
return False
+ schedule = askbot_settings.SELF_NOTIFY_EMAILED_POST_AUTHOR_WHEN
+ if schedule == const.NEVER:
+ return False
+ elif schedule == const.FOR_FIRST_REVISION:
+ return self.revision == 1
+ elif schedule == const.FOR_ANY_REVISION:
+ return True
+ else:
+ raise ValueError()
+
def __unicode__(self):
return u'%s - revision %s of %s' % (self.post.post_type, self.revision, self.title)
@@ -2394,8 +2415,7 @@ class PostRevision(models.Model):
if is_multilingual:
request_language = get_language()
- if self.post.thread:
- activate_language(self.post.thread.language_code)
+ activate_language(self.post.language_code)
if self.post.is_question():
url = reverse('question_revisions', args = (self.post.id,))