Browse Source

Bugfixes in search.

Rafał Pitoń 11 years ago
parent
commit
907b51433b

+ 21 - 3
misago/apps/search/forms.py

@@ -3,10 +3,11 @@ from django.utils.translation import ungettext_lazy, ugettext_lazy as _
 import floppyforms as forms
 from misago.forms import Form, ForumMultipleChoiceField
 from misago.models import Forum
+from misago.utils.strings import slugify
 
 class SearchFormBase(Form):
     search_query = forms.CharField(label=_("Search Phrases"), max_length=255)
-    search_thread_titles = forms.BooleanField(label=_("Search Thread Titles"), required=False)
+    search_thread_titles = forms.BooleanField(label=_("Limit Search to Thread Titles"), required=False)
     search_thread = forms.CharField(label=_("Thread Name or Link"),
                                     help_text=_("Limit search to specified thread by entering it's name or link here."),
                                     max_length=255,
@@ -18,8 +19,25 @@ class SearchFormBase(Form):
 
     def clean_search_query(self):
         data = self.cleaned_data['search_query']
-        if len(data) < 3:
-            raise forms.ValidationError(_("Search query should be at least 3 characters long."))
+        slug = slugify(data)
+        if len(slug) < 3:
+            raise forms.ValidationError(_("Search query has to contain at least 3 alpha-numerical characters."))
+        return data
+
+    def clean_search_thread(self):
+        data = self.cleaned_data['search_thread']
+        if data:
+            slug = slugify(data)
+            if len(slug) < 3:
+                raise forms.ValidationError(_("Thread name/link has to contain at least 3 alpha-numerical characters."))
+        return data
+
+    def clean_search_author(self):
+        data = self.cleaned_data['search_author']
+        if data:
+            slug = slugify(data)
+            if len(slug) < 3:
+                raise forms.ValidationError(_("Author name has to contain at least 3 alpha-numerical characters."))
         return data
 
     def clean(self):

+ 0 - 35
misago/apps/search/searchquery.py

@@ -1,35 +0,0 @@
-from haystack.inputs import AutoQuery
-from haystack.query import SearchQuerySet, RelatedSearchQuerySet
-from misago.acl.exceptions import ACLError403, ACLError404
-from misago.models import Forum, Thread, Post, User
-
-class MisagoSearchQuerySet(object):
-    def __init__(self, user, acl):
-        self.user = user
-        self.acl = acl
-
-    def search_in(self, target):
-        self.target = target
-
-        try:
-            self.allow_forum_search(target)
-        except AttributeError:
-            self.allow_thread_search(target)
-
-    def allow_forum_search(self, target):
-        raise Exception(dir(target))
-
-    def allow_thread_search(self, target):
-        pass
-
-    @property
-    def query(self):
-        try:
-            return self._searchquery
-        except AttributeError:
-            pass
-
-        sqs = SearchQuerySet()
-
-        self._searchquery = sqs
-        return self._searchquery

+ 2 - 2
misago/apps/search/views.py

@@ -31,9 +31,9 @@ class ViewBase(object):
         try:
             sqs = MisagoSearchQuerySet(self.request.user, self.request.acl)
             if self.search_route == 'search_private_threads':
-                sqs.in_forums([Forum.objects.special_pk('private_threads')])
+                sqs.allow_forum_search(Forum.objects.special_model('private_threads'))
             elif self.search_route == 'search_reports':
-                sqs.in_forums([Forum.objects.special_pk('reports')])
+                sqs.allow_forum_search(Forum.objects.special_model('reports'))
             else:
                 if search_data.get('search_forums'):
                     if search_data.get('search_forums_childs'):

+ 1 - 1
misago/search.py

@@ -139,7 +139,7 @@ class MisagoSearchQuerySet(object):
             if thread.pk in self._threads:
                 self._threads = [thread.pk]
             else:
-                raise ACLError404()
+                self._threads = [-1]
         self._threads = [thread.pk]
 
     def search_content(self, query):

+ 2 - 2
templates/cranefly/search/results.html

@@ -7,7 +7,7 @@
   <div class="search-results">
     {% if results %}
     <h2>
-      {% trans count=results|length, results=results|length|intcomma, query=query_string(search_query) %}Search for "{{ query }}" has returned one result:{% pluralize %}Search for "{{ query }}" has returned {{ results }} results:{% endtrans %}
+      {% trans count=items_total, results=items_total|intcomma, query=query_string(search_query) %}Search for "{{ query }}" has returned one result:{% pluralize %}Search for "{{ query }}" has returned {{ results }} results:{% endtrans %}
       <a href="{{ url(search_route) }}" class="btn btn-inverse pull-right"><i class="icon-search"></i> {% trans %}New Search{% endtrans %}</a>
     </h2>
     <div class="results-list">
@@ -41,7 +41,7 @@
 {%- endmacro %}
 
 {% macro forum(forum) -%}
-<a href="{{ url('forum', forum=forum.pk, slug=forum.slug) }}" class="forum-link">{{ forum.name }}</a>
+<a href="{{ url('forum', forum=forum.pk, slug=forum.slug) }}" class="forum-link">{{ forum }}</a>
 {%- endmacro %}
 
 {% macro username(post) -%}