Browse Source

Edit reply action

Ralfp 12 years ago
parent
commit
e163ac01f1

+ 5 - 1
misago/apps/threads/posting.py

@@ -40,4 +40,8 @@ class NewReplyView(NewReplyBaseView, TypeMixin):
 
 
 class EditReplyView(EditReplyBaseView, TypeMixin):
-    pass
+    action = 'edit_reply'
+
+    def response(self):
+        self.request.messages.set_flash(Message(_("Your reply has been changed.")), 'success', 'threads_%s' % self.post.pk)
+        return self.redirect_to_post(self.post)

+ 4 - 4
misago/apps/threadtype/posting/base.py

@@ -5,7 +5,7 @@ from misago.apps.errors import error403, error404
 from misago.forms import FormLayout
 from misago.markdown import post_markdown
 from misago.messages import Message
-from misago.models import Forum, Thread, WatchedThread
+from misago.models import Forum, Thread, Post, WatchedThread
 from misago.apps.threadtype.base import ViewBase
 from misago.apps.threadtype.thread.forms import QuickReplyForm
 
@@ -34,8 +34,8 @@ class PostingBaseView(ViewBase):
                                     reason=form.cleaned_data['edit_reason'],
                                     size=len(self.post.post),
                                     change=len(self.post.post) - len(old_post),
-                                    thread_name_old=old_name if form.cleaned_data['thread_name'] != old_name else None,
-                                    thread_name_new=self.thread.name if form.cleaned_data['thread_name'] != old_name else None,
+                                    thread_name_old=old_name if 'thread_name' in form.cleaned_data and form.cleaned_data['thread_name'] != old_name else None,
+                                    thread_name_new=self.thread.name if 'thread_name' in form.cleaned_data and form.cleaned_data['thread_name'] != old_name else None,
                                     post_content=old_post,
                                     )
 
@@ -105,7 +105,7 @@ class PostingBaseView(ViewBase):
                         self.message = Message(form.non_field_errors()[0], 'error')
             else:
                 form = self.form_type(request=request, forum=self.forum, thread=self.thread, initial=self.form_initial_data())
-        except Forum.DoesNotExist:
+        except (Forum.DoesNotExist, Thread.DoesNotExist, Post.DoesNotExist):
             return error404(request)
         except ACLError403 as e:
             return error403(request, unicode(e))

+ 52 - 2
misago/apps/threadtype/posting/editreply.py

@@ -1,2 +1,52 @@
-class EditReplyBaseView(object):
-    pass
+from django.utils import timezone
+from misago.apps.threadtype.posting.base import PostingBaseView
+from misago.apps.threadtype.posting.forms import EditReplyForm
+from misago.markdown import post_markdown
+
+class EditReplyBaseView(PostingBaseView):
+    form_type = EditReplyForm
+
+    def set_context(self):
+        self.set_thread_context()
+        self.post = self.thread.post_set.get(id=self.kwargs.get('post'))
+        self.request.acl.threads.allow_post_view(self.request.user, self.thread, self.post)
+        self.request.acl.threads.allow_reply_edit(self.request.user, self.proxy, self.thread, self.post)
+
+    def form_initial_data(self):
+        return {
+                'weight': self.thread.weight,
+                'post': self.post.post,
+                }
+
+    def post_form(self, form):
+        now = timezone.now()
+        old_post = self.post.post
+
+        changed_thread = False
+        changed_post = old_post != form.cleaned_data['post']
+
+        if 'close_thread' in form.cleaned_data and form.cleaned_data['close_thread']:
+            self.thread.closed = not self.thread.closed
+            changed_thread = True
+            if self.thread.closed:
+                self.thread.last_post.set_checkpoint(self.request, 'closed')
+            else:
+                self.thread.last_post.set_checkpoint(self.request, 'opened')
+
+        if ('thread_weight' in form.cleaned_data and
+                form.cleaned_data['thread_weight'] != self.thread.weight):
+            self.thread.weight = form.cleaned_data['thread_weight']
+            changed_thread = True
+
+        if changed_thread:
+            self.thread.save(force_update=True)
+
+        if changed_post:
+            self.md, self.post.post_preparsed = post_markdown(self.request, form.cleaned_data['post'])
+            self.post.edits += 1
+            self.post.edit_date = now
+            self.post.edit_user = self.request.user
+            self.post.edit_user_name = self.request.user.username
+            self.post.edit_user_slug = self.request.user.username_slug
+            self.post.save(force_update=True)
+            self.record_edit(form, self.thread.name, old_post)

+ 2 - 5
misago/apps/threadtype/posting/editthread.py

@@ -27,7 +27,6 @@ class EditThreadBaseView(PostingBaseView):
 
         changed_thread = old_name != form.cleaned_data['thread_name']
         changed_post = old_post != form.cleaned_data['post']
-        changed_anything = changed_thread or changed_post
 
         if 'close_thread' in form.cleaned_data and form.cleaned_data['close_thread']:
             self.thread.closed = not self.thread.closed
@@ -48,15 +47,13 @@ class EditThreadBaseView(PostingBaseView):
             self.thread.save(force_update=True)
 
         if changed_post:
-            md, self.post.post_preparsed = post_markdown(self.request, form.cleaned_data['post'])
+            self.md, self.post.post_preparsed = post_markdown(self.request, form.cleaned_data['post'])
             self.post.edits += 1
             self.post.edit_date = now
             self.post.edit_user = self.request.user
             self.post.edit_user_name = self.request.user.username
             self.post.edit_user_slug = self.request.user.username_slug
-            if md.mentions:
-                post.notify_mentioned(self.request, md.mentions)
             self.post.save(force_update=True)
 
-        if changed_anything:
+        if changed_thread or changed_post:
             self.record_edit(form, old_name, old_post)

+ 1 - 1
misago/apps/threadtype/posting/forms.py

@@ -78,6 +78,6 @@ class NewReplyForm(PostingForm):
 
 class EditReplyForm(PostingForm):
     def finalize_form(self):
-        super(EditThreadForm, self).finalize_form()
+        super(EditReplyForm, self).finalize_form()
         self.fields['edit_reason'] = forms.CharField(max_length=255, required=False, help_text=_("Optional reason for editing this reply."))
         self.layout[0][1].append(('edit_reason', {'label': _("Edit Reason")}))

+ 1 - 1
templates/cranefly/base.html

@@ -8,7 +8,7 @@
     <link href="{{ STATIC_URL }}cranefly/css/cranefly.css" rel="stylesheet">{% block stylesheets %}{% endblock %}
     <link rel="shortcut icon" href="{{ STATIC_URL }}favicon.ico" />
   </head>
-  <body{% block body_class %}{% endblock %}>
+  <body itemscope itemtype="http://schema.org/WebPage"{% block body_class %}{% endblock %}>
   	{% block body %}{% endblock %}
 
   	<script src="{{ STATIC_URL }}cranefly/js/jquery-1.7.2.min.js"></script>

+ 1 - 1
templates/cranefly/category.html

@@ -14,7 +14,7 @@
 <div class="page-header header-primary">
   <div class="container">
     {{ messages_list(messages) }}
-    <ul class="breadcrumb">
+    <ul class="breadcrumb" {{ macros.itemprop_bread() }}>
       {{ self.breadcrumb() }}</li>
     </ul>
     <h1>{{ category.name }}</h1>

+ 5 - 1
templates/cranefly/macros.html

@@ -25,7 +25,7 @@
   </div>
 {%- endmacro %}
 
-{# Render single message #}
+{# Render icon #}
 {% macro draw_message_icon(message) -%}
   	<div class="alert-icon"><span><i class="icon-{% if message.type == 'error' -%}remove
   		{%- elif message.type == 'success' -%}ok
@@ -39,4 +39,8 @@
 {%- trans current_page=('<strong>' ~ pagination['page'] ~ '</strong>')|safe, pages=('<strong>' ~ pagination['total'] ~ '</strong>')|safe -%}
     Page {{ current_page }} of {{ pages }}
 {%- endtrans -%}
+{%- endmacro %}
+
+{% macro itemprop_bread() -%}
+itemprop="breadcrumb"
 {%- endmacro %}

+ 1 - 1
templates/cranefly/threads/list.html

@@ -15,7 +15,7 @@
 <div class="page-header header-primary">
   <div class="container">
     {{ messages_list(messages) }}
-    <ul class="breadcrumb">
+    <ul class="breadcrumb" {{ macros.itemprop_bread() }}>
       {{ self.breadcrumb() }}</li>
     </ul>
     <h1>{{ forum.name }}</h1>

+ 1 - 1
templates/cranefly/threads/thread.html

@@ -16,7 +16,7 @@
 <div class="page-header header-primary">
   <div class="container">
     {{ messages_list(messages) }}
-    <ul class="breadcrumb">
+    <ul class="breadcrumb" {{ macros.itemprop_bread() }}>
       {{ self.breadcrumb() }}</li>
     </ul>
     <h1>{{ thread.name }}</h1>