Browse Source

Bugfix and further refactoring in threads types

Ralfp 12 years ago
parent
commit
34d8b10b97

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

@@ -25,7 +25,7 @@ class ValidateThreadNameMixin(object):
 
 
 
 
 class RedirectToPostMixin(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)
         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:
         if pagination['total'] > 1:
             return redirect(reverse(link, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
             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:
                 else:
                     if form.is_valid():
                     if form.is_valid():
                         self.post_form(form)
                         self.post_form(form)
+                        self.watch_thread()
+                        return self.response()
                     else:
                     else:
                         message = Message(form.non_field_errors()[0], 'error')
                         message = Message(form.non_field_errors()[0], 'error')
             else:
             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.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from django.utils import timezone
 from django.utils import timezone
 from django.utils.translation import ugettext as _
 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.markdown import post_markdown
 from misago.messages import Message
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
 from misago.utils.strings import slugify
 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
     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):
     def post_form(self, form):
         now = timezone.now()
         now = timezone.now()
         moderation = (not self.request.acl.threads.acl[self.forum.pk]['can_approve']
         moderation = (not self.request.acl.threads.acl[self.forum.pk]['can_approve']
@@ -61,7 +52,7 @@ class NewThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
 
 
         # Set thread status
         # Set thread status
         if 'close_thread' in form.cleaned_data:
         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:
         if 'thread_weight' in form.cleaned_data:
             self.thread.weight = form.cleaned_data['thread_weight']
             self.thread.weight = form.cleaned_data['thread_weight']
 
 
@@ -92,14 +83,4 @@ class NewThreadView(PostingBaseView, TypeMixin, RedirectToPostMixin):
         # Notify mentioned
         # Notify mentioned
         if md.mentions:
         if md.mentions:
             self.post.notify_mentioned(self.request, 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):
     def threads_queryset(self):
         announcements = Forum.objects.special_model('announcements')
         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)
         # Dont display threads by ignored users (unless they are important)
         if self.request.user.is_authenticated():
         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