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

Bugfix and further refactoring in threads types

Ralfp 12 лет назад
Родитель
Сommit
34d8b10b97

+ 1 - 1
misago/apps/forumbase/mixins.py

@@ -25,7 +25,7 @@ class ValidateThreadNameMixin(object):
 
 
 class RedirectToPostMixin(object):
-    def redirect_to_post(self, link, post):
+    def _redirect_to_post(self, link, post):
         pagination = make_pagination(0, self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set).filter(id__lte=post.pk).count(), self.request.settings.posts_per_page)
         if pagination['total'] > 1:
             return redirect(reverse(link, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))

+ 4 - 0
misago/apps/forumbase/posting/__init__.py

@@ -0,0 +1,4 @@
+from misago.apps.forumbase.posting.newthread import NewThreadBaseView
+#from misago.apps.forumbase.posting.editthread import EditThreadBaseView
+#from misago.apps.forumbase.posting.newreply import NewReplyBaseView
+#from misago.apps.forumbase.posting.editreply import EditReplyBaseView

+ 2 - 0
misago/apps/forumbase/posting.py → misago/apps/forumbase/posting/base.py

@@ -59,6 +59,8 @@ class PostingBaseView(object):
                 else:
                     if form.is_valid():
                         self.post_form(form)
+                        self.watch_thread()
+                        return self.response()
                     else:
                         message = Message(form.non_field_errors()[0], 'error')
             else:

+ 0 - 0
misago/apps/forumbase/posting/editreply.py


+ 0 - 0
misago/apps/forumbase/posting/editthread.py


+ 0 - 0
misago/apps/threads/posting/forms.py → misago/apps/forumbase/posting/forms.py


+ 0 - 0
misago/apps/forumbase/posting/newreply.py


+ 6 - 25
misago/apps/threads/posting/newthread.py → misago/apps/forumbase/posting/newthread.py

@@ -1,27 +1,18 @@
+from datetime import timedelta
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.utils import timezone
 from django.utils.translation import ugettext as _
-from itertools import chain
-from misago.apps.forumbase.mixins import RedirectToPostMixin
-from misago.apps.forumbase.posting import PostingBaseView
+from misago.apps.forumbase.posting.base import PostingBaseView
+from misago.apps.forumbase.posting.forms import NewThreadForm
 from misago.markdown import post_markdown
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 from misago.utils.strings import slugify
-from misago.apps.threads.forms import NewThreadForm
-from misago.apps.threads.mixins import TypeMixin
 
-class NewThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
-    action = 'new_thread'
+class NewThreadBaseView(PostingBaseView):
     form_type = NewThreadForm
 
-    def set_context(self):
-        self.forum = Forum.objects.get(pk=self.kwargs.get('forum'), type='forum')
-        self.request.acl.forums.allow_forum_view(self.forum)
-        self.proxy = Forum.objects.parents_aware_forum(self.forum)
-        self.request.acl.threads.allow_new_threads(self.proxy)
-
     def post_form(self, form):
         now = timezone.now()
         moderation = (not self.request.acl.threads.acl[self.forum.pk]['can_approve']
@@ -61,7 +52,7 @@ class NewThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
 
         # Set thread status
         if 'close_thread' in form.cleaned_data:
-            self.thread.closed = True
+            self.thread.closed = form.cleaned_data['close_thread']
         if 'thread_weight' in form.cleaned_data:
             self.thread.weight = form.cleaned_data['thread_weight']
 
@@ -92,14 +83,4 @@ class NewThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
         # Notify mentioned
         if md.mentions:
             self.post.notify_mentioned(self.request, md.mentions)
-            self.post.save(force_update=True)
-
-        # Set thread watch status
-        self.watch_thread()
-
-        # Set flash and redirect user to his post
-        if moderation:
-            self.request.messages.set_flash(Message(_("New thread has been posted. It will be hidden from other members until moderator reviews it.")), 'success', 'threads')
-        else:
-            self.request.messages.set_flash(Message(_("New thread has been posted.")), 'success', 'threads')
-        return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
+            self.post.save(force_update=True)

+ 3 - 3
misago/apps/threads/list.py

@@ -12,9 +12,9 @@ class ThreadsListView(ThreadsListBaseView, ThreadsListModeration, TypeMixin):
 
     def threads_queryset(self):
         announcements = Forum.objects.special_model('announcements')
-        annos_global = announcements.thread_set.filter(deleted=False).filter(moderated=False)
-        annos_forum = self.request.acl.threads.filter_threads(self.request, self.forum, self.forum.thread_set).filter(weight=2)
-        rest = self.request.acl.threads.filter_threads(self.request, self.forum, self.forum.thread_set).filter(weight__lt=2)
+        annos_global = announcements.thread_set.filter(deleted=False).filter(moderated=False).order_by('-pk')
+        annos_forum = self.request.acl.threads.filter_threads(self.request, self.forum, self.forum.thread_set).filter(weight=2).order_by('-pk')
+        rest = self.request.acl.threads.filter_threads(self.request, self.forum, self.forum.thread_set).filter(weight__lt=2).order_by('-last')
 
         # Dont display threads by ignored users (unless they are important)
         if self.request.user.is_authenticated():

+ 36 - 0
misago/apps/threads/posting.py

@@ -0,0 +1,36 @@
+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
+from django.utils.translation import ugettext as _
+from misago.apps.forumbase.mixins import RedirectToPostMixin
+from misago.apps.forumbase.posting import NewThreadBaseView
+from misago.messages import Message
+from misago.models import Forum, Thread, Post
+from misago.apps.threads.mixins import TypeMixin
+
+class NewThreadView(NewThreadBaseView, TypeMixin):
+    action = 'new_thread'
+
+    def set_context(self):
+        self.forum = Forum.objects.get(pk=self.kwargs.get('forum'), type='forum')
+        self.request.acl.forums.allow_forum_view(self.forum)
+        self.proxy = Forum.objects.parents_aware_forum(self.forum)
+        self.request.acl.threads.allow_new_threads(self.proxy)
+
+    def response(self):
+        # Set flash and redirect user to his post
+        if self.post.moderated:
+            self.request.messages.set_flash(Message(_("New thread has been posted. It will be hidden from other members until moderator reviews it.")), 'success', 'threads')
+        else:
+            self.request.messages.set_flash(Message(_("New thread has been posted.")), 'success', 'threads')
+        return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
+
+
+class EditThreadView(NewThreadBaseView, TypeMixin):
+    pass
+
+
+class NewReplyView(NewThreadBaseView, TypeMixin):
+    pass
+
+class EditReplyView(NewThreadBaseView, TypeMixin):
+    pass

+ 0 - 4
misago/apps/threads/posting/__init__.py

@@ -1,4 +0,0 @@
-from misago.apps.threads.posting.newthread import NewThreadView
-from misago.apps.threads.posting.editthread import EditThreadView
-from misago.apps.threads.posting.newreply import NewReplyView
-from misago.apps.threads.posting.editreply import EditReplyView

+ 0 - 16
misago/apps/threads/posting/editreply.py

@@ -1,16 +0,0 @@
-from django.core.urlresolvers import reverse
-from django.shortcuts import redirect
-from django.utils import timezone
-from django.utils.translation import ugettext as _
-from itertools import chain
-from misago.apps.forumbase.mixins import RedirectToPostMixin
-from misago.apps.forumbase.posting import PostingBaseView
-from misago.markdown import post_markdown
-from misago.messages import Message
-from misago.models import Forum, Thread, Post
-from misago.utils.strings import slugify
-from misago.apps.threads.forms import NewThreadForm
-from misago.apps.threads.mixins import TypeMixin
-
-class EditReplyView(PostingBaseView, TypeMixin, RedirectToPostMixin):
-    pass

+ 0 - 16
misago/apps/threads/posting/editthread.py

@@ -1,16 +0,0 @@
-from django.core.urlresolvers import reverse
-from django.shortcuts import redirect
-from django.utils import timezone
-from django.utils.translation import ugettext as _
-from itertools import chain
-from misago.apps.forumbase.mixins import RedirectToPostMixin
-from misago.apps.forumbase.posting import PostingBaseView
-from misago.markdown import post_markdown
-from misago.messages import Message
-from misago.models import Forum, Thread, Post
-from misago.utils.strings import slugify
-from misago.apps.threads.forms import NewThreadForm
-from misago.apps.threads.mixins import TypeMixin
-
-class EditThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
-    pass

+ 0 - 16
misago/apps/threads/posting/newreply.py

@@ -1,16 +0,0 @@
-from django.core.urlresolvers import reverse
-from django.shortcuts import redirect
-from django.utils import timezone
-from django.utils.translation import ugettext as _
-from itertools import chain
-from misago.apps.forumbase.mixins import RedirectToPostMixin
-from misago.apps.forumbase.posting import PostingBaseView
-from misago.markdown import post_markdown
-from misago.messages import Message
-from misago.models import Forum, Thread, Post
-from misago.utils.strings import slugify
-from misago.apps.threads.forms import NewThreadForm
-from misago.apps.threads.mixins import TypeMixin
-
-class NewReplyView(PostingBaseView, TypeMixin, RedirectToPostMixin):
-    pass