Files @ 33305d27ac85
Branch filter:

Location: symposion_app/vendor/symposion/sponsorship/templatetags/sponsorship_tags.py - annotation

bsturmfels
Can just live in /tmp instead
46e38bc75841
b50974263c36
46e38bc75841
c9e600e42cba
c9e600e42cba
46e38bc75841
46e38bc75841
46e38bc75841
46e38bc75841
46e38bc75841
46e38bc75841
36ab6d599ffc
46e38bc75841
46e38bc75841
46e38bc75841
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
36ab6d599ffc
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
46e38bc75841
36ab6d599ffc
46e38bc75841
ef2624698b3c
e4e7b890a2a6
e4e7b890a2a6
36ab6d599ffc
36ab6d599ffc
36ab6d599ffc
e4e7b890a2a6
36ab6d599ffc
36ab6d599ffc
46e38bc75841
46e38bc75841
46e38bc75841
46e38bc75841
e4e7b890a2a6
36ab6d599ffc
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
36ab6d599ffc
e4e7b890a2a6
e4e7b890a2a6
36ab6d599ffc
e4e7b890a2a6
ef2624698b3c
ef2624698b3c
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
46e38bc75841
46e38bc75841
46e38bc75841
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
46e38bc75841
46e38bc75841
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
e4e7b890a2a6
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
b50974263c36
from django import template
from django.template.defaultfilters import linebreaks, urlize

from symposion.conference.models import current_conference
from symposion.sponsorship.models import Sponsor, SponsorLevel


register = template.Library()


class SponsorsNode(template.Node):

    @classmethod
    def handle_token(cls, parser, token):
        bits = token.split_contents()
        if len(bits) == 3 and bits[1] == "as":
            return cls(bits[2])
        elif len(bits) == 4 and bits[2] == "as":
            return cls(bits[3], bits[1])
        else:
            raise template.TemplateSyntaxError("%r takes 'as var' or 'level as var'" % bits[0])

    def __init__(self, context_var, level=None):
        if level:
            self.level = template.Variable(level)
        else:
            self.level = None
        self.context_var = context_var

    def render(self, context):
        conference = current_conference()
        if self.level:
            level = self.level.resolve(context)
            queryset = Sponsor.objects.filter(
                level__conference=conference, level__name__iexact=level, active=True)\
                .order_by("added")
        else:
            queryset = Sponsor.objects.filter(level__conference=conference, active=True)\
                .order_by("level__order", "added")
        context[self.context_var] = queryset
        return u""


class SponsorLevelNode(template.Node):

    @classmethod
    def handle_token(cls, parser, token):
        bits = token.split_contents()
        if len(bits) == 3 and bits[1] == "as":
            return cls(bits[2])
        else:
            raise template.TemplateSyntaxError("%r takes 'as var'" % bits[0])

    def __init__(self, context_var):
        self.context_var = context_var

    def render(self, context):
        conference = current_conference()
        context[self.context_var] = SponsorLevel.objects.filter(conference=conference)
        return u""


@register.tag
def sponsors(parser, token):
    """
    {% sponsors as all_sponsors %}
    or
    {% sponsors "gold" as gold_sponsors %}
    """
    return SponsorsNode.handle_token(parser, token)


@register.tag
def sponsor_levels(parser, token):
    """
    {% sponsor_levels as levels %}
    """
    return SponsorLevelNode.handle_token(parser, token)


class LocalizedTextNode(template.Node):

    @classmethod
    def handle_token(cls, parser, token):
        bits = token.split_contents()
        if len(bits) == 3:
            return cls(bits[2], bits[1][1:-1])
        elif len(bits) == 5 and bits[-2] == "as":
            return cls(bits[2], bits[1][1:-1], bits[4])
        else:
            raise template.TemplateSyntaxError("%r takes 'as var'" % bits[0])

    def __init__(self, sponsor, content_type, context_var=None):
        self.sponsor_var = template.Variable(sponsor)
        self.content_type = content_type
        self.content_var = context_var

    def render(self, context):
        s = ''
        try:
            sponsor = self.sponsor_var.resolve(context)
            content_type = '%s_%s' % (self.content_type, context['request'].LANGUAGE_CODE)
            texts = sponsor.sponsor_benefits.filter(benefit__content_type=content_type)
            if texts.count() > 0:
                s = linebreaks(urlize(texts[0].text, autoescape=True))
            if self.content_var:
                context[self.content_var] = s
                s = ''
        except:
            pass
        return s


@register.tag
def localized_text(parser, token):
    """
    {% localized_text "content_type" sponsor %}
    {% localized_text "content_type" sponsor as localized_text %}
    """
    return LocalizedTextNode.handle_token(parser, token)