Browse Source

Guests search.

Ralfp 12 years ago
parent
commit
6390d5258e
2 changed files with 35 additions and 3 deletions
  1. 28 1
      misago/apps/search/forms.py
  2. 7 2
      misago/apps/search/views.py

+ 28 - 1
misago/apps/search/forms.py

@@ -31,6 +31,13 @@ class QuickSearchForm(Form):
 
 
     def clean(self):
     def clean(self):
         cleaned_data = super(QuickSearchForm, self).clean()
         cleaned_data = super(QuickSearchForm, self).clean()
+        if self.request.user.is_authenticated():
+            self.check_flood_user()
+        if self.request.user.is_anonymous():
+            self.check_flood_guest()
+        return cleaned_data
+
+    def check_flood_user(self):
         if self.request.user.last_search:
         if self.request.user.last_search:
             diff = timezone.now() - self.request.user.last_search
             diff = timezone.now() - self.request.user.last_search
             diff = diff.seconds + (diff.days * 86400)
             diff = diff.seconds + (diff.days * 86400)
@@ -45,4 +52,24 @@ class QuickSearchForm(Form):
                         wait_for) % {
                         wait_for) % {
                             'seconds': wait_for,
                             'seconds': wait_for,
                         })
                         })
-        return cleaned_data
+
+    def check_flood_guest(self):
+        if not self.request.session.matched:
+            raise forms.ValidationError(_("Search requires enabled cookies in order to work."))
+        
+        if self.request.session.get('last_search'):
+            diff = timezone.now() - self.request.session.get('last_search')
+            diff = diff.seconds + (diff.days * 86400)
+            wait_for = self.request.acl.search.search_cooldown() - diff
+            if wait_for > 0:
+                if wait_for < 5:
+                    raise forms.ValidationError(_("You can't perform one search so quickly after another. Please wait a moment and try again."))
+                else:
+                    raise forms.ValidationError(ungettext(
+                            "You can't perform one search so quickly after another. Please wait %(seconds)d second and try again.",
+                            "You can't perform one search so quickly after another. Please wait %(seconds)d seconds and try again.",
+                        wait_for) % {
+                            'seconds': wait_for,
+                        })
+
+

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

@@ -54,8 +54,13 @@ def do_search(request, queryset, search_route=None):
                 return users_list(request)
                 return users_list(request)
             sqs = RelatedSearchQuerySet().auto_query(form.cleaned_data['search_query']).order_by('-id').load_all()
             sqs = RelatedSearchQuerySet().auto_query(form.cleaned_data['search_query']).order_by('-id').load_all()
             sqs = sqs.load_all_queryset(Post, queryset.filter(deleted=False).filter(moderated=False).select_related('thread', 'forum'))[:120]
             sqs = sqs.load_all_queryset(Post, queryset.filter(deleted=False).filter(moderated=False).select_related('thread', 'forum'))[:120]
-            request.user.last_search = timezone.now()
-            request.user.save(force_update=True)
+
+            if request.user.is_authenticated():
+                request.user.last_search = timezone.now()
+                request.user.save(force_update=True)
+            if request.user.is_anonymous():
+                request.session['last_search'] = timezone.now()
+            
             if not sqs:
             if not sqs:
                 raise SearchException(_("Search returned no results. Change search query and try again."))
                 raise SearchException(_("Search returned no results. Change search query and try again."))
             request.session['%s_result' % search_route] = {
             request.session['%s_result' % search_route] = {