Browse Source

Made search view thread-safe and added date ordering to results.

Rafał Pitoń 11 years ago
parent
commit
f58c9a109b
1 changed files with 12 additions and 13 deletions
  1. 12 13
      misago/apps/search/views.py

+ 12 - 13
misago/apps/search/views.py

@@ -21,9 +21,6 @@ from misago.apps.search.forms import (QuickSearchForm, ForumsSearchForm,
                                       PrivateThreadsSearchForm, ReportsSearchForm)
 
 class ViewBase(object):
-    search_route = 'search'
-    search_form = None
-
     def check_acl(self):
         pass
 
@@ -141,7 +138,7 @@ class ViewBase(object):
         form = self.search_form(self.request.POST, request=self.request)
         try:
             if form.is_valid():
-                sqs = self.make_query(form.cleaned_data).query.load_all()[:120]
+                sqs = self.make_query(form.cleaned_data).query.load_all().order_by('-date')[:120]
                 results = []
                 search_weight = form.cleaned_data.get('search_weight')
                 for p in sqs:
@@ -195,6 +192,8 @@ class ViewBase(object):
         return obj(request, **kwargs)
 
     def __call__(self, request, **kwargs):
+        self.search_route = self.default_search_route
+        self.search_form = self.default_search_form
         try:
             self.request = request
             if request.user.is_crawler():
@@ -212,18 +211,18 @@ class ViewBase(object):
 
 
 class QuickSearchView(ViewBase):
-    search_route = 'search_quick'
-    search_form = QuickSearchForm
+    default_search_route = 'search_quick'
+    default_search_form = QuickSearchForm
 
 
 class SearchForumsView(ViewBase):
-    search_route = 'search_forums'
-    search_form = ForumsSearchForm
+    default_search_route = 'search_forums'
+    default_search_form = ForumsSearchForm
 
 
 class SearchPrivateThreadsView(ViewBase):
-    search_route = 'search_private_threads'
-    search_form = PrivateThreadsSearchForm
+    default_search_route = 'search_private_threads'
+    default_search_form = PrivateThreadsSearchForm
 
     def check_acl(self):
         if not self.request.acl.private_threads.can_participate():
@@ -231,8 +230,8 @@ class SearchPrivateThreadsView(ViewBase):
 
 
 class SearchReportsView(ViewBase):
-    search_route = 'search_reports'
-    search_form = ReportsSearchForm
+    default_search_route = 'search_reports'
+    default_search_form = ReportsSearchForm
 
     def check_acl(self):
         if not self.request.acl.reports.can_handle():
@@ -277,7 +276,7 @@ class SearchResultsView(object):
                                    'search_author': result.get('search_author'),
                                    'search_thread_titles': result.get('search_thread_titles'),
                                    'search_thread': result.get('search_thread'),
-                                   'results': Post.objects.filter(id__in=items).select_related('forum', 'thread', 'user')[pagination['start']:pagination['stop']],
+                                   'results': Post.objects.filter(id__in=items).select_related('forum', 'thread', 'user').order_by('-pk')[pagination['start']:pagination['stop']],
                                    'items_total': items_total,
                                    'pagination': pagination,
                                   },