Browse Source

Different fixes and tweaks.

Ralfp 12 years ago
parent
commit
8157c322fb

+ 1 - 1
misago/acl/permissions/reports.py

@@ -106,7 +106,7 @@ def cleanup(acl, perms, forums):
                 acl.threads.acl[forum]['can_edit_threads_posts'] = True
                 acl.threads.acl[forum]['can_delete_posts'] = 2
                 acl.threads.acl[forum]['can_delete_attachments'] = True
-                acl.threads.acl[forum]['can_delete_checkpoints'] = True
+                acl.threads.acl[forum]['can_delete_checkpoints'] = 2
                 acl.threads.acl[forum]['can_see_deleted_checkpoints'] = True
             if perm['can_delete_reports'] > acl.threads.acl[forum]['can_delete_threads']:
                 acl.threads.acl[forum]['can_delete_threads'] = perm['can_delete_reports']

+ 16 - 3
misago/apps/reports/posting.py

@@ -7,7 +7,20 @@ from misago.models import Forum, Thread, Post
 from misago.apps.reports.mixins import TypeMixin
 from misago.apps.reports.forms import EditThreadForm, NewReplyForm, EditReplyForm
 
-class EditThreadView(EditThreadBaseView, TypeMixin):
+class SetStateCheckpointMixin(object):
+    def post_form(self, form):
+        self.thread.original_weight = self.thread_weight
+        super(SetStateCheckpointMixin, self).post_form(form)
+        if self.thread.original_weight != self.thread_weight:
+            if self.thread.original_weight == 2:
+                self.request.monitor.decrease('reported_posts')
+            if self.thread.weight == 1:
+                self.thread.last_post.set_checkpoint(self.request, 'resolved')
+            if self.thread.weight == 0:
+                self.thread.last_post.set_checkpoint(self.request, 'bogus')
+
+
+class EditThreadView(SetStateCheckpointMixin, EditThreadBaseView, TypeMixin):
     form_type = EditThreadForm
 
     def response(self):
@@ -15,7 +28,7 @@ class EditThreadView(EditThreadBaseView, TypeMixin):
         return redirect(reverse('report', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
 
 
-class NewReplyView(NewReplyBaseView, TypeMixin):
+class NewReplyView(SetStateCheckpointMixin, NewReplyBaseView, TypeMixin):
     form_type = NewReplyForm
 
     def response(self):
@@ -23,7 +36,7 @@ class NewReplyView(NewReplyBaseView, TypeMixin):
         return self.redirect_to_post(self.post)
 
 
-class EditReplyView(EditReplyBaseView, TypeMixin):
+class EditReplyView(SetStateCheckpointMixin, EditReplyBaseView, TypeMixin):
     form_type = EditReplyForm
     
     def response(self):

+ 1 - 0
misago/apps/threadtype/delete.py

@@ -130,6 +130,7 @@ class DeleteReplyBaseView(DeleteHideBaseView):
                                                    self.thread, self.post, True)
 
     def delete(self):
+        self.post.pass_checkpoints()
         self.post.delete()
         self.thread.sync()
         self.thread.save(force_update=True)

+ 2 - 6
misago/apps/threadtype/posting/newreply.py

@@ -108,14 +108,10 @@ class NewReplyBaseView(PostingBaseView):
             self.post.save(force_update=True)
         elif 'close_thread' in form.cleaned_data and form.cleaned_data['close_thread']:
             self.thread.closed = not self.thread.closed
-            if merged:
-                checkpoint_post = self.post
-            else:
-                checkpoint_post = self.thread.previous_last
             if self.thread.closed:
-                checkpoint_post.set_checkpoint(self.request, 'closed')
+                self.post.set_checkpoint(self.request, 'closed')
             else:
-                checkpoint_post.set_checkpoint(self.request, 'opened')
+                self.post.set_checkpoint(self.request, 'opened')
             checkpoint_post.save(force_update=True)
 
         # Save updated thread

+ 9 - 1
misago/models/forummodel.py

@@ -192,13 +192,21 @@ class Forum(MPTTModel):
            return unicode(_('Root Category'))
         return unicode(self.name)
 
-    def forum_url(self):
+    @property
+    def url(self):
         if self.special == 'private_threads':
            reverse('private_threads')
         if self.special == 'reports':
            reverse('reports')
         return reverse('forum', kwargs={'forum': self.pk, 'slug': self.slug})
 
+    def thread_url(self, thread, route=None):
+        route_prefix = 'thread'
+        if self.special:
+            route_prefix = self.special[0:-1]
+        link = '%s_%s' % (route_prefix, route) if route else route_prefix
+        return reverse(link, kwargs={'thread': thread.pk, 'slug': thread.slug})
+
     def set_description(self, description):
         self.description = description.strip()
         self.description_preparsed = ''

+ 12 - 0
misago/models/postmodel.py

@@ -102,6 +102,18 @@ class Post(models.Model):
                                        old_forum_slug=(forum.slug if forum else None),
                                        )
             
+    def previous(self):
+        return self.thread.post_set.filter(merge__lte=self.merge).exclude(id=self.pk).order_by('-merge', '-date')[:1][0]
+
+    def pass_checkpoints(self):
+        if self.checkpoints:
+            prev = self.previous()
+            self.checkpoints = False
+            self.checkpoint_set.update(post=prev)
+            if not prev.checkpoints:
+                prev.checkpoints = True
+                prev.save(force_update=True)
+
     def notify_mentioned(self, request, thread_type, users):
         from misago.acl.builder import acl
         from misago.acl.exceptions import ACLError403, ACLError404

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

@@ -136,7 +136,7 @@
 {%- endmacro %}
 
 {% macro report_forum(thread) -%}
-<a href="{{ thread.report_forum.forum_url() }}" class="forum-link">{{ thread.report_forum }}</a>
+<a href="{{ thread.report_forum.url }}" class="forum-link">{{ thread.report_forum }}</a>
 {%- endmacro %}
 
 {% macro pager() %}

+ 6 - 12
templates/cranefly/watched.html

@@ -39,14 +39,14 @@
       <div class="row-fluid">
         <div class="span7">
           {% if thread.is_read %}
-          <a href="{% url 'thread_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-last tooltip-top" title="{% trans %}Click to see last post{% endtrans %}"><i class="icon-asterisk"></i></a>
+          <a href="{{ thread_url(thread, 'new') }}" class="thread-icon thread-icon-last tooltip-top" title="{% trans %}Click to see last post{% endtrans %}"><i class="icon-asterisk"></i></a>
           {% else %}
-          <a href="{% url 'thread_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-new tooltip-top" title="{% trans %}Click to see first unread post{% endtrans %}"><i class="icon-fire"></i></a>
+          <a href="{{ thread_url(thread, 'new') }}" class="thread-icon thread-icon-new tooltip-top" title="{% trans %}Click to see first unread post{% endtrans %}"><i class="icon-fire"></i></a>
           {% endif %}
 
           {{ macros.thread_flags(thread) }}
 
-          <a href="{% url 'thread' thread=thread.pk, slug=thread.slug %}" class="thread-name">{{ thread.name }}</a>
+          <a href="{{ thread_url(thread) }}" class="thread-name">{{ thread.name }}</a>
 
           <div class="thread-details">
             {% trans user=thread_starter(thread), forum=thread_forum(thread), start=thread.start|reltimesince|low %}by {{ user }} in {{ forum }} {{ start }}{% endtrans %}
@@ -164,15 +164,9 @@ thread
 {% if thread.start_poster_id %}<a href="{% url 'user' user=thread.start_poster_id, username=thread.start_poster_slug %}" class="user-link">{{ thread.start_poster_name }}</a>{% else %}{{ thread.start_poster_name }}{% endif %}
 {%- endmacro %}
 
-{% macro thread_forum(thread) -%}{% filter trim %}
-{% if thread.forum_id == private_threads.pk %}
-<a href="{% url 'private_threads' %}" class="forum-link">{% trans %}Private Threads{% endtrans %}</a>
-{% elif thread.forum_id == reports.pk %}
-TODO!
-{% else %}
-<a href="{% url 'forum' forum=thread.forum_id, slug=thread.forum.slug %}" class="forum-link">{{ thread.forum.name }}</a>
-{% endif%}
-{% endfilter %}{%- endmacro %}
+{% macro thread_forum(thread) -%}
+<a href="{{ thread.forum.url }}" class="forum-link">{{ thread.forum }}</a>
+{%- endmacro %}
 
 {% macro thread_reply(thread) -%}
 {% if thread.last_poster_id %}<a href="{% url 'user' user=thread.last_poster_id, username=thread.last_poster_slug %}" class="user-link">{{ thread.last_poster_name }}</a>{% else %}{{ thread.last_poster_name }}{% endif %}