Prevented one form of DoS attack by limiting number of tags in query to 6.
[wolnelektury.git] / apps / catalogue / templatetags / catalogue_tags.py
index 51ee863..90cbec3 100644 (file)
@@ -37,6 +37,23 @@ def capfirst(text):
         return ''
 
 
+
+def simple_title(tags):
+    mapping = {
+        'author': u'Autor',
+        'theme': u'Motyw',
+        'epoch': u'Epoka',
+        'genre': u'Gatunek',
+        'kind': u'Rodzaj',
+        'set': u'Półka',
+    }
+    
+    title = []
+    for tag in tags:
+        title.append("%s: %s." % (mapping[tag.category], tag.name))
+    return ' '.join(title)
+
+
 @register.simple_tag
 def title_from_tags(tags):
     def split_tags(tags):
@@ -45,6 +62,9 @@ def title_from_tags(tags):
             result[tag.category] = tag
         return result
     
+    # TODO: Remove this after adding flection mechanism
+    return simple_title(tags)
+    
     class Flection(object):
         def get_case(self, name, flection):
             return name
@@ -112,7 +132,7 @@ def authentication_form():
 def breadcrumbs(tags, search_form=True):
     from catalogue.forms import SearchForm
     context = {'tag_list': tags}
-    if search_form:
+    if search_form and len(tags) < 6:
         context['search_form'] = SearchForm(tags=tags)
     return context
 
@@ -196,3 +216,19 @@ def tag_list(tags, choices=None):
         one_tag = tags[0]
     return locals()
 
+
+@register.inclusion_tag('catalogue/folded_tag_list.html')
+def folded_tag_list(tags, choices=None):
+    if choices is None:
+        choices = []
+    some_tags_hidden = False
+    tag_count = len(tags)
+    
+    if tag_count == 1:
+        one_tag = tags[0]
+    else:
+        shown_tags = [tag for tag in tags if tag.main_page]
+        if tag_count > len(shown_tags):
+            some_tags_hidden = True
+    return locals()
+