+# -*- coding: utf-8 -*-
from __future__ import absolute_import
-from re import split
from django.db.models import Q, Count
from django import template
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
-from catalogue.models import Chunk
+from catalogue.models import Chunk, Project
register = template.Library()
class ChunksList(object):
def __init__(self, chunk_qs):
- #self.chunk_qs = chunk_qs#.annotate(
- #book_length=Count('book__chunk')).select_related(
- #'book')#, 'stage__name',
- #'user')
+ # self.chunk_qs = chunk_qs#.annotate(
+ # book_length=Count('book__chunk')).select_related(
+ # 'book')#, 'stage__name',
+ # 'user')
self.chunk_qs = chunk_qs.select_related('book__hidden')
self.book_qs = chunk_qs.values('book_id')
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 = [
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 = foreign_filter(chunks, arg_or_GET('stage'), 'stage', Chunk.tag_model)
+ chunks = search_filter(chunks, arg_or_GET('title'), ['book__title', 'title'])
+ chunks = foreign_filter(chunks, arg_or_GET('project'), 'book__project', Project, 'pk')
return chunks
new_context = {"viewed_user": user}
else:
filters = {}
- new_context = {"users": User.objects.annotate(
+ new_context = {
+ "users": User.objects.annotate(
count=Count('chunk')).filter(count__gt=0).order_by(
- '-count', 'last_name', 'first_name')}
+ '-count', 'last_name', 'first_name'),
+ "other_users": User.objects.annotate(
+ count=Count('chunk')).filter(count=0).order_by(
+ 'last_name', 'first_name'),
+ }
new_context.update({
+ "filters": True,
"request": request,
"books": ChunksList(document_list_filter(request, **filters)),
"stages": Chunk.tag_model.objects.all(),
"states": _states_options,
+ "projects": Project.objects.all(),
})
return new_context
-