src/egonomy/views.py
changeset 43 119cd616faa4
parent 41 92e530850200
child 45 ea2c1961a515
--- a/src/egonomy/views.py	Fri Feb 15 19:03:15 2013 +0100
+++ b/src/egonomy/views.py	Mon Feb 18 15:43:46 2013 +0100
@@ -9,6 +9,7 @@
 from egonomy.search_indexes import QueryParser
 from egonomy.search_indexes.paginator import SearchPaginator
 from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
+from haystack.query import RelatedSearchQuerySet
 import logging
 
 logger = logging.getLogger(__name__)
@@ -125,21 +126,43 @@
 
 
 def all_fragments(request):
-    
+        
     # Get the cur_page_nb number parameter if possible
     cur_page_nb = request.GET.get("page") or 1
     cur_page_nb = int(cur_page_nb)
-    
-    frg_list = Fragment.objects.all().order_by('pk').select_related('image', 'image__info', 'image__metadata','author')
+
+    search = None
+    nb_results = 1
+    if "search" in request.GET:
+        search = request.GET["search"]
+        field = "all"
+        if "field" in request.GET:
+            field = request.GET["field"]
+
+    frg_list = Fragment.objects.select_related('image', 'image__info', 'image__metadata','author')
     nb = getattr(settings,"IMAGES_PER_PAGE", 32)
-    paginator = Paginator(frg_list, nb)
+    if search:
+        if not field or field == 'all':
+            field = 'text'
+        qp = QueryParser(field)
+        res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all()
+        paginator = SearchPaginator(res, nb)
+    else:
+        frg_list = frg_list.order_by('pk').all()
+        paginator = Paginator(frg_list, nb)
+        
     try:
         results = paginator.page(cur_page_nb)
     except (EmptyPage, InvalidPage):
         results = paginator.page(paginator.num_pages)
+        
+    url_pagination = reverse("all_fragments")
+    if search:
+        url_pagination = url_pagination + "?search=" + search
+        
 
     return render_to_response("egonomy_all_fragments.html",
-                              {'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb},
+                              {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},
                               context_instance=RequestContext(request))