Auth+cache fixess
[wolnelektury.git] / src / catalogue / templatetags / catalogue_tags.py
index 947fbf2..263f12c 100644 (file)
@@ -10,8 +10,8 @@ from django.conf import settings
 from django import template
 from django.template import Node, Variable, Template, Context
 from django.core.urlresolvers import reverse
 from django import template
 from django.template import Node, Variable, Template, Context
 from django.core.urlresolvers import reverse
-from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
 from django.utils.cache import add_never_cache_headers
 from django.utils.cache import add_never_cache_headers
+from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
 
 from ssify import ssi_variable
 from django.utils.translation import ugettext as _
 
 from ssify import ssi_variable
@@ -19,27 +19,12 @@ from ssify import ssi_variable
 from catalogue.helpers import get_audiobook_tags
 from catalogue.models import Book, BookMedia, Fragment, Tag, Source
 from catalogue.constants import LICENSES
 from catalogue.helpers import get_audiobook_tags
 from catalogue.models import Book, BookMedia, Fragment, Tag, Source
 from catalogue.constants import LICENSES
+from paypal.rest import user_is_subscribed
 from picture.models import Picture
 
 register = template.Library()
 
 
 from picture.models import Picture
 
 register = template.Library()
 
 
-class RegistrationForm(UserCreationForm):
-    def as_ul(self):
-        """Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."""
-        return self._html_output(
-            u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>',
-            '</li>', u' %s', False)
-
-
-class LoginForm(AuthenticationForm):
-    def as_ul(self):
-        """Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."""
-        return self._html_output(
-            u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>',
-            '</li>', u' %s', False)
-
-
 def iterable(obj):
     try:
         iter(obj)
 def iterable(obj):
     try:
         iter(obj)
@@ -73,7 +58,7 @@ def simple_title(tags):
 
 @register.simple_tag
 def book_title(book, html_links=False):
 
 @register.simple_tag
 def book_title(book, html_links=False):
-    return book.pretty_title(html_links)
+    return mark_safe(book.pretty_title(html_links))
 
 
 @register.simple_tag
 
 
 @register.simple_tag
@@ -152,7 +137,7 @@ def book_tree(book_list, books_by_parent):
         ) for book in book_list)
 
     if text:
         ) for book in book_list)
 
     if text:
-        return "<ol>%s</ol>" % text
+        return mark_safe("<ol>%s</ol>" % text)
     else:
         return ''
 
     else:
         return ''
 
@@ -165,14 +150,14 @@ def audiobook_tree(book_list, books_by_parent):
     ) for book in book_list)
 
     if text:
     ) for book in book_list)
 
     if text:
-        return "<ol>%s</ol>" % text
+        return mark_safe("<ol>%s</ol>" % text)
     else:
         return ''
 
 
 @register.simple_tag
 def book_tree_texml(book_list, books_by_parent, depth=1):
     else:
         return ''
 
 
 @register.simple_tag
 def book_tree_texml(book_list, books_by_parent, depth=1):
-    return "".join("""
+    return mark_safe("".join("""
             <cmd name='hspace'><parm>%(depth)dem</parm></cmd>%(title)s
             <spec cat='align' /><cmd name="note"><parm>%(audiences)s</parm></cmd>
             <spec cat='align' /><cmd name="note"><parm>%(audiobook)s</parm></cmd>
             <cmd name='hspace'><parm>%(depth)dem</parm></cmd>%(title)s
             <spec cat='align' /><cmd name="note"><parm>%(audiences)s</parm></cmd>
             <spec cat='align' /><cmd name="note"><parm>%(audiobook)s</parm></cmd>
@@ -184,7 +169,7 @@ def book_tree_texml(book_list, books_by_parent, depth=1):
                 "audiences": ", ".join(book.audiences_pl()),
                 "audiobook": "audiobook" if book.has_media('mp3') else "",
                 "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
                 "audiences": ", ".join(book.audiences_pl()),
                 "audiobook": "audiobook" if book.has_media('mp3') else "",
                 "children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
-            } for book in book_list)
+            } for book in book_list))
 
 
 @register.simple_tag
 
 
 @register.simple_tag
@@ -197,7 +182,7 @@ def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, deli
         except ValueError:
             return s
 
         except ValueError:
             return s
 
-    return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s
+    return mark_safe("".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s
 %(children)s""" % {
                 "d": delimeter,
                 "preindent": delimeter * (depth - 1),
 %(children)s""" % {
                 "d": delimeter,
                 "preindent": delimeter * (depth - 1),
@@ -208,7 +193,7 @@ def book_tree_csv(author, book_list, books_by_parent, depth=1, max_depth=3, deli
                 "audiences": ", ".join(book.audiences_pl()),
                 "audiobook": "audiobook" if book.has_media('mp3') else "",
                 "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
                 "audiences": ", ".join(book.audiences_pl()),
                 "audiobook": "audiobook" if book.has_media('mp3') else "",
                 "children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
-            } for book in book_list)
+            } for book in book_list))
 
 
 @register.simple_tag
 
 
 @register.simple_tag
@@ -228,16 +213,6 @@ def all_editors(extra_info):
                      for person in sorted(set(editors)))
 
 
                      for person in sorted(set(editors)))
 
 
-@register.simple_tag
-def user_creation_form():
-    return RegistrationForm(prefix='registration').as_ul()
-
-
-@register.simple_tag
-def authentication_form():
-    return LoginForm(prefix='login').as_ul()
-
-
 @register.tag
 def catalogue_url(parser, token):
     bits = token.split_contents()
 @register.tag
 def catalogue_url(parser, token):
     bits = token.split_contents()
@@ -325,6 +300,7 @@ def tag_list(tags, choices=None, category=None, list_type='books'):
         other = other.filter(items__content_type=ct).distinct()
         if list_type == 'audiobooks':
             other = other.filter(id__in=get_audiobook_tags())
         other = other.filter(items__content_type=ct).distinct()
         if list_type == 'audiobooks':
             other = other.filter(id__in=get_audiobook_tags())
+        other = other.only('name', 'slug', 'category')
     else:
         other = []
 
     else:
         other = []
 
@@ -378,8 +354,10 @@ def plain_list(context, object_list, with_initials=True, by_author=False, choice
                 initial = obj.get_initial().upper()
             if initial != last_initial:
                 last_initial = initial
                 initial = obj.get_initial().upper()
             if initial != last_initial:
                 last_initial = initial
-                names.append((obj.author_str() if by_author else initial, []))
+                names.append((obj.author_unicode() if by_author else initial, []))
         names[-1][1].append(obj)
         names[-1][1].append(obj)
+    if names[0] == ('', []):
+        del names[0]
     return {
         'paged': paged,
         'names': names,
     return {
         'paged': paged,
         'names': names,
@@ -427,9 +405,9 @@ def related_books(context, instance, limit=6, random=1, taken=0):
 
 
 @register.simple_tag
 
 
 @register.simple_tag
-def download_audio(book, daisy=True):
+def download_audio(book, daisy=True, mp3=True):
     links = []
     links = []
-    if book.has_media('mp3'):
+    if mp3 and book.has_media('mp3'):
         links.append("<a href='%s'>%s</a>" % (
             reverse('download_zip_mp3', args=[book.slug]), BookMedia.formats['mp3'].name))
     if book.has_media('ogg'):
         links.append("<a href='%s'>%s</a>" % (
             reverse('download_zip_mp3', args=[book.slug]), BookMedia.formats['mp3'].name))
     if book.has_media('ogg'):
@@ -438,7 +416,7 @@ def download_audio(book, daisy=True):
     if daisy and book.has_media('daisy'):
         for dsy in book.get_media('daisy'):
             links.append("<a href='%s'>%s</a>" % (dsy.file.url, BookMedia.formats['daisy'].name))
     if daisy and book.has_media('daisy'):
         for dsy in book.get_media('daisy'):
             links.append("<a href='%s'>%s</a>" % (dsy.file.url, BookMedia.formats['daisy'].name))
-    return "".join(links)
+    return mark_safe("".join(links))
 
 
 @register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html")
 
 
 @register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html")
@@ -515,3 +493,13 @@ def strip_tag(html, tag_name):
     # docelowo może być warto zainstalować BeautifulSoup do takich rzeczy
     import re
     return re.sub(r"<.?%s\b[^>]*>" % tag_name, "", html)
     # docelowo może być warto zainstalować BeautifulSoup do takich rzeczy
     import re
     return re.sub(r"<.?%s\b[^>]*>" % tag_name, "", html)
+
+
+@register.filter
+def status(book, user):
+    if not book.preview:
+        return 'open'
+    elif user_is_subscribed(user):
+        return 'preview'
+    else:
+        return 'closed'