Source code for openassembly.pirate_deliberation.templatetags.argumenttags

from django import template
from django import forms
from django.http import HttpResponseRedirect
import datetime
from django.contrib.contenttypes.models import ContentType
from pirate_deliberation.models import Argument, Stance, get_argument_list
from pirate_consensus.models import Consensus, UpDownVote
from pirate_reputation.models import ReputationDimension
from pirate_core.helpers import clean_html
from pirate_deliberation.forms import YeaArgumentForm, NayArgumentForm
from pirate_deliberation.choices import ARG_TYPES_DICT

from pirate_core import HttpRedirectException, namespace_get, FormMixin

from django.utils.html import urlize

from pirate_signals.models import aso_rep_event,notification_send, relationship_event

from customtags.decorators import block_decorator
register = template.Library()
block = block_decorator(register)

get_namespace = namespace_get('pp_argumentation')


@block
[docs]def pp_get_argument_count(context, nodelist, *args, **kwargs): context.push() namespace = get_namespace(context) obj = kwargs.pop('object', None) arg_type = kwargs.pop('arg_type', None) arg_list = Argument.objects.all() if isinstance(arg_type, unicode): arg_type, created = Stance.objects.get_or_create(arg=arg_type) if obj: arg_list = arg_list.filter(parent_pk=obj.id) if arg_type: arg_list = arg_list.filter(stance=arg_type) namespace['count'] = arg_list.count() output = nodelist.render(context) context.pop() return output
@block
[docs]def pp_get_arg_types(context, nodelist, *args, **kwargs): """This block tag grabs all available Stances. Can be used in the following manner: {% pp_get_arg_types %} Do stuff with {{ pp_blob.arg_type_list }} {% endpp_get_arg_types %}""" context.push() namespace = get_namespace(context) arg_type_list = Stance.objects.all() namespace['arg_type_list'] = arg_type_list output = nodelist.render(context) context.pop() return output
@block
[docs]def pp_get_argument_list(context, nodelist, *args, **kwargs): """This block tag grabs a list of arguments, based on the issue that is paseed into the context and then places the lsit of arguments into the context. Can be used in the following manner: {% pp_get_argument_list solution=solution rng=request.rng %} Do stuff with {{ pp_argumentation.argument_list }} {% endpp_get_argument_list %} """ #TODO:Split argument list into list of argument lists by Stance context.push() namespace = get_namespace(context) obj = kwargs.pop('object', None) arg_type = kwargs.pop('arg_type', None) start = kwargs.pop('start', None) end = kwargs.pop('end', None) arg_list = get_argument_list(obj, arg_type, start, end) namespace['argument_list'] = arg_list output = nodelist.render(context) context.pop() return output
@block
[docs]def pp_argument_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_argument_form POST=request.POST path=request.path object=pp-issue.issue arg = pp_argumentation.argument%} Do stuff with {{ pp_argumentation.form }}. {% endpp_argument_form %} ''' context.push() namespace = get_namespace(context) POST = kwargs.get('POST', None) obj = kwargs.get('object', None) arg_type = kwargs.get('dimension', None) user = kwargs.get('user', None) #arg_type = ARG_TYPES_DICT[arg_type] #stance, created = Stance.objects.get_or_create(arg=arg_type) if isinstance(obj, Argument): arg = obj parent = arg.parent else: arg, parent = (None, obj) form = None if POST and user != None: if POST.get("form_id") == "pp_argument_form_nay": stance, created = Stance.objects.get_or_create(arg='nay') form = NayArgumentForm(POST) if POST.get("form_id") == "pp_argument_form_yea": stance, created = Stance.objects.get_or_create(arg='yea') form = YeaArgumentForm(POST) if POST.get("form_id") == "pp_argument_form_yea" or POST.get("form_id") == "pp_argument_form_nay": if form.is_valid(): new_arg = form.save(commit=False) new_arg.stance = stance new_arg.user = user #new_arg.description = urlize(new_arg.description, trim_url_limit=30, nofollow=True) new_arg.parent_type = ContentType.objects.get_for_model(parent) new_arg.parent_pk = parent.id new_arg.save() namespace['object_pk'] = new_arg.pk namespace['content_type'] = ContentType.objects.get_for_model(new_arg).pk cons, is_new = Consensus.objects.get_or_create(content_type=ContentType.objects.get_for_model(Argument), object_pk=new_arg.pk, parent_pk=new_arg.parent_pk) if is_new: cons.intiate_vote_distributions() #if this is a new issue/consensus, send signal for reputation aso_rep_event.send(sender=new_arg, event_score=4, user=new_arg.user, initiator=new_arg.user, dimension=ReputationDimension.objects.get('Argument'), related_object=new_arg) notification_send.send(sender=new_arg.user, obj=new_arg, reply_to=parent) relationship_event.send(sender=new_arg.user, obj=new_arg, parent=parent) #raise HttpRedirectException(HttpResponseRedirect(new_arg.get_absolute_url())) if arg_type == 'n': form = NayArgumentForm() if arg_type == 'y': form = YeaArgumentForm() else: namespace['errors'] = form.errors else: if arg_type == 'n': form = NayArgumentForm() if arg_type == 'y': form = YeaArgumentForm() namespace['help_text'] = 'Supply a ' + str(arg_type) + ' Argument for your position.' namespace['form'] = form output = nodelist.render(context) context.pop() return output