Browse Source

Refactored posting process

Rafał Pitoń 10 years ago
parent
commit
160e0e3f5f

+ 1 - 1
misago/conf/defaults.py

@@ -172,7 +172,7 @@ MISAGO_MARKUP_EXTENSIONS = ()
 
 
 MISAGO_POSTING_MIDDLEWARE = (
-    'misago.threads.forms.reply.ReplyFormMiddleware',
+    'misago.threads.posting.reply.ReplyFormMiddleware',
 )
 
 

+ 1 - 81
misago/threads/forms/reply.py

@@ -1,14 +1,9 @@
-from django.db.models import F
 from django.utils.translation import ugettext_lazy as _, ungettext
 
 from misago.conf import settings
 from misago.core import forms
 from misago.core.validators import validate_sluggable
-from misago.markup import Editor, common_flavour
-
-from misago.threads.checksums import update_post_checksum
-from misago.threads.forms.posting import (EditorFormsetMiddleware,
-                                          START, REPLY, EDIT)
+from misago.markup import common_flavour
 
 
 class ReplyForm(forms.Form):
@@ -120,78 +115,3 @@ class ThreadForm(ReplyForm):
 
 class PrefixedThreadForm(ThreadForm):
     pass
-
-
-class ReplyFormMiddleware(EditorFormsetMiddleware):
-    def make_form(self):
-        initial_data = {'title': self.thread.title, 'post': self.post.post}
-
-        if self.mode == START:
-            if self.request.method == 'POST':
-                form = ThreadForm(self.thread, self.post, self.request.POST)
-            else:
-                form = ThreadForm(self.thread, self.post, initial=initial_data)
-        else:
-            if self.request.method == 'POST':
-                form = ReplyForm(self.post, self.request.POST)
-            else:
-                form = ReplyForm(self.post, initial=initial_data)
-
-        form.post_editor = Editor(form['post'])
-        return form
-
-    def pre_save(self, form):
-        self.parsing_result.update(form.parsing_result)
-
-    def save(self, form):
-        # if we are starting new thread, create empty model
-        if self.mode == START:
-            self.thread.set_title(form.cleaned_data['title'])
-            self.thread.starter_name = '-'
-            self.thread.starter_slug = '-'
-            self.thread.last_poster_name = '-'
-            self.thread.last_poster_slug = '-'
-            self.thread.started_on = self.datetime
-            self.thread.last_post_on = self.datetime
-            self.thread.save()
-
-        # make changes/set data on post
-        self.post.updated_on = self.datetime
-        if self.mode == EDIT:
-            self.post.last_editor_name = self.user
-            self.post.poster_name = self.user.username
-            self.post.poster_slug = self.user.slug
-        else:
-            self.post.thread = self.thread
-            self.post.poster = self.user
-            self.post.poster_name = self.user.username
-            self.post.poster_ip = self.request._misago_real_ip
-            self.post.posted_on = self.datetime
-
-        self.post.post_checksum = update_post_checksum(self.post)
-        self.post.save()
-
-        # Update thread
-        if self.mode == START:
-            self.forum.threads += 1
-            self.thread.set_first_post(self.post)
-
-        if self.mode != EDIT:
-            self.thread.set_last_post(self.post)
-        if self.mode != REPLY:
-            self.thread.replies += 1
-        self.thread.save()
-
-        # update forum
-        if self.mode != EDIT:
-            self.forum.set_last_thread(self.thread)
-            self.forum.posts += 1
-            self.forum.save()
-
-        # update poster
-        if self.mode == START:
-            self.user.threads = F('threads') + 1
-
-        if self.mode != EDIT:
-            self.user.posts = F('posts') + 1
-        self.user.save(update_fields=['threads', 'posts'])

+ 3 - 7
misago/threads/forms/posting.py → misago/threads/posting/__init__.py

@@ -1,3 +1,6 @@
+"""
+Posting process implementation
+"""
 from importlib import import_module
 
 from django.utils import timezone
@@ -21,13 +24,6 @@ class InterruptChanges(Exception):
 
 
 class EditorFormset(object):
-    """
-    This is gigantozaurus that handles entire posting process
-
-    * It stores context in which we are acting
-    * It inits forms for posting view
-    *
-    """
     def __init__(self, **kwargs):
         self.errors = []
 

+ 83 - 0
misago/threads/posting/reply.py

@@ -0,0 +1,83 @@
+from django.db.models import F
+
+from misago.markup import Editor
+
+from misago.threads.checksums import update_post_checksum
+from misago.threads.forms.reply import (ReplyForm, ThreadForm,
+                                        PrefixedThreadForm)
+from misago.threads.posting import EditorFormsetMiddleware, START, REPLY, EDIT
+
+
+class ReplyFormMiddleware(EditorFormsetMiddleware):
+    def make_form(self):
+        initial_data = {'title': self.thread.title, 'post': self.post.post}
+
+        if self.mode == START:
+            if self.request.method == 'POST':
+                form = ThreadForm(self.thread, self.post, self.request.POST)
+            else:
+                form = ThreadForm(self.thread, self.post, initial=initial_data)
+        else:
+            if self.request.method == 'POST':
+                form = ReplyForm(self.post, self.request.POST)
+            else:
+                form = ReplyForm(self.post, initial=initial_data)
+
+        form.post_editor = Editor(form['post'])
+        return form
+
+    def pre_save(self, form):
+        self.parsing_result.update(form.parsing_result)
+
+    def save(self, form):
+        # if we are starting new thread, create empty model
+        if self.mode == START:
+            self.thread.set_title(form.cleaned_data['title'])
+            self.thread.starter_name = '-'
+            self.thread.starter_slug = '-'
+            self.thread.last_poster_name = '-'
+            self.thread.last_poster_slug = '-'
+            self.thread.started_on = self.datetime
+            self.thread.last_post_on = self.datetime
+            self.thread.save()
+
+        # make changes/set data on post
+        self.post.updated_on = self.datetime
+        if self.mode == EDIT:
+            self.post.last_editor_name = self.user
+            self.post.poster_name = self.user.username
+            self.post.poster_slug = self.user.slug
+        else:
+            self.post.thread = self.thread
+            self.post.poster = self.user
+            self.post.poster_name = self.user.username
+            self.post.poster_ip = self.request._misago_real_ip
+            self.post.posted_on = self.datetime
+
+        self.post.post_checksum = update_post_checksum(self.post)
+        self.post.save()
+
+        # Update thread
+        if self.mode == START:
+            self.forum.threads += 1
+            self.thread.set_first_post(self.post)
+
+        if self.mode != EDIT:
+            self.thread.set_last_post(self.post)
+        if self.mode != REPLY:
+            self.thread.replies += 1
+        self.thread.save()
+
+        # update forum
+        if self.mode != EDIT:
+            self.forum.set_last_thread(self.thread)
+            self.forum.posts += 1
+            self.forum.save()
+
+        # update poster
+        if self.mode == START:
+            self.user.threads = F('threads') + 1
+
+        if self.mode != EDIT:
+            self.user.posts = F('posts') + 1
+        self.user.save(update_fields=['threads', 'posts'])

+ 2 - 2
misago/threads/views/generic.py

@@ -12,8 +12,8 @@ from misago.forums.lists import get_forums_list, get_forum_path
 from misago.forums.models import Forum
 from misago.forums.permissions import allow_see_forum, allow_browse_forum
 
-from misago.threads.forms.posting import (InterruptChanges, EditorFormset,
-                                          START, REPLY, EDIT)
+from misago.threads.posting import (InterruptChanges, EditorFormset,
+                                    START, REPLY, EDIT)
 from misago.threads.models import Thread, Post
 from misago.threads.permissions import allow_see_thread, allow_start_thread