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