Source code for openassembly.pirate_badges.templatetags.badgetags

from django import template
from django import forms
from django.http import HttpResponseRedirect
import datetime
from django.contrib.auth.models import User
from pirate_badges.models import Badge, BadgeDimension, test_badge, BadgeType
from pirate_core import HttpRedirectException, namespace_get, FormMixin
from pirate_social.models import RelationshipEvent 
from pirate_deliberation.models import Argument
from pirate_consensus.models import UpDownVote
from django.contrib.contenttypes.models import ContentType
from tagging.models import TaggedItem

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

get_namespace = namespace_get('pp_badge')


@block
[docs]def pp_badge_dimensions(context, nodelist, *args, **kwargs): '''Retrieves all dimensions of badges''' context.push() namespace = get_namespace(context) namespace['badges'] = BadgeDimension.objects.all() output = nodelist.render(context) context.pop() return output
@block
[docs]def pp_get_badges(context, nodelist, *args, **kwargs): ''' This block tag can create or process forms to get badges. Usage is as follows: {% pp_get_badges user=request.object %} Do stuff with {{ pp_badge.badges }}. {% endpp_get_badges %} ''' context.push() namespace = get_namespace(context) user = kwargs.get('user', None) if user is not None: badges = Badge.objects.filter(user=user) total = badges.count() for val in BadgeType.objects.all(): testbadges = badges.filter(badge_type_id=val.id) try: namespace[val.name] += testbadges.count() except: namespace[val.name] = testbadges.count() namespace['total'] = total namespace['badges'] = badges else: raise ValueError("Must supply 'user' argument to pp_get_badges") output = nodelist.render(context) context.pop() return output
@block
[docs]def pp_check_badges(context, nodelist, *args, **kwargs): ''' This block tag can create or process forms to see if there are new badges. Usage is as follows: {% pp_check_badges user=request.object %} Do stuff with {{ pp_badge.new_badges }}. {% endpp_check_badges %} ''' context.push() namespace = get_namespace(context) namespace['new_badges'] = new_badges output = nodelist.render(context) context.pop() return output
"""Checks if badge is given yet, if new adds to new_badge list"""
[docs]def check_add_badge(existing_badges, new_badges, verbose_name, name, badge_type, check): if name in existing_badges or not check: return new_badges badge_type = BadgeDimension.objects.get(verbose_name=verbose_name, name=name,badge_type=badge_type) user_badge, is_new = Badge.objects.get_or_create(dimension=badge_type,user=user, badge_type=badge_type) new_badges.append(user_badge) return new_badges