diff --git a/apps/dynamic_search/managers.py b/apps/dynamic_search/managers.py index db0c99d111..0806712b45 100644 --- a/apps/dynamic_search/managers.py +++ b/apps/dynamic_search/managers.py @@ -15,21 +15,6 @@ from dynamic_search.conf.settings import RECENT_COUNT class RecentSearchManager(Manager): def add_query_for_user(self, search_view):#user, url, hits): query_dict = parse_qs(unquote_plus(smart_str(urlparse(search_view.request.get_full_path()).query))) - print 'query_dict', query_dict - print 'serial', dumps(query_dict) - - #parsed_query = urlparse.parse_qs(query) - #for key, value in parsed_query.items(): - # parsed_query[key] = ' '.join(value)# - - #if 'q=' in query: - # # Is a simple query - # if not parsed_query.get('q'): - # # Don't store empty simple searches - # return - # else: - # # Cleanup query string and only store the q parameter - # parsed_query = {'q': parsed_query['q']} if query_dict and not isinstance(search_view.request.user, AnonymousUser): # If the URL query has at least one variable with a value @@ -40,6 +25,9 @@ class RecentSearchManager(Manager): for recent_to_delete in to_delete: recent_to_delete.delete() + def get_for_user(self, user): + return [entry for entry in self.model.objects.filter(user=user) if entry.get_query()] + class IndexableObjectManager(Manager): def get_indexables(self, datetime=None): diff --git a/apps/dynamic_search/models.py b/apps/dynamic_search/models.py index f0e29408fb..bcb1eb0fa9 100644 --- a/apps/dynamic_search/models.py +++ b/apps/dynamic_search/models.py @@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _ from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic from django.utils.simplejson import loads +from django.utils.http import urlencode from .managers import RecentSearchManager, IndexableObjectManager from .api import registered_search_dict @@ -30,28 +31,31 @@ class RecentSearch(models.Model): objects = RecentSearchManager() def __unicode__(self): + return self.form_string() + + def form_string(self): + query = self.get_query() if self.is_advanced(): return u'%s (%s)' % (self.get_query(), self.hits) else: - return u'%s (%s)' % (self.get_query().get('q'), self.hits) + return u'%s (%s)' % (u' '.join(self.get_query().get('q')), self.hits) def save(self, *args, **kwargs): self.datetime_created = datetime.datetime.now() super(RecentSearch, self).save(*args, **kwargs) - #def readable_query(self): - # return self. - - #def url(self): - # view = 'results' if self.is_advanced() else 'search' - # return '%s?%s' % (reverse(view), self.query) - def get_query(self): - return loads(self.query) + try: + return loads(self.query) + except ValueError: + return {} def is_advanced(self): return 'q' not in self.get_query() + def get_absolute_url(self): + return '?'.join([reverse('search'), urlencode(self.get_query(), doseq=True)]) + class Meta: ordering = ('-datetime_created',) verbose_name = _(u'recent search') diff --git a/apps/dynamic_search/templatetags/search_tags.py b/apps/dynamic_search/templatetags/search_tags.py index 555c7a7c87..9874169d26 100644 --- a/apps/dynamic_search/templatetags/search_tags.py +++ b/apps/dynamic_search/templatetags/search_tags.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.core.urlresolvers import reverse from django.template import Library from django.utils.translation import ugettext as _ -from dynamic_search.forms import SearchForm -from dynamic_search.models import RecentSearch -from dynamic_search.conf.settings import RECENT_COUNT +from ..forms import SearchForm +from ..models import RecentSearch +from ..conf.settings import RECENT_COUNT register = Library() @@ -25,18 +27,21 @@ def search_form(context): @register.inclusion_tag('generic_subtemplate.html', takes_context=True) def recent_searches_template(context): - recent_searches = RecentSearch.objects.filter(user=context['user']) - context.update({ - 'request': context['request'], - 'STATIC_URL': context['STATIC_URL'], - 'side_bar': True, - 'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT, - 'paragraphs': [ - u'%(text)s' % { - 'text': rs, - 'url': reverse('search'), - 'icon': 'zoom_in' if rs.is_advanced() else 'zoom', - } for rs in recent_searches - ] - }) - return context + try: + recent_searches = RecentSearch.objects.get_for_user(user=context['user']) + context.update({ + 'request': context['request'], + 'STATIC_URL': context['STATIC_URL'], + 'side_bar': True, + 'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT, + 'paragraphs': [ + u'%(text)s' % { + 'text': recent_search, + 'url': recent_search.get_absolute_url(), + 'icon': 'zoom_in' if recent_search.is_advanced() else 'zoom', + } for recent_search in recent_searches + ] + }) + return context + except Exception, e: + print 'EEEEEEEEEEEE', e