Added:
/trunk/pirate-politics/pirate_core/templatetags/tag_helpers.py
=======================================
--- /dev/null
+++ /trunk/pirate-politics/pirate_core/templatetags/tag_helpers.py Mon Jan
17 12:40:18 2011
@@ -0,0 +1,91 @@
+from django import template
+from django import forms
+from django.http import HttpResponseRedirect
+import datetime
+from django.contrib.contenttypes.models import ContentType
+from tagging.models import Tag, TaggedItem
+from pirate_issues.models import Issue, Solution
+from pirate_deliberation.models import Argument
+
+from pirate_core import HttpRedirectException, namespace_get, FormMixin,
template_for_model
+
+from customtags.decorators import block_decorator
+register = template.Library()
+block = block_decorator(register)
+
+get_namespace = namespace_get('pp_tag')
+
+
+@block
+def pp_get_tags_for_object(context, nodelist, *args, **kwargs):
+ '''
+ This block tag can create or process forms to get tags.
+ Usage is as follows:
+
+ '''
+
+ context.push()
+ namespace = get_namespace(context)
+
+ obj = kwargs.get('object',None)
+
+ try: tags = Tag.objects.get_for_object(obj)
+ except: tags = []
+
+ if str(ContentType.objects.get_for_model(obj.__class__)) ==
u'solution':
+ tags1 = Tag.objects.get_for_object(obj.issue)
+ tags2 = []
+
+ elif str(ContentType.objects.get_for_model(obj.__class__)) ==
u'argument':
+ tags1 = Tag.objects.get_for_object(obj.parent.issue)
+ tags2 = Tag.objects.get_for_object(obj.parent)
+ else:
+ tags1 = []
+ tags2 = []
+
+ namespace['tags'] = tags
+ namespace['tags1'] = tags1
+ namespace['tags2'] = tags2
+ output = nodelist.render(context)
+ context.pop()
+ return output
+
+
+@block
+def pp_tag_form(context, nodelist, *args, **kwargs):
+ '''
+ This block tag can create or process forms either to create or to
modify arguments.
+ Usage is as follows:
+
+ {% pp_tag_form POST=request.POST path=request.path
object=pp-issue.issue %}
+ Do stuff with {{ pp_tag.form }}.
+ {% endpp_tag_form %}
+ '''
+
+ context.push()
+ namespace = get_namespace(context)
+
+ obj = kwargs.get('object',None)
+ POST = kwargs.get('POST',None)
+ path = kwargs.get('path',None)
+
+ if POST and POST.get("form_id") == "pp_tag_form":
+ form = TagForm(POST)
+ #new_arg = form.save(commit=False)
+ if form.is_valid():
+ Tag.objects.add_tag(obj, form.cleaned_data['tag'])
+ raise
HttpRedirectException(HttpResponseRedirect(obj.get_absolute_url()))
+ else:
+ form = TagForm()
+
+ namespace['form'] = form
+ output = nodelist.render(context)
+ context.pop()
+ return output
+
+
+class TagForm(forms.Form):
+
+ form_id = forms.CharField(widget=forms.HiddenInput(),
initial="pp_tag_form")
+ tag = forms.CharField(widget=forms.TextInput(), initial="")
+