Source code for oioioi.contests.templatetags.get_user_name

from django import template
from django.template import Node, TemplateSyntaxError, Variable
from django.template.loader import render_to_string

from oioioi.base.utils import get_user_display_name
from oioioi.contests.utils import can_see_personal_data, is_contest_basicadmin

[docs]register = template.Library()
[docs]class UserInfoLinkNode(Node): def __init__(self, target_user, asvar): self.target_user = Variable(target_user) self.asvar = asvar
[docs] def _get_user_name(self, context, user): raise NotImplementedError
[docs] def render(self, context): is_admin = context.get('is_admin', False) or is_contest_basicadmin( context['request'] ) personal_data = can_see_personal_data(context['request']) url = render_to_string( 'contests/user_info_link.html', { 'ctx': context, 'target_user': self.target_user.resolve(context), 'target_name': self._get_user_name( context, self.target_user.resolve(context) ), 'is_admin': is_admin, 'can_see_personal_data': personal_data, }, ) if self.asvar: context[self.asvar] = url return '' else: return url
[docs]class PublicNameUserInfoLinkNode(UserInfoLinkNode):
[docs] def _get_user_name(self, context, user): return context['request'].contest.controller.get_user_public_name( context['request'], user )
[docs]class FullNameUserInfoLinkNode(UserInfoLinkNode):
[docs] def _get_user_name(self, context, user): return get_user_display_name(user)
[docs]def _get_name(parser, token, tag_name): bits = token.split_contents() if (len(bits) != 4 or bits[2] != 'as') and (len(bits) != 2): raise TemplateSyntaxError( "The tag should look like this: " "{%% %s <user_object>[ as <variable>] %%}" % tag_name ) asvar = None if len(bits) == 4: asvar = bits[3] return (bits[1], asvar)
@register.tag
[docs]def public_name(parser, token): (user, asvar) = _get_name(parser, token, "public_name") return PublicNameUserInfoLinkNode(user, asvar)
@register.tag
[docs]def full_name(parser, token): (user, asvar) = _get_name(parser, token, "full_name") return FullNameUserInfoLinkNode(user, asvar)