f9de2d6ee5745abc1c101f9c227192a29166829e
[redakcja.git] / apps / catalogue / templatetags / document_list.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of MIL/PEER, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 from __future__ import absolute_import
7
8 from django.db.models import Q
9 from django import template
10 from django.utils.translation import ugettext_lazy as _
11 from catalogue.models import Document
12
13 register = template.Library()
14
15
16 _states = [
17         ('publishable', _('publishable'), Q(book___new_publishable=True)),
18         ('changed', _('changed'), Q(_changed=True)),
19         ('published', _('published'), Q(book___published=True)),
20         ('unpublished', _('unpublished'), Q(book___published=False)),
21         ('empty', _('empty'), Q(head=None)),
22     ]
23 _states_options = [s[:2] for s in _states]
24 _states_dict = dict([(s[0], s[2]) for s in _states])
25
26
27 @register.inclusion_tag('catalogue/book_list/book_list.html', takes_context=True)
28 def document_list(context, user=None, organization=None):
29     request = context['request']
30
31     # if user:
32     #     filters = {"user": user}
33     #     new_context = {"viewed_user": user}
34     # else:
35     #     filters = {}
36     #     new_context = {
37     #         "users": User.objects.annotate(
38     #             count=Count('chunk')).filter(count__gt=0).order_by(
39     #             '-count', 'last_name', 'first_name'),
40     #         "other_users": User.objects.annotate(
41     #             count=Count('chunk')).filter(count=0).order_by(
42     #             'last_name', 'first_name'),
43     #             }
44
45     docs = Document.objects.filter(deleted=False)
46     if user is not None:
47         docs = docs.filter(
48             Q(owner_user=user) | Q(owner_organization__membership__user=user) | Q(assigned_to=user)).distinct()
49     if organization is not None:
50         docs = docs.filter(owner_organization=organization)
51
52     new_context = {}
53     new_context.update({
54         # "filters": True,
55         "request": request,
56         "books": docs,
57         # "stages": Chunk.tag_model.objects.all(),
58         # "states": _states_options,
59     })
60
61     return new_context
62
63
64 @register.inclusion_tag('catalogue/book_list/book.html', takes_context=True)
65 def document_short_html(context, doc):
66     user = context['request'].user
67     if doc.owner_organization is not None:
68         am_owner = doc.owner_organization.is_member(user)
69     else:
70         am_owner = doc.owner_user == user
71     return {
72         'am_owner': am_owner,
73         'book': doc,
74     }