diff options
Diffstat (limited to 'askbot/models/post.py')
-rw-r--r-- | askbot/models/post.py | 72 |
1 files changed, 47 insertions, 25 deletions
diff --git a/askbot/models/post.py b/askbot/models/post.py index 18d3ea13..cd45387f 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -510,7 +510,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 @@ -1853,7 +1853,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 +1863,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 +1902,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 +1920,7 @@ class Post(models.Model): last_activity_at=edited_at, last_activity_by=edited_by ) + return revision def _question__apply_edit( self, @@ -1963,7 +1967,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 +1984,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 @@ -2223,7 +2228,15 @@ 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: kwargs['revision'] = post.get_latest_revision_number() + 1 revision = super(PostRevisionManager, self).create(*args, **kwargs) @@ -2345,14 +2358,23 @@ 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): """True if author should get email about making own post""" |