use strict xml validator
[redakcja.git] / apps / catalogue / templatetags / book_list.py
index 15654be..f7e7047 100755 (executable)
@@ -71,10 +71,13 @@ def foreign_filter(qs, value, filter_field, model, model_field='slug', unset='-'
         return qs.filter(**{filter_field: obj})
 
 
-def search_filter(qs, value, filter_field):
+def search_filter(qs, value, filter_fields):
     if not value:
         return qs
-    return qs.filter(**{"%s__icontains" % filter_field: value})
+    q = Q(**{"%s__icontains" % filter_fields[0]: value})
+    for field in filter_fields[1:]:
+        q |= Q(**{"%s__icontains" % field: value})
+    return qs.filter(q)
 
 
 _states = [
@@ -100,13 +103,16 @@ def document_list_filter(request, **kwargs):
 
     chunks = chunks.order_by('book__title', 'book', 'number')
 
+    if not request.user.is_authenticated():
+        chunks = chunks.filter(book__public=True)
+
     state = arg_or_GET('status')
     if state in _states_dict:
         chunks = chunks.filter(_states_dict[state])
 
     chunks = foreign_filter(chunks, arg_or_GET('user'), 'user', User, 'username')
     chunks = foreign_filter(chunks, arg_or_GET('stage'), 'stage', Chunk.tag_model, 'slug')
-    chunks = search_filter(chunks, arg_or_GET('title'), 'book__title')
+    chunks = search_filter(chunks, arg_or_GET('title'), ['book__title', 'title'])
     return chunks
 
 
@@ -124,6 +130,7 @@ def book_list(context, user=None):
                 '-count', 'last_name', 'first_name')}
 
     new_context.update({
+        "filters": True,
         "request": request,
         "books": ChunksList(document_list_filter(request, **filters)),
         "stages": Chunk.tag_model.objects.all(),
@@ -131,4 +138,3 @@ def book_list(context, user=None):
     })
 
     return new_context
-