X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/69191eddb9e4221d964a7e5b044ff7c5dfe38315..c6db46d42f0a6b9dbd5abb6ce2be58fe306752b6:/apps/social/templatetags/social_tags.py?ds=sidebyside diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py index e78f20f0a..d6d3f7110 100755 --- a/apps/social/templatetags/social_tags.py +++ b/apps/social/templatetags/social_tags.py @@ -2,6 +2,7 @@ # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from random import randint from django import template from catalogue.models import Book from social.models import Cite @@ -12,20 +13,47 @@ register = template.Library() register.filter('likes', likes) +@register.assignment_tag(takes_context=True) +def choose_cite(context, ctx=None): + """Choose a cite for main page, for book or for set of tags.""" + try: + request = context['request'] + assert request.user.is_staff + assert 'choose_cite' in request.GET + cite = Cite.objects.get(pk=request.GET['choose_cite']) + except AssertionError, Cite.DoesNotExist: + if ctx is None: + cites = Cite.objects.all() + elif isinstance(ctx, Book): + cites = ctx.cite_set.all() + if not cites.exists(): + cites = cites_for_tags([ctx.book_tag()]) + else: + cites = cites_for_tags(ctx) + stickies = cites.filter(sticky=True) + count = stickies.count() + if count: + cite = stickies[randint(0, count - 1)] + else: + count = cites.count() + if count: + cite = cites[randint(0, count - 1)] + else: + cite = None + return cite + + @register.inclusion_tag('social/cite_promo.html') -def cite_promo(ctx=None, fallback=False): - """Choose""" - if ctx is None: - cites = Cite.objects.all() - elif isinstance(ctx, Book): - cites = ctx.cite_set.all() - if not cites.exists(): - cites = cites_for_tags([ctx.book_tag()]) - else: - cites = cites_for_tags(ctx) +def render_cite(cite): + return { + 'cite': cite, + } + +@register.inclusion_tag('social/cite_promo.html', takes_context=True) +def cite_promo(context, ctx=None, fallback=False): return { - 'cite': cites.order_by('?')[0] if cites.exists() else None, + 'cite': choose_cite(context, ctx), 'fallback': fallback, 'ctx': ctx, }