Exemplo n.º 1
0
def recipientlink(r):
    if isinstance(r, User):
        return userlink(r)
    elif isinstance(r, Group):
        return r.data
    else:
        return r
Exemplo n.º 2
0
def chain_list(request, competition, data):
    chains = Chain.objects.filter(competition=competition)
    order_by_field = django_sorting.middleware.get_field(request)
    if len(order_by_field) > 1:
        chains = chains.order_by(order_by_field, 'category', 'position', 'name')
    else:
        chains = chains.order_by('category', 'position', 'name')
    chain_dict = {chain.id: chain for chain in chains}
    ctasks = list(CompetitionTask.objects.filter(competition=competition) \
            .values_list('id', 'chain_id', 'task__author_id'))
    author_ids = [author_id for ctask_id, chain_id, author_id in ctasks]
    authors = User.objects.only('id', 'username', 'first_name', 'last_name') \
            .in_bulk(set(author_ids))

    verified_ctask_ids = set(Submission.objects \
            .filter(team__competition_id=competition.id,
                    team__team_type=Team.TYPE_ADMIN_PRIVATE,
                    cache_is_correct=True) \
            .values_list('ctask_id', flat=True))

    for chain in chains:
        chain.competition = competition
        chain.t_ctask_count = 0
        chain._author_ids = set()
        chain.t_is_verified = True

    for ctask_id, chain_id, author_id in ctasks:
        if chain_id is None:
            continue
        chain = chain_dict[chain_id]
        chain.t_ctask_count += 1
        chain._author_ids.add(author_id)
        if ctask_id not in verified_ctask_ids:
            chain.t_is_verified = False

    from userprofile.templatetags.userprofile_tags import userlink
    for chain in chains:
        chain.t_authors = mark_safe(u", ".join(userlink(authors[author_id])
                for author_id in chain._author_ids))

    data['chains'] = chains
    return data