X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/391b7a7b21da0ae7aae68826cfee514c8ea7eca9..8132fc186eb0c5fd02c86828c3a4735754296d02:/apps/catalogue/templatetags/catalogue.py diff --git a/apps/catalogue/templatetags/catalogue.py b/apps/catalogue/templatetags/catalogue.py index 7d138ffa..07c5cf9d 100644 --- a/apps/catalogue/templatetags/catalogue.py +++ b/apps/catalogue/templatetags/catalogue.py @@ -1,14 +1,9 @@ from __future__ import absolute_import -from django.db.models import Count, Q from django.core.urlresolvers import reverse -from django.contrib.comments.models import Comment -from django.template.defaultfilters import stringfilter from django import template from django.utils.translation import ugettext as _ -from catalogue.models import Book, Chunk, BookPublishRecord - register = template.Library() @@ -29,122 +24,23 @@ def main_tabs(context): tabs = [] user = context['user'] - if user.is_authenticated(): - tabs.append(Tab('my', _('My page'), reverse("catalogue_user"))) + tabs.append(Tab('my', _('My page'), reverse("catalogue_user"))) + tabs.append(Tab('activity', _('Activity'), reverse("catalogue_activity"))) tabs.append(Tab('all', _('All'), reverse("catalogue_document_list"))) + tabs.append(Tab('images', _('Images'), reverse("catalogue_image_list"))) tabs.append(Tab('users', _('Users'), reverse("catalogue_users"))) - tabs.append(Tab('create', _('Add'), reverse("catalogue_create_missing"))) - tabs.append(Tab('upload', _('Upload'), reverse("catalogue_upload"))) - - if user.is_staff: - tabs.append(Tab('admin', _('Admin'), reverse("admin:index"))) - - return {"tabs": tabs, "active_tab": active} - - -class WallItem(object): - title = '' - summary = '' - url = '' - timestamp = '' - user = None - email = '' - - def __init__(self, tag): - self.tag = tag - - def get_email(self): - if self.user: - return self.user.email - else: - return self.email + if user.has_perm('catalogue.add_book'): + tabs.append(Tab('create', _('Add'), reverse("catalogue_create_missing"))) + tabs.append(Tab('upload', _('Upload'), reverse("catalogue_upload"))) -def changes_wall(user, max_len): - qs = Chunk.change_model.objects.filter(revision__gt=-1).order_by('-created_at') - qs = qs.select_related('author', 'tree', 'tree__book__title') - if user: - qs = qs.filter(Q(author=user) | Q(tree__user=user)) - qs = qs[:max_len] - for item in qs: - tag = 'stage' if item.tags.count() else 'change' - chunk = item.tree - w = WallItem(tag) - w.title = chunk.pretty_name() - w.summary = item.description - w.url = reverse('wiki_editor', - args=[chunk.book.slug, chunk.slug]) + '?diff=%d' % item.revision - w.timestamp = item.created_at - w.user = item.author - w.email = item.author_email - yield w + tabs.append(Tab('cover', _('Covers'), reverse("cover_image_list"))) + return {"tabs": tabs, "active_tab": active} -# TODO: marked for publishing - - -def published_wall(user, max_len): - qs = BookPublishRecord.objects.select_related('book__title') - if user: - # TODO: published my book - qs = qs.filter(Q(user=user)) - qs = qs[:max_len] - for item in qs: - w = WallItem('publish') - w.title = item.book.title - #w.summary = - w.url = chunk.book.get_absolute_url() - yield w - - -def comments_wall(user, max_len): - qs = Comment.objects.filter(is_public=True).select_related().order_by('-submit_date') - if user: - # TODO: comments concerning my books - qs = qs.filter(Q(user=user)) - qs = qs[:max_len] - for item in qs: - w = WallItem('comment') - w.title = item.content_object - w.summary = item.comment - w.url = item.content_object.get_absolute_url() - w.timestamp = item.submit_date - w.user = item.user - w.email = item.user_email - yield w - - -def big_wall(max_len, *args): - """ - Takes some WallItem iterators and zips them into one big wall. - Input iterators must already be sorted by timestamp. - """ - subwalls = [] - for w in args: - try: - subwalls.append([next(w), w]) - except StopIteration: - pass - - while max_len and subwalls: - i, next_item = max(enumerate(subwalls), key=lambda x: x[1][0].timestamp) - yield next_item[0] - max_len -= 1 - try: - next_item[0] = next(next_item[1]) - except StopIteration: - del subwalls[i] +@register.filter +def nice_name(user): + return user.get_full_name() or user.username -@register.inclusion_tag("catalogue/wall.html", takes_context=True) -def wall(context, user=None, max_len=10): - print user - return { - "request": context['request'], - "STATIC_URL": context['STATIC_URL'], - "wall": big_wall(max_len, - changes_wall(user, max_len), - published_wall(user, max_len), - comments_wall(user, max_len), - )}