Просмотр исходного кода

Dont automerge to hidden posts.

Rafał Pitoń 12 лет назад
Родитель
Сommit
70cd29df42
1 измененных файлов с 137 добавлено и 136 удалено
  1. 137 136
      misago/apps/threadtype/posting/newreply.py

+ 137 - 136
misago/apps/threadtype/posting/newreply.py

@@ -1,137 +1,138 @@
-from datetime import timedelta
-from django.utils import timezone
-from django.utils.translation import ugettext as _
-from misago.conf import settings
-from misago.markdown import post_markdown
-from misago.models import Post
-from misago.monitor import monitor, UpdatingMonitor
-from misago.utils.datesformats import date
-from misago.utils.translation import ugettext_lazy
-from misago.apps.threadtype.posting.base import PostingBaseView
-from misago.apps.threadtype.posting.forms import NewReplyForm
-
-class NewReplyBaseView(PostingBaseView):
-    action = 'new_reply'
-    allow_quick_reply = True
-    form_type = NewReplyForm
-
-    def set_context(self):
-        self.set_thread_context()
-        self.request.acl.threads.allow_reply(self.proxy, self.thread)
-        if self.kwargs.get('quote'):
-            self.quote = Post.objects.get(id=self.kwargs.get('quote'))
-            self.request.acl.threads.allow_post_view(self.request.user, self.thread, self.quote)
-
-    def form_initial_data(self):
-        if self.quote:
-            return {'post': self.quote.quote()}
-        return {}
-
-    def post_form(self, form):
-        now = timezone.now()
-        moderation = (not self.request.acl.threads.acl[self.forum.pk]['can_approve']
-                      and self.request.acl.threads.acl[self.forum.pk]['can_start_threads'] == 1)
-
-        self.thread.previous_last = self.thread.last_post
-        self.md, post_preparsed = post_markdown(form.cleaned_data['post'])
-
-        # Count merge diff and see if we are merging
-        merge_diff = (now - self.thread.last)
-        merge_diff = (merge_diff.days * 86400) + merge_diff.seconds
-        if (settings.post_merge_time
-                and merge_diff < (settings.post_merge_time * 60)
-                and self.thread.last_poster_id == self.request.user.id
-                and self.thread.last_post.moderated == moderation):
-            merged = True
-            self.post = self.thread.last_post
-            self.post.date = now
-            self.post.post = '%s\n\n%s' % (self.post.post, form.cleaned_data['post'])
-            self.md, self.post.post_preparsed = post_markdown(self.post.post)
-            self.post.save(force_update=True)
-        else:
-            # Create new post
-            merged = False
-            self.post = Post.objects.create(
-                                            forum=self.forum,
-                                            thread=self.thread,
-                                            user=self.request.user,
-                                            user_name=self.request.user.username,
-                                            ip=self.request.session.get_ip(self.request),
-                                            agent=self.request.META.get('HTTP_USER_AGENT'),
-                                            post=form.cleaned_data['post'],
-                                            post_preparsed=post_preparsed,
-                                            date=now,
-                                            moderated=moderation,
-                                        )
-
-        # Update thread data and score?
-        if not moderation:
-            self.thread.new_last_post(self.post)
-
-        if not merged:
-            if not moderation:
-                self.thread.replies += 1
-            else:
-                self.thread.replies_moderated += 1
-
-            # Increase thread score
-            if self.thread.last_poster_id != self.request.user.pk:
-                self.thread.score += settings.thread_ranking_reply_score
-
-        # Update forum and monitor
-        if not moderation and not merged:
-            with UpdatingMonitor() as cm:
-                monitor.increase('posts')
-            self.forum.posts += 1
-            self.forum.new_last_thread(self.thread)
-            self.forum.save(force_update=True)
-        
-        # Reward user for posting new reply?
-        if not moderation and not merged and (not self.request.user.last_post
-                or self.request.user.last_post < timezone.now() - timedelta(seconds=settings.score_reward_new_post_cooldown)):
-            self.request.user.score += settings.score_reward_new_post
-
-        # Update user
-        if not moderation and not merged:
-            self.request.user.posts += 1
-        self.request.user.last_post = now
-        self.request.user.save(force_update=True)
-
-        # Set thread weight
-        if 'thread_weight' in form.cleaned_data:
-            self.thread.weight = form.cleaned_data['thread_weight']
-
-        # Set "closed" checkpoint, either due to thread limit or posters wish
-        if (settings.thread_length > 0
-                and not merged and not moderation and not self.thread.closed
-                and self.thread.replies >= settings.thread_length):
-            self.thread.closed = True
-            self.thread.set_checkpoint(self.request, 'limit')
-        elif 'close_thread' in form.cleaned_data and form.cleaned_data['close_thread']:
-            self.thread.closed = not self.thread.closed
-            if self.thread.closed:
-                self.thread.set_checkpoint(self.request, 'closed')
-            else:
-                self.thread.set_checkpoint(self.request, 'opened')
-
-        # Save updated thread
-        self.thread.save(force_update=True)
-
-        # Mute quoted user?
-        if not (self.quote and self.quote.user_id and not merged
-                and self.quote.user_id != self.request.user.pk
-                and not self.quote.user.is_ignoring(self.request.user)):
-            self.quote = None
-
-    # E-mail users about new response
-    def email_watchers(self, notified_users):
-        emailed = self.thread.email_watchers(self.request, self.type_prefix, self.post)
-        for user in emailed:
-            if not user in notified_users:
-                if user.pk == self.thread.start_poster_id:
-                    alert = user.alert(ugettext_lazy("%(username)s has replied to your thread %(thread)s").message)
-                else:
-                    alert = user.alert(ugettext_lazy("%(username)s has replied to thread %(thread)s that you are watching").message)
-                alert.profile('username', self.request.user)
-                alert.post('thread', self.type_prefix, self.thread, self.post)
+from datetime import timedelta
+from django.utils import timezone
+from django.utils.translation import ugettext as _
+from misago.conf import settings
+from misago.markdown import post_markdown
+from misago.models import Post
+from misago.monitor import monitor, UpdatingMonitor
+from misago.utils.datesformats import date
+from misago.utils.translation import ugettext_lazy
+from misago.apps.threadtype.posting.base import PostingBaseView
+from misago.apps.threadtype.posting.forms import NewReplyForm
+
+class NewReplyBaseView(PostingBaseView):
+    action = 'new_reply'
+    allow_quick_reply = True
+    form_type = NewReplyForm
+
+    def set_context(self):
+        self.set_thread_context()
+        self.request.acl.threads.allow_reply(self.proxy, self.thread)
+        if self.kwargs.get('quote'):
+            self.quote = Post.objects.get(id=self.kwargs.get('quote'))
+            self.request.acl.threads.allow_post_view(self.request.user, self.thread, self.quote)
+
+    def form_initial_data(self):
+        if self.quote:
+            return {'post': self.quote.quote()}
+        return {}
+
+    def post_form(self, form):
+        now = timezone.now()
+        moderation = (not self.request.acl.threads.acl[self.forum.pk]['can_approve']
+                      and self.request.acl.threads.acl[self.forum.pk]['can_start_threads'] == 1)
+
+        self.thread.previous_last = self.thread.last_post
+        self.md, post_preparsed = post_markdown(form.cleaned_data['post'])
+
+        # Count merge diff and see if we are merging
+        merge_diff = (now - self.thread.last)
+        merge_diff = (merge_diff.days * 86400) + merge_diff.seconds
+        if (settings.post_merge_time
+                and merge_diff < (settings.post_merge_time * 60)
+                and self.thread.last_poster_id == self.request.user.id
+                and self.thread.last_post.moderated == moderation
+                and (not self.thread.last_post.deleted or self.thread.last_post_id == self.thread.start_post_id)):
+            merged = True
+            self.post = self.thread.last_post
+            self.post.date = now
+            self.post.post = '%s\n\n%s' % (self.post.post, form.cleaned_data['post'])
+            self.md, self.post.post_preparsed = post_markdown(self.post.post)
+            self.post.save(force_update=True)
+        else:
+            # Create new post
+            merged = False
+            self.post = Post.objects.create(
+                                            forum=self.forum,
+                                            thread=self.thread,
+                                            user=self.request.user,
+                                            user_name=self.request.user.username,
+                                            ip=self.request.session.get_ip(self.request),
+                                            agent=self.request.META.get('HTTP_USER_AGENT'),
+                                            post=form.cleaned_data['post'],
+                                            post_preparsed=post_preparsed,
+                                            date=now,
+                                            moderated=moderation,
+                                        )
+
+        # Update thread data and score?
+        if not moderation:
+            self.thread.new_last_post(self.post)
+
+        if not merged:
+            if not moderation:
+                self.thread.replies += 1
+            else:
+                self.thread.replies_moderated += 1
+
+            # Increase thread score
+            if self.thread.last_poster_id != self.request.user.pk:
+                self.thread.score += settings.thread_ranking_reply_score
+
+        # Update forum and monitor
+        if not moderation and not merged:
+            with UpdatingMonitor() as cm:
+                monitor.increase('posts')
+            self.forum.posts += 1
+            self.forum.new_last_thread(self.thread)
+            self.forum.save(force_update=True)
+
+        # Reward user for posting new reply?
+        if not moderation and not merged and (not self.request.user.last_post
+                or self.request.user.last_post < timezone.now() - timedelta(seconds=settings.score_reward_new_post_cooldown)):
+            self.request.user.score += settings.score_reward_new_post
+
+        # Update user
+        if not moderation and not merged:
+            self.request.user.posts += 1
+        self.request.user.last_post = now
+        self.request.user.save(force_update=True)
+
+        # Set thread weight
+        if 'thread_weight' in form.cleaned_data:
+            self.thread.weight = form.cleaned_data['thread_weight']
+
+        # Set "closed" checkpoint, either due to thread limit or posters wish
+        if (settings.thread_length > 0
+                and not merged and not moderation and not self.thread.closed
+                and self.thread.replies >= settings.thread_length):
+            self.thread.closed = True
+            self.thread.set_checkpoint(self.request, 'limit')
+        elif 'close_thread' in form.cleaned_data and form.cleaned_data['close_thread']:
+            self.thread.closed = not self.thread.closed
+            if self.thread.closed:
+                self.thread.set_checkpoint(self.request, 'closed')
+            else:
+                self.thread.set_checkpoint(self.request, 'opened')
+
+        # Save updated thread
+        self.thread.save(force_update=True)
+
+        # Mute quoted user?
+        if not (self.quote and self.quote.user_id and not merged
+                and self.quote.user_id != self.request.user.pk
+                and not self.quote.user.is_ignoring(self.request.user)):
+            self.quote = None
+
+    # E-mail users about new response
+    def email_watchers(self, notified_users):
+        emailed = self.thread.email_watchers(self.request, self.type_prefix, self.post)
+        for user in emailed:
+            if not user in notified_users:
+                if user.pk == self.thread.start_poster_id:
+                    alert = user.alert(ugettext_lazy("%(username)s has replied to your thread %(thread)s").message)
+                else:
+                    alert = user.alert(ugettext_lazy("%(username)s has replied to thread %(thread)s that you are watching").message)
+                alert.profile('username', self.request.user)
+                alert.post('thread', self.type_prefix, self.thread, self.post)
                 alert.save_all()