Browse Source

WIP #410: Moved forum threads filter to mixin

Rafał Pitoń 11 years ago
parent
commit
fdf73efd5a
1 changed files with 52 additions and 49 deletions
  1. 52 49
      misago/threads/views/generic/forum.py

+ 52 - 49
misago/threads/views/generic/forum.py

@@ -51,6 +51,57 @@ class FilterThreadsMixin(object):
 
         return dicts
 
+    def get_available_filters(self, request, forum):
+        filters = []
+        if request.user.is_authenticated():
+            if forum.acl['can_see_all_threads']:
+                filters.append({
+                    'type': 'my-threads',
+                    'name': _("My threads"),
+                    'is_label': False,
+                })
+            if forum.acl['can_see_reports']:
+                filters.append({
+                    'type': 'reported',
+                    'name': _("With reported posts"),
+                    'is_label': False,
+                })
+            if forum.acl['can_review_moderated_content']:
+                filters.extend(({
+                    'type': 'moderated-threads',
+                    'name': _("Moderated threads"),
+                    'is_label': False,
+                },
+                {
+                    'type': 'moderated-posts',
+                    'name': _("With moderated posts"),
+                    'is_label': False,
+                }))
+        for prefix in forum.prefixes:
+            filters.append({
+                'type': prefix.slug,
+                'name': prefix.name,
+                'is_label': True,
+                'css_class': prefix.css_class,
+            })
+        return filters
+
+    def set_custom_filter(self, request, forum, queryset, filter_by):
+        if filter_by == 'my-threads':
+            return queryset.filter(starter_id=request.user.id)
+        elif filter_by == 'reported':
+            return queryset.filter(has_reported_posts=True)
+        elif filter_by == 'moderated-threads':
+            return queryset.filter(is_moderated=True)
+        elif filter_by == 'moderated-posts':
+            return queryset.filter(has_moderated_posts=True)
+        else:
+            for prefix in forum.prefixes:
+                if prefix.slug == filter_by:
+                    return queryset.filter(prefix_id=prefix.pk)
+            else:
+                return queryset
+
 
 class ForumView(FilterThreadsMixin, OrderThreadsMixin, ThreadsView):
     """
@@ -141,20 +192,7 @@ class ForumView(FilterThreadsMixin, OrderThreadsMixin, ThreadsView):
         return queryset
 
     def set_custom_filter(self, request, forum, queryset, filter_by):
-        if filter_by == 'my-threads':
-            return queryset.filter(starter_id=request.user.id)
-        elif filter_by == 'reported':
-            return queryset.filter(has_reported_posts=True)
-        elif filter_by == 'moderated-threads':
-            return queryset.filter(is_moderated=True)
-        elif filter_by == 'moderated-posts':
-            return queryset.filter(has_moderated_posts=True)
-        else:
-            for prefix in forum.prefixes:
-                if prefix.slug == filter_by:
-                    return queryset.filter(prefix_id=prefix.pk)
-            else:
-                return queryset
+        return queryset
 
     def get_threads_queryset(self, request, forum):
         return forum.thread_set.all().order_by('-last_post_id')
@@ -163,41 +201,6 @@ class ForumView(FilterThreadsMixin, OrderThreadsMixin, ThreadsView):
         message = "forum views have to define get_default_link_params"
         raise NotImplementedError(message)
 
-    def get_available_filters(self, request, forum):
-        filters = []
-        if request.user.is_authenticated():
-            if forum.acl['can_see_all_threads']:
-                filters.append({
-                    'type': 'my-threads',
-                    'name': _("My threads"),
-                    'is_label': False,
-                })
-            if forum.acl['can_see_reports']:
-                filters.append({
-                    'type': 'reported',
-                    'name': _("With reported posts"),
-                    'is_label': False,
-                })
-            if forum.acl['can_review_moderated_content']:
-                filters.extend(({
-                    'type': 'moderated-threads',
-                    'name': _("Moderated threads"),
-                    'is_label': False,
-                },
-                {
-                    'type': 'moderated-posts',
-                    'name': _("With moderated posts"),
-                    'is_label': False,
-                }))
-        for prefix in forum.prefixes:
-            filters.append({
-                'type': prefix.slug,
-                'name': prefix.name,
-                'is_label': True,
-                'css_class': prefix.css_class,
-            })
-        return filters
-
     def dispatch(self, request, *args, **kwargs):
         forum = self.get_forum(request, **kwargs)
         forum.prefixes = Prefix.objects.get_forum_prefixes(forum)