Browse Source

Make changelog work as expected

l0ud 11 years ago
parent
commit
d1612f36bd

+ 32 - 3
misago/apps/threadtype/changelog.py

@@ -2,6 +2,7 @@ import difflib
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.template import RequestContext
+from django.utils import timezone
 from django.utils.translation import ugettext as _
 from misago import messages
 from misago.acl.exceptions import ACLError403, ACLError404
@@ -71,13 +72,17 @@ class ChangelogDiffBaseView(ChangelogBaseView):
     def dispatch(self, request, **kwargs):
         try:
             next = self.post.change_set.filter(id__gt=self.change.pk)[:1][0]
+            compare_to = next.post_content
         except IndexError:
             next = None
+            compare_to = self.post.post
         try:
             prev = self.post.change_set.filter(id__lt=self.change.pk).order_by('-id')[:1][0]
         except IndexError:
             prev = None
+		
         self.forum.closed = self.proxy.closed
+        
         return render_to_response('%ss/changelog_diff.html' % self.type_prefix,
                                   self._template_vars({
                                         'forum': self.forum,
@@ -89,7 +94,7 @@ class ChangelogDiffBaseView(ChangelogBaseView):
                                         'prev': prev,
                                         'message': request.messages.get_message('changelog'),
                                         'l': 1,
-                                        'diff': difflib.ndiff(self.change.post_content.splitlines(), self.post.post.splitlines()),
+                                        'diff': difflib.ndiff(self.change.post_content.splitlines(), compare_to.splitlines()),
                                       }),
                                   context_instance=RequestContext(request))
 
@@ -105,6 +110,29 @@ class ChangelogRevertBaseView(ChangelogDiffBaseView):
             and (self.change.post_content == self.post.post)):
             messages.error(request, _("No changes to revert."), 'changelog')
             return redirect(reverse('%s_changelog_diff' % self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'post': self.post.pk, 'change': self.change.pk}))
+        
+        self.post.edits += 1
+        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.change_set.create(
+                                    forum=self.forum,
+                                    thread=self.thread,
+                                    post=self.post,
+                                    user=request.user,
+                                    user_name=request.user.username,
+                                    user_slug=request.user.username_slug,
+                                    date=timezone.now(),
+                                    ip=request.session.get_ip(self.request),
+                                    agent=request.META.get('HTTP_USER_AGENT'),
+                                    reason=_("Reverted to the state before %(date)s.") % {'date': reldate(self.change.date).lower()},
+                                    size=len(self.change.post_content),
+                                    change=len(self.change.post_content) - len(self.post.post),
+                                    thread_name_old=self.thread.name if self.change.thread_name_old != self.thread.name and self.change.thread_name_old != None else None,
+                                    thread_name_new=self.change.thread_name_old if self.change.thread_name_old != self.thread.name else None,
+                                    post_content=self.post.post,
+                                    )
 
         if self.change.thread_name_old and self.change.thread_name_old != self.thread.name:
             self.thread.name = self.change.thread_name_old
@@ -119,7 +147,8 @@ class ChangelogRevertBaseView(ChangelogDiffBaseView):
         if self.change.post_content != self.post.post:
             self.post.post = self.change.post_content
             md, self.post.post_preparsed = post_markdown(self.change.post_content)
-            self.post.save(force_update=True)
 
-        messages.success(request, _("Post has been reverted to state from %(date)s.") % {'date': reldate(self.change.date).lower()}, 'threads_%s' % self.post.pk)
+        self.post.save(force_update=True)
+        
+        messages.success(request, _("Post has been reverted to the state before %(date)s.") % {'date': reldate(self.change.date).lower()}, 'threads_%s' % self.post.pk)
         return self.redirect_to_post(self.post)

+ 1 - 1
templates/cranefly/private_threads/changelog_diff.html

@@ -84,7 +84,7 @@
 
 
 {% macro pager() %}
-{% if prev or prev %}
+{% if prev or next %}
 <div class="pagination pull-left">
   <ul>
     {% if prev %}<li><a href="{{ url('private_thread_changelog_diff', thread=thread.pk, slug=thread.slug, post=post.pk, change=prev.pk) }}"><i class="icon-chevron-left"></i> {{ prev.date|reldate }}</a></li>{% endif %}

+ 1 - 1
templates/cranefly/reports/changelog_diff.html

@@ -84,7 +84,7 @@
 
 
 {% macro pager() %}
-{% if prev or prev %}
+{% if prev or next %}
 <div class="pagination pull-left">
   <ul>
     {% if prev %}<li><a href="{{ url('report_changelog_diff', thread=thread.pk, slug=thread.slug, post=post.pk, change=prev.pk) }}"><i class="icon-chevron-left"></i> {{ prev.date|reldate }}</a></li>{% endif %}

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

@@ -84,7 +84,7 @@
 
 
 {% macro pager() %}
-{% if prev or prev %}
+{% if prev or next %}
 <div class="pagination pull-left">
   <ul>
     {% if prev %}<li><a href="{{ url('thread_changelog_diff', thread=thread.pk, slug=thread.slug, post=post.pk, change=prev.pk) }}"><i class="icon-chevron-left"></i> {{ prev.date|reldate }}</a></li>{% endif %}