示例#1
0
文件: admin.py 项目: ikicic/skoljka
 def refresh_submissions_cache_is_correct(self, request, queryset):
     # TODO: move this to the method itself
     submissions = Submission.objects.filter(ctask__in=queryset)
     result = refresh_submissions_cache_is_correct(submissions, queryset)
     self.message_user(request, "{} submission(s) corrected.".format(result))
示例#2
0
文件: views.py 项目: ikicic/skoljka
def chain_tasks_list(request, competition, data):
    created = False
    updated_chains_count = None
    updated_ctasks_count = None
    updated_submissions_cache_is_correct = None
    empty_form = ChainTasksForm(competition=competition)
    form = empty_form

    if request.POST.get('action') == 'refresh-chain-cache-is-verified':
        updated_chains_count = len(refresh_chain_cache_is_verified(competition))
    elif request.POST.get('action') == 'refresh-ctask-cache-admin-solved-count':
        updated_ctasks_count = len(
                refresh_ctask_cache_admin_solved_count(competition))
    elif request.POST.get('action') == 'refresh-submission-cache-is-correct':
        updated_submissions_cache_is_correct = \
                refresh_submissions_cache_is_correct(competitions=[competition])
    elif request.method == 'POST':
        form = ChainTasksForm(request.POST, competition=competition)
        if form.is_valid():
            chain = form.save(commit=False)
            chain.competition = competition
            chain.save()

            old_ids = CompetitionTask.objects \
                    .filter(chain=chain).values_list('id', flat=True)
            new_ids = [x.id for x in form.cleaned_data['ctasks']]
            update_chain_ctasks(competition, chain, old_ids, new_ids)
            created = True
            form = empty_form  # Empty the form.

    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) \
            .select_related('task__author', 'task__content__text',
                'comment__text'))
    ctask_dict = {ctask.id: ctask for ctask in ctasks}

    for chain in chains:
        chain.competition = competition
        chain.t_ctasks = []

    unused_ctasks = []
    for ctask in ctasks:
        ctask.competition = competition
        if ctask.chain_id is None:
            unused_ctasks.append(ctask)
        else:
            chain_dict[ctask.chain_id].t_ctasks.append(ctask)

    for ctask in ctasks:
        is_important = ctask.comment.text.strip() and \
                is_ctask_comment_important(ctask.comment.text)
        ctask.t_class = ctask_comment_verified_class(
                competition, ctask, request.user, is_important=is_important)

    for chain in chains:
        chain.t_ctasks.sort(key=lambda x: x.chain_position)
        chain.t_class = \
                'cchain-verified-list' if chain.cache_is_verified else ''

    data['created'] = created
    data['form'] = form
    data['chains'] = chains
    data['unused_ctasks'] = unused_ctasks
    data['trans_checked_title'] = _("Number of admins that solved this task.")
    data['updated_chains_count'] = updated_chains_count
    data['updated_ctasks_count'] = updated_ctasks_count
    data['updated_submissions_cache_is_correct'] = \
            updated_submissions_cache_is_correct
    return data
示例#3
0
文件: admin.py 项目: ikicic/skoljka
 def refresh_cache_is_correct(self, request, queryset):
     result = refresh_submissions_cache_is_correct(queryset)
     self.message_user(request, "{} submission(s) corrected.".format(result))